linux 将系统制作为IMG

安装工具

$sudo apt-get install dosfstools dump parted kpartx

根据文件系统大小生成镜像文件

将SD卡插入PC机上

$df -h -m

打印信息如下

文件系统          1M-块   已用   可用  已用% 挂载点
udev             1907     0   1907    0% /dev
tmpfs             386     7    380    2% /run
/dev/sda6      314483 15195 283291    6% /
tmpfs            1930    48   1883    3% /dev/shm
tmpfs               5     1      5    1% /run/lock
tmpfs            1930     0   1930    0% /sys/fs/cgroup
/dev/sda1         300    35    266   12% /boot/efi
tmpfs             386     1    386    1% /run/user/1000
/dev/sdb1          40     8     33   18% /media/youbote/boot
/dev/sdb2        7415  2202   5198   30% /media/youbote/rootfs

其中/dev/sdb1和/dev/sdb2为SD卡的连个分区,需要根据分区的实际的实际使用情况生成指定大小的镜像。

实际镜像的大小 = boot[size] + linux[Used] + 分区损耗[5%~10%]
即:2735M = 40M + 2195M + 500M(估算)

使用dd命令生成空的镜像文件
dd命令中【1k=1024b;1KB=1000b;1M=1024kb;1MB=1000kb】

$sudo dd if=/dev/zero of=nanopi.img bs=1M count=2735

更改镜像文件的分区表信息

首先查看原先Linux系统的各个分区情况(因为SD卡在我这里挂在是sdb,所以指定/dev/sdb)

$sudo fdisk -l /dev/sdb

打印信息如下:

Disk /dev/sdb: 7.5 GiB, 7990149120 bytes, 15605760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61d35bcd

设备       启动   Start      末尾     扇区   Size Id 类型
/dev/sdb1        49152   131071    81920   40M 83 Linux
/dev/sdb2       131072 15605759 15474688  7.4G 83 Linux

可以看到SD卡上:
boot分区的大小是40M,起始扇区号49152,结束扇区号131071。
rootfs分区的大小是7.4G,起始扇区号131072,结束扇区号15605759。

根据以上信息,给虚拟磁盘镜像添加如下分区信息:
添加一个msdos分区
添加一个ext4 主分区,起始扇区号49152,结束扇区号131071。
添加一个ext4 主分区,起始扇区号131072,结束分区号为最后的扇区号

$sudo parted nanopi.img --script -- mklabel msdos
$sudo parted nanopi.img --script -- mkpart primary ext4 49152s 131071s
$sudo parted nanopi.img --script -- mkpart primary ext4 131072s -1

查看分区后的镜像文件

$sudo parted nanopi.img

然后输入paint,打印如下信息

Model:  (file)
磁盘 /home/youbote/temp/nanopi.img: 2868MB
Sector size (logical/physical): 512B/512B
分区表:msdos
Disk Flags: 

数字  开始:  End     大小    类型     文件系统  标志
 1    25.2MB  67.1MB  41.9MB  primary
 2    67.1MB  2867MB  2800MB  primary

挂在虚拟磁盘并对虚拟磁盘进行分区格式化

losetup:用来连接 img 镜像文件和 loopX回环设备
kpartx:挂载虚拟磁盘

$sudo losetup /dev/loop7 nanopi.img
$sudo kpartx -av /dev/loop7

打印信息如下:
添加了两个映射分区

add map loop7p1 (253:1): 0 81920 linear 7:7 49152
add map loop7p2 (253:2): 0 5468160 linear 7:7 131072

格式化虚拟磁盘分区

$sudo mkfs.ext4 /dev/mapper/loop7p1
$sudo mkfs.ext4 /dev/mapper/loop7p2

备份SD卡数据

备份uboot引导程序

$sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop7 bs=1024 seek=8

备份boot分区内容,将虚拟磁盘的boot分区挂载到系统的loop7p1目录上,然后将SD卡的boot分区内容拷贝到虚拟磁盘上boot分区上

$mkdir loop7p1
$sudo mount /dev/mapper/loop7p1 loop7p1
$sudo cp -rf /media/youbote/boot/* loop7p1/

备份rootfs分区内容,将虚拟磁盘的rootfs分区挂载到系统的loop7p2目录上,然后将SD卡的rootfs分区内容拷贝到虚拟磁盘的rootfs分区上

$mkdir loop7p2
$sudo mount /dev/mapper/loop7p2 loop7p2/
$sudo cp -rf /media/youbote/rootfs/* loop7p2/

卸载虚拟磁盘

$sudo umount loop7p1/
$sudo umount loop7p2/
$sudo kpartx -d nanopi.img
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值