Linux系统镜像制作时遇到的存储空间问题

——Linux系统镜像制作时遇到的存储空间问题
  以前做TX2的系统镜像的时候,因为没有清理系统中的冗余内容,导致镜像文件超大,在二次烧写设备的时候需要等很长的时间,非常的不方便。
  前段时间得空,找了一台设备,在系统的“/”目录下使用“du -sh *”命令去找大文件、非必须文件,挨个的删除掉,将system精简了一半多,然后重新制作镜像文件,得到的镜像文件是以前镜像的一半还小,二次烧写所需要的时间减少大半。
  今天因为项目需要,重新在一台设备上拷贝了Linux内核文件,修改了一些内核相关和系统相关的一些东西,更新内核后将内核源码等文件全部清理掉,又花了一些时间去精简文件系统,然后再次制作系统镜像。结果出乎意料,系统镜像竟然大了一倍多些(原来精简后差不多4.7G,现在又回到了9.8G)。
  难道是忘记删源码了?又进到系统里面查看,都已经删干净了,使用“df -h”命令查看存储,system占用空间4.2G左右,那么怎么抽取出来的镜像那么大?!
  又试了好几次,都是一样。为了解决问题,研究了一下镜像制作的过程,大概也就两步:

  • 将TX2的存储空间作为一块外设挂载到电脑上,然后使用dd命令将TX2的所有存储空间中的内容复制到计算机的一个文件:system.img.raw,该文件的大小等于TX2存储空间的大小,29G左右。
  • 上述复制了TX2内容的文件中有很多存储段是没有存储内容的,可以通过mksparse工具优化掉没有使用的空间

按照理想的情况,我在第二次精简系统system后,system使用空间大小3.9G,那么得到的系统镜像文件差不多4.4G左右,实际上抽取出来的镜像大小9.8G,多了5.4G左右,哪里来的?
  经过多次重复尝试无果后,突然觉得多出来的5.4G有点印象,我在修改内核时拷贝到系统中的源码,以及源码编译后产生的中间文件等,总的大小应该也就在5个多G左右,难道是没有释放干净?
为了验证是否是这种原因导致的,我将2个5G大小的文件传输到TX2系统中,然后又全部使用rm命令删除掉,然后重新制作系统镜像,结果妥妥的喜提约20G大小的系统镜像。。。
  所以现在基本可以确定原因是:rm命令在删除文件时并没有将文件所占用的内存清除,只是将文件节点删除,而mksparse在进行优化过程中是按照空内存段去优化的,因此删除掉的文件占用的空间没有被优化。
  这种情况下,要进行内核修改编译,但是又要优化镜像的大小,该如何实现的?查了很多资料还是没有完全清除占用内存的方法,看了只能曲线救国了,分为两步实现:

  • 首先按照在一台设备上烧写精简的系统(4.7G的那个),然后将内核源码拷贝到系统中,修改、编译,完成编译后将/boot整个文件夹打包拷贝出来。
  • 然后在设备上重新烧写一遍精简版的系统,用上面拷贝出来的boot包替换设备系统中的/boot,重启设备检查没啥问题。

注意:上述过程中替换了系统中的/boot整个文件夹的内容,不能按照内核升级的思想单独替换/boot文件夹下的Image,系统启动后可能会又异常(如wlan网卡起不来)。
  实际上上述的rm删除不彻底的问题并没有解决,待后面有时间再研究一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值