5.2. 使用dd命令压缩备份SD卡系统镜像并重新烧录¶
使用dd命令进行SD卡压缩备份虽然需要借助运行Linux系统的主机或虚拟机,但是备份出的镜像体积较小,便于再次发布和烧录。
将已经搭建好环境的SD卡从板卡取出并插到读卡器上,然后将读卡器接入PC机(Ubuntu中),
打开Gparted磁盘管理工具,将磁盘切换到SD卡,就能看到一下信息(烧录debian系统的SD卡为例)
没有Gparted的可以使用以下命令安装。
1sudo apt install gparted
从图中可以看到SD卡中共8个已分配的分区,要备份的内容是最后一个分区及之前的内容。
最后一个分区大小为23.43GiB,但是已用空间只有450KiB,我们将最后一个分区的大小进行压缩,就可以减小备份镜像的大小。
选中要调整大小的分区,点击鼠标右键,选中 更改大小/移动
从图中看到,此分区的最小大小为481M,我们将它压缩到500M,然后点击 调整大小/移动
配置完成后点击绿色对钩,开始执行的更改
如果希望备份的镜像可以在烧录启动时自动扩展最后一个分区,可以在终端执行以下命令。
挂载rootfs分区,根据上图可知,也就是/dev/sdb6,然后删除其中的一个文件
1
2
3
4
5
6
7
8#挂载rootfs分区
sudo mount /dev/sdb6 /mnt
#删除此文件,使用备份镜像启动会自动扩展分区
sudo rm /mnt/var/lib/misc/firstrun
# 删除完成后,卸载已挂载的分区
sudo umount /mnt
现在再计算一下需要备份的大小 (8+4+4+64+64+32+6.00x1024+128+500)MiB≈6948MiB,
由于显示的大小通过四舍五入的方式保留2位小数,所以我们可以加一点余量,备份7000MiB的大小。
注解
在Linux下 1MiB=1024KiB=1048576Byte,1MB=1000KB=1000000Byte。
使用 mkdir 命令创建一个新的目录,用于存放从带镜像的SD卡中拷贝的镜像。
然后使用 dd 命令将带镜像的SD中的镜像拷贝到新创建的目录中。
1
2
3
4
5
6
7
8
9
10#创建新目录
mkdir backup
#将带镜像的SD卡中的镜像拷贝到创建的目录中
sudo dd if=/dev/sdb of=./backup/backup.img count=7000 bs=1024k conv=sync
#拷贝需要时间,请耐心等待,打印消息如下
记录了7000+0 的读入
记录了7000+0 的写出
7340032000 bytes (7.3 GB, 6.8 GiB) copied, 492.74 s, 14.9 MB/s
提示
若备份的镜像烧录后仍无法正常运行,请将bs=1024k改为bs=1M并去掉conv参数,即
sudo dd if=/dev/sdb of=./backup/backup.img count=7000 bs=1M
等待dd命令运行完成后,就得到了RAW格式的backup.img镜像
dd命令参数的含义:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=/dev/sdb >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=./backup/backup.img,
这里的.img是镜像的格式,转成.img格式的文件后方便后续使用etcher烧录镜像 >
bs = bytes:同时设置读入/输出的块大小为bytes个字节,此处填的是1024k,表示1M大小。
count = blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数,此处设置的是7000,
表示7000个bs,也就是7000M。
conv= sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
RAW格式的backup.img镜像,可以使用使用Win32DiskImager或Etcher等软件来烧录到SD卡,也可以使用dd命令去写入到空的SD卡中。
将空白SD卡插入PC,确认插入SD卡的设备号,这里演示的设备号是/dev/sdc,烧录时以SD卡实际对应的设备号灵活修改。
1
2
3
4
5
6
7#将backup.img写入SD卡
sudo dd if=./backup/backup.img of=/dev/sdc bs=1024k conv=sync
#写入完成后,打印消息如下
记录了7000+0 的读入
记录了7000+0 的写出
7340032000 bytes (7.3 GB, 6.8 GiB) copied, 427.027 s, 17.2 MB/s
不指定count,会将整个backup.img文件写入目标位置。
等待写入完成后,即可使用烧录好的SD卡来启动板卡了。