参考链接:https://blog.csdn.net/u013451404/article/details/80552765
1、使用df -h命令 查看需要制作镜像树莓派系统TF卡中实际有效数据占用:
2、将sd卡取出用读卡器插入另一台树莓派后使用fdisk -l命令查看分区信息,一般是/dev/sda,记录下/dev/sda2的start扇区
3、调整分区占用大小:使用e2fsck和resize2fs命令缩减sdb2分区
(1) sudo e2fsck -f /dev/sda2
(2) sudo resize2fs /dev/sda2 3G (实际占用大小)
4、重建分区大小为调整后的大小:用fdisk命令重建分区,让分区大小与我们缩减后的大小一致,这里的具体操作步骤为,调用fdisk /dev/sdb后首先用fdisk中的d命令删除sdb2分区,
然后用n命令重新建立sdb2分区,按n后选择新建主分区(p),分区号与之前要一致,写2。接着就到了关键的地方了,建立分区需要填分区的start扇区,所以这里就要将步骤2记录下来的start扇区写到这里,
这样才能保证数据不丢失。填写完start扇区后还要填end扇区,这里我们直接用+3G的方式让它自己去算结束扇区。马上又要进入关键步骤:回车后它会问你这里原来已经有一个ext4分区存在了,
是否需要删除该分区标识?(红色字体部分)。这里一定要输入n,不要让它删除原有分区标识,不然就悲剧了...。接着就回车并用w命令让它写入我们重建分区的修改。完成分区重建后重新挂载分区成功,
且用fdisk命令查看也已经变成了3G。到此准备工作就算完成了。
sudo fdisk /dev/sda
5、将缩减后的TF卡镜像到一个img文件中:
dd if=/dev/sda of=rpi.img bs=1M count=???
dd if=/dev/sda of=rpi.img bs=1M count=3120
使用dd命令将我们重建并缩减了分区的TF备份。通过fdisk命令查看重建后所有分区占用到的最后一个扇区来计算需要dd镜像的数据长度,
我这里sda2的end扇区是最后一个占用的扇区,为7317503,但是由于扇区是从0开始编号的,所以实际整个TF卡上的分区一共占用了7317504个扇区,
每个扇区是512字节,那么实际占用(7317504*512)/(1024*1024) = 3573MB,所以我们需要使用dd命令从TF卡中dd出来3573MB数据到img文件即可(命令在示例中),
dd命令的bs参数代表每次dd多少数据,count代表dd多少次,经过前面的计算,我这里填的是每次dd 1MB一共dd 3573次。dd完成后我们缩减后的整个TF卡就已经备份到debian-on-rpi.img文件中了,
通过fdisk命令查看该文件实际上与查看缩减后的TF是一样的,同时将该文件挂载到系统中也可以看到数据是真实有效的。
到这里备份工作就完成了,我们成功的将一个16G TF卡中的树莓派系统备份到了一个3G中的img文件中。