修改一个squashfs,

修改一个squashfs,

显然,我不想实际修改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。详细回复见:

追加到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
  • 完成后,卸载覆盖并删除临时目录(也许还有原始的南瓜)

如果你想合并多个重叠的目录层次结构,它只是比这复杂一点,但你也可以在覆盖安装中列出多个较低的目录,然后修补任何不起作用的重叠,然后重新打包......

相关内容