为树莓派制作系统镜像时进行瘦身,方便后续保存与批量写入

需求

因为项目上需要使用树莓派,开发的时候利用一块树莓派进行系统配合开发。开发完毕后,需要将这块树莓派的系统以及程序复制到其它树莓派上,这就需要将这块树莓派的系统连带程序进行镜像备份。

我使用的是64GTF卡,因为项目中会实时保存一些图片,所以需要容量大一些的TF卡,这就出现了一个问题,在项目初始化的时候,因为图片还没有写入,TF卡占用并不大,系统带程序总共也就7G左右,但是做镜像的时候是把整个卡都镜像,也就是说除了系统和程序,被分区但没有使用的空间也一起镜像了,一个镜像的大小是64G。每次将镜像烧录至新卡耗时都很长,而且64G的一个镜像移动存储都是个麻烦事,所以想将镜像瘦身。想将没有使用的空间剥离出镜像。

踩坑经过

经过连续踩坑,最后发现还是Linux下做镜像瘦身最方便。

先记录一下踩的坑。如果对踩坑没有兴趣,可以直接跳到下一节“光明大道”。

一 、Win32DiskImager

在Windows下用使Win32Diskmager进行镜像制作。 将做好系统和程序的TF卡,用读卡器连接Windows电脑,然后通过Win32DiskImager的Read,将TF卡制作成镜像,但是这样做完的镜像大小就是64G。

在网上找了很多方法再加上镜像本身较大,在移动,复制,瘦身的时候简直就是地狱般的感受,结果大多数都没有办法成功。比如:在网上找了很多脚本,这些脚本大多是linux下的进行的,将64G大小的镜像先Copy到U盘或者移动硬盘上,再找一台Linux机器复制进去,然后在Linux机器上运行网上找的各种瘦身脚本,然后漫长的待以后,结果不是在瘦身过程中报错,就是在瘦身后的img插回树莓派没有办法启动。

二、分驱精灵配合Win32DiskImager

然后又找到了一个纯Windows下的操作,将做好系统的TF卡,通过读卡器与Windows连接,此时能读出来两个分区,一个是boot(fat),一个rootfs(ext4)分区,然后通过『分区精灵』等磁盘管理工具将ext4分区进行分区大小调整,调小后再通过Win32DiskImager的Read进行镜像制作,此时需要将Win32DiskImager中的『仅读取已分配分区』勾选上,就能制作最小镜像。本来以为找到了救命稻草,结果在使用分区精灵工具的时候直接判了死刑!!!!因为超级块的数量和分区精灵读取出来的数量不一致,操作分区调整的时候直接报错了。。。。

踩过坑以后,就是光明大道,虽然还是很坎坷。

光明大道

纯Windows下实在行不通,怎么也得借助Linux,那不如纯Linux吧,制作镜像以及烧录镜像都在Linux下完成,主要使用dd命令。

注意:linux主机的磁盘空闲空间一定要 > TF卡的容量。

用读卡器将TF卡与Linux主机相连

一、制作镜像

使用fdisk -l查看分区信息

fdisk -l

 

这里可以看到sdb2的起点和末尾扇区,以及sdb一个扇区单元的大小, 使用dd命令进行镜像制作 (bs为一个扇区/块的大小,从fdisk -l命令中可以查看到)

sudo dd if=/dev/sdb of=./imgname.img bs=512

二、压缩镜像

方法一:

参考项目
https://github.com/Drewsif/PiShrink中的描述下载提供好的脚本

然后通过命令运行脚本

sudo pishrink.sh [-s] imgname.img imgname_small.img

一旦使用-s参数,那么脚本首先要把镜像复制一份出来,在新复制的镜像上进行压缩操作,这就需要有较大的存储空间,比如要压一个64G的镜像,那么就需要>64Gx2的存储空间,并且刚刚满足64GX2都不行,必须还要再多出来10G左右的空间。现在是64G的卡,如果将来我用128G的卡甚至于512G的卡,那么就根本没有办法先复制再压缩了。只能选择不带参数的镜像压缩。

方法二:

安装gparted,该软件类似于windows下的分区助手,分区精灵,但是要调整分区大小就必须先卸载要操作的分区。所以如果要操作带系统的分区,就必须用引导盘启动后再进行调整分区操作。好在我们现在只是用来修改TF卡的分区大小,只要卸载TF卡即可操作。

sudo apt-get install gparted

安装完成后打开软件,选择TF卡的分区

卸载分区(不卸载不能操作调整分区大小)

卸载后选择更改大小/移动

淡黄色的块为已使用的空间,白色的块为未使用的空间。不能紧贴着已使用空间缩减,多少留一点空间。这里我给到6.5G。

然后点击“调整大小/移动”按钮进行操作。这样就多出来54G多的空余空间。

再用fdisk -l查看一下分区

sudo fdisk -l

可以看到sdb2的大小、起始、末尾信息。这里的末尾就是操作完调整分区大小后的末尾扇区。那么在接下来的dd命令中,可以使用count=末尾+1(为什么+1这一块,还没有深入了解,好像是从0开始记录的,所以需要+1)来实现制作镜像的节止点,这样就能保证做好的镜像在6.4G左右,没有多余的空间。等后面有时间了,再好好研究一下dd命令,看看有没有办法不需借助分区工具调整大小,就能直接知道所用空间的末尾。直接做出来最小镜像。

sudo dd if=/dev/sdb of=./imgname.img bs=512 count=13836288

通过以上两个方法,就可以对镜像进行压缩。

三、镜像烧录

其实就是dd命令将目标和源互换一下就行:

sudo dd if=./imgname.img of=/dev/sdb bs=512

把做好镜像的TF卡插回树莓派上启动,进入系统后使用raspi-config对文件系统扩展使用全部TF卡空间。

以上就是树莓派镜像制作、压缩、烧录到新卡的全部操作记录。

注:如果使用的是第三方系统,可以参考另一篇“树莓派使用非官方系统,安装raspi-config管理工具”,安装raspi-config工具,方便进行设置。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖拉夫小司机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值