- 查看树莓派空间使用情况及分区信息来建立 IMG 文件
1 | df -h |
- 安装必要软件
1 | sudo apt-get install dosfstools dump parted kpartx |
- 建立空白 IMG 文件并分区
1 | dd if=/dev/zero of=raspberrypi.img bs=1MB count=3072 |
- 挂载镜像到 loop 设备
1 | sudo losetup --show -f raspberrypi.img |
命令会返回链接后的设备路径,本例中为/dev/loop0
- 映射分区
1 | sudo kpartx -va /dev/loop0 |
kpartx 运行成功将打印映射后的信息,在 /dev/mapper 目录下可以找到两个分区
- 格式化分区
1 | sudo mkfs.vfat /dev/mapper/loop0p1 |
- 插入待备份的 SD 卡
重要:卸载桌面的自动挂载盘符,否则 dump 数据时会出错
手动挂载磁盘
1 | sudo mkdir /mnt/usb1 |
- 备份数据
创建一个用来挂载 img 镜像中分区的目录
1 | sudo mkdir /mnt/image |
挂载 img 中的 fat 分区
1 | sudo mount -t vfat /dev/mapper/loop0p1 /mnt/image |
用 cp 命令拷贝 SD 卡的 fat 分区数据到镜像的 fat 分区:
1 | sudo cp -rf /mnt/usb1/* /mnt/image |
拷贝完成,卸载 img 的 fat 分区
1 | sudo umount /mnt/image |
挂载 img 的 ext4 分区
1 | sudo mount -t ext4 /dev/mapper/loop0p2 /mnt/image |
切换到 /mnt/image 目录,ext4 文件系统需要使用 dump 和 restore 来完整拷贝数据
1 | cd /mnt/image |
dump 的参数
- 0: 完全备份;
- u: 当成功备份后信息写入/var/lib/dumpdates
- a: 自动大小
- f: 指定备份设备,后跟 - 表明写到标准输入
- 修改 PARTUUID
查看 mapper 设备的 PARTUUID (/dev/mapper/loop0p1 & /dev/mapper/loop0p2)
1 | sudo blkid |
修改/mnt/image/etc/fstab 中对应分区的 PARTUUID
再次挂载 boot 分区到/mnt/image
1 | sudo umount /mnt/image |
修改/mnt/image/cmdline.txt 中 root 的 PARTUUID
- 清理
镜像备份制作完成,需要卸载镜像
1 | cd |
现在 raspberrypi.img 中已包含了完整的系统备份,可使用 Win32 Disk Imager 等工具烧录到 TF 卡中。首次成功启动后,执行 sudo raspi-config
,选择 Advanced Options -> Expand Filesystem 扩展 TF 卡可用空间。