![修改一个squashfs,](https://linux22.com/image/16420/%E4%BF%AE%E6%94%B9%E4%B8%80%E4%B8%AAsquashfs%EF%BC%8C.png)
显然,我不想实际修改squashfs。我想做的是采用现有的squashfs,一组文件并创建一个新的squashfs,它与旧的相同,除了该组中的文件要么替换squashfs中的类似文件,要么只是添加(如果有)没有类似的文件。
好吧,最后一部分听起来很奇怪。让我举个例子:
有一个名为 mfs.squash 的 squashfs。里面有一个文件./a/foo
。我想创建一个新的 squashfs,它与旧的 squashfs 相同 - 除了有一个新文件,并且我用我的规范之一a/b
覆盖它。./a/foo
答案1
安装squashfs:
mkdir /mnt/squishy
mount mfs.sqash /mnt/squishy -t squashfs -o loop
将squashfs复制到另一个地方:
mkdir /tmp/squooshtacular
find /mnt/squishy -xdev -print0 | cpio -pa0V /tmp/squooshtacular
将新文件复制到位:
cp ./a.foo /tmp/squooshtacular/a.foo
制作新的squashfs:
mksquashfs /tmp/squooshtacular mfs_with_bbq_sauce.squash
答案2
您可以将new_or_modified files_dir附加到squashfs_file上,而无需像上面那样取消squash或cpio Mounted_squashfs。详细回复见:
答案3
将 squashfs 解压到 ar/w 文件系统,进行更改,然后重新打包,对于小卷来说效果很好。或者,您可以使用 mksquashfs 将内容添加到顶级目录(“追加”),而且速度非常快。
但是,如果您有一个巨大的 squashfs 卷,而解压和重新打包的空间是一个问题,或者性能是一个问题,那么overlayfs(man mount -->overlayfs options)就是您想要的。
- 挂载squashfs卷
mount -t squashfs stuff.sq /mnt/stuff
- 为overlayfs创建开销目录
mkdir -p /overlay/{upper,work}/stuff /mnt/stuff-new
- 安装它
mount -t overlay -o lowerdir=/mnt/stuff,upperdir=/overlay/upper/stuff,workdir=/overlay/work/stuff overlay /mnt/stuff-new
(查看手册页以获取其他选项) - 像平常一样在 /mnt/stuff-new 中进行更改
- 然后重新包装
mksquashfs /mnt/stuff-new stuff-new.sq
- 完成后,卸载覆盖并删除临时目录(也许还有原始的南瓜)
如果你想合并多个重叠的目录层次结构,它只是比这复杂一点,但你也可以在覆盖安装中列出多个较低的目录,然后修补任何不起作用的重叠,然后重新打包......