制作压缩版的树莓派SD卡镜像

利用Win32DiskImager备份的SD卡镜像,镜像文件相当大,利用16GSD卡备份的镜像接近16G,利用32GSD卡备份的接近32G。

通过下面方法,制作的SD卡镜像,和实际大小接近。

  1. 查看TF卡中实际有效数据占用:在树莓派上使用df命令查看TF卡的实际占用情况。
    在这里插入图片描述
    从图中可以看出,SD卡/dev/sda实际30G空间,仅仅使用了6.4G。

  2. 查看并记录需要缩减分区的start扇区:插入电脑后使用fdisk -l命令查看分区信息,我插入电脑后TF是/dev/sda,所以fdisk -l 后面的参数是/dev/sda,可以看出我的TF卡上一共有两个分区,分区1是树莓派的boot分区,只占了63M,可以忽略不计,而我的sda2分区(即上面的rootfs)大小是29.7G,所以下面的所有操作都是针对sda2分区的,即需要对sdb2进行分区重建和分区大小调整。这里需要从信息中记录下/dev/sda2的start扇区,后面要用到。我的sdb2 start扇区是131072,每个扇区大小是512字节。

  3. 调整分区占用大小:使用e2fsckresize2fs命令缩减sda2分区,由于前面已经知道sda2中的实际数据占用只有6.4G,因而我们可以把分区缩减到只要比6.4G大即可,我这里是将其缩减到7G(实际可以更小,只要大于6.4G即可)。
    e2fsck命令是检查分区信息,resize2fs命令是调整分区大小(注意调用此命令的参数),我给的参数sudo resize2fs /dev/sda2 7G的意思是将sda2分区大小调整为7G。调整完成后再用fdisk查看分区的大小,会发现还是显示的是29.7G,到这里不要慌,虽然是显示29.7G,但是实际上已经被缩减了,后面第四步会让它现出缩减后的原形。
    在这里插入图片描述

  4. 重建分区大小为调整后的大小:用fdisk命令重建分区,让分区大小与我们缩减后的大小一致;
    这里的具体操作步骤为,调用fdisk /dev/sda

(1) 首先用fdisk中的d命令删除sda2分区,
(2) 然后用n命令重新建立sda2分区,按n后选择新建主分区§,分区号与之前要一致,写2。
(3) 接着就到了关键的地方了,建立分区需要填分区的start扇区,所以这里就要将步骤2记录下来的start扇区写到这里,这样才能保证数据不丢失。
(4) 填写完start扇区后还要填end扇区,这里我们直接用+7G的方式让它自己去算结束扇区。
(5) 马上又要进入关键步骤:回车后它会问你这里原来已经有一个ext4分区存在了,是否需要删除该分区标识?(红色字体部分)。这里一定要输入n,不要让它删除原有分区标识,不然就悲剧了…。
(6) 接着就回车并用w命令让它写入我们重建分区的修改。
(7) 完成分区重建后重新挂载分区成功,且用fdisk命令查看也已经变成了7G。到此准备工作就算完成了。
在这里插入图片描述
在这里插入图片描述

  1. 将缩减后的TF卡镜像到一个img文件中:使用dd命令将我们重建并缩减了分区的TF备份;

这一步网上其它资料一般会说的过于复杂,使用了各类这样那样的工具来备份,实际上我这里利用了dd工具可以指定从一个地方把指定长度的数据镜像到另一个地方这个特性来简单的达到我的目的。

通过fdisk命令查看重建后所有分区占用到的最后一个扇区来计算需要dd镜像的数据长度,我这里sda2的end扇区是最后一个占用的扇区,为148111135,但是由于扇区是从0开始编号的,所以实际整个TF卡上的分区一共占用了148111136个扇区,每个扇区是512字节,那么实际占用
(148111136512)/(10241024) = 7232MB
所以我们需要使用dd命令从TF卡中dd出来7232MB数据到img文件即可(命令在示例中),
dd命令的bs参数代表每次dd多少数据,count代表dd多少次,
经过前面的计算,我这里填的是每次dd 1MB一共dd 7232次。
dd完成后我们缩减后的整个TF卡就已经备份到debian-on-rpi-32.img文件中了。
通过fdisk命令查看该文件实际上与查看缩减后的TF是一样的,同时将该文件挂载到系统中也可以看到数据是真实有效的。
到这里备份工作就完成了,我们成功的将一个32G TF卡中的树莓派系统备份到了一个7G中的img文件中。后期只需要将该img文件dd恢复到TF卡中即可正常启动。
在这里插入图片描述

  1. 恢复TF卡原有大小:由于我们调整了原TF卡上的分区,那么它的实际可用空间就只有7G了,所以我们还需要将它恢复成29.7G,实际上这里就是上面调整分区和重建分区的逆过程,先删除分区,重建一个29.7G的分区,然后再调整分区的大小即可。
    你想让这个分区占用你剩余的全部空间,那么在输入end扇区的时候直接使用默认值即可,调整分区的时候就不要加分区大小参数,只需使用命令sudo resize2fs /dev/sda2即可,后面都用默认值。后面使用Win32DiskImager烧写镜像即可。到此,所有步骤完成。

在这里插入图片描述
使用

sudo fdisk /dev/sda

扩展分区到29.7G后,如果要让文件系统的空间同样扩展到29.7G,还需要执行

sudo resize2fs /dev/sda2 多少G

参考链接:https://blog.csdn.net/u013451404/article/details/80552765

发布了44 篇原创文章 · 获赞 8 · 访问量 6734

猜你喜欢

转载自blog.csdn.net/zhaodeming000/article/details/103198175