压缩级别 Mksquashfs

压缩级别 Mksquashfs

在这里,我尝试创建一个 squashfs 文件系统,但生成的图像比原始版本大,并不是因为我添加了文件或任何内容,因为我只修改了一些配置文件。

我想做的是修改实时 USB 上现有的 squashfs 文件系统,并删除一些信息以在登录 shell 中启动操作系统。由于我固定了 EXT4 分区的空间量,因此我需要修改后的 squashf 具有与原始大小相同的大小。我可以在实时系统运行时进行更改,但由于我正在制作一个脚本来自动化此过程,因此我需要在创建实时 USB 本身之前执行此操作。重新创建图像时会出现问题,因为生成的文件比原始文件大约 400mb,当我使用 -b 4096/1Mbyte 选项时,当原始文件约为 2.2gb 时,图像约大 800mb。

我之前也做了同样的事情,将我的脚本添加到文件系统中,效果很好,但现在我无法理解这次发生了什么。我搜索了 .bash_history 的备份,但没有成功

如何缩小图像尺寸??我做错了什么,有人吗?

编辑:

# Create Directories
mkdir /mnt/kali-iso
mkdir /mnt/squash
mkdir /tmp/squash_mod

# Mount ISO And Squashfs Image
mount /root/kali.iso /mnt/kali-iso
mount /mnt/kali-iso/live/filesystem.squashfs /mnt/squash -o loop

# Copy All Files To A Temp Directory To Modify Them
cp -rf /mnt/squash/* /tmp/squash_mod
cp /root/foo.sh /tmp/squash_mod/root/Desktop/

# Create Squashfs
mksquashfs /tmp/squash_mod filesystem.squashfs 

或者

# mksquashfs /tmp/squash_mod filesystem.squashfs -b 4096 # or 1Mbyte

“du”命令的结果:

du -ch /mnt/squash | grep "total"  =  6.6G total

du -ch /tmp/squash_mod | grep "total"  =  7.2G total

相同的文件夹之间存在一些差异,它们的大小不同:

“/tmp/squash_mod/sbin = 8.8mb” “/mnt/squash/sbin = 8.5mb”

“/tmp/squash_mod/var = 309mb” “/mnt/squash/var = 282mb”

“/tmp/squash_mod/bin = 7.0mb” “/mnt/squash/bin = 6.8mb”

答案1

无法发表评论,所以我正在写一个答案:

1)我同意帕特里克的观点,你的问题最有可能的根源是硬链接“乘法”。在正常情况下,cp您可以创建与硬链接计数一样多的硬链接文件副本。使用rsynccp -a代替。

2)更好的解决方案是简化unsquashfs图像,这样您就可以跳过循环安装步骤。

3)更深入地挖掘,你可以使用aufsunionfs:)

相关内容