备份树莓派数据到镜像文件并挂载查看的全流程
最近买了一个树莓派4b换下了陪伴我7年的旧3b,由于新款用的是64位处理器,旧系统不能发挥全部性能,遂决定备份后重新刷系统。备份的目标是不仅全盘备份而且方便读取,经过仔细比对决定采用备份为img格式的方法,这种文件通过一些操作可以挂载为磁盘随时读取内容。
为了方便,以下均在装有Ubuntu的虚拟机中操作。树莓派系统的SD卡通过读卡器连接到电脑上。
首先查看SD卡的设备名
1 | sudo fdisk -l |
找到和SD卡相同大小的磁盘所对应的设备名,我这里是/dev/sdb
。
然后备份到img文件
1 | sudo dd if=/dev/sdb of=rpi.img status=progress bs=16M |
if
和of
一个是输入一个是输出,status=progress
让程序实时报告已完成的量和速度等信息(我第一次没加,结果快复制完时手贱按了停止,全部木大),bs
指定块大小(从源中读取到指定大小的内存内存再写入硬盘),默认的512字节过小,实测几M至十几M即可,过大则花费大量时间读取到内存得不偿失。
耐心等待复制完成之后,可以在当前目录看到rpi.img
。如果半途提示空间不足,可参照这篇文章的指引扩展虚拟机磁盘容量。
然后查看备份的镜像文件信息,输出示例如下
1 | ~$ fdisk -l rpi.img |
第一个是引导分区,第二个是主要的数据分区,要挂载的一般是后者。首先在/mnt
目录创建一个文件夹,如/mnt/rpi
,然后将镜像文件挂载到上面。
1 | sudo mount -o loop,offset=272629760 rpi.img /mnt/rpi |
-o
后面的内容是以逗号分隔的选项列表。loop
为显式指定以回环形式挂载img文件,省略一般没后果但是在旧系统上可能报错。offset
后的数字为前文中单元
的值(512)乘以rpi.img2
中起点
的值(532480),应根据实际情况自行计算。举一反三,如果要查看引导分区的内容,offset
后的值应改为512x8192=4194304。如果不设置offset
,会报错“mount: /mnt/rpi: wrong fs type, bad option, bad superblock on /dev/loop10, missing codepage or helper program, or other error.”。本操作参考了这个问答。
挂载后,就能在/mnt/rpi
处访问树莓派SD卡中的文件了。不需要时,输入sudo umount /mnt/rpi
卸载镜像。