usilo Asked: 2024-04-28 16:08:28 +0800 CST2024-04-28 16:08:28 +0800 CST 2024-04-28 16:08:28 +0800 CST 重新压缩squashfs 772 我有一些squashfs文件当前使用默认算法压缩,即zlib/gzip. 我想将它们重新压缩为zstd. 在不将其提取到磁盘并从提取中重新创建它的情况下执行此操作的命令是什么? squashfs 2 个回答 Voted Best Answer Phillip Lougher 2024-04-29T06:05:42+08:002024-04-29T06:05:42+08:00 Squashfs-tools 4.6 及更高版本(去年发布)支持这样做。 此处的文档提到了将 Squashfs 文件系统从一种压缩类型转换为另一种压缩类型(https://github.com/plougher/squashfs-tools/blob/master/README-4.6.1#L289)。 由于我编写了上述文档(和 Squashfs),因此将其复制到此处没有问题。 Squashfs 文件系统转换(通过管道将 Unsquashfs 输出传输到 Mksquashfs) 有时你有一个现有的 Squashfs 文件系统,你想使用一组不同的压缩选项重新生成它,例如压缩算法、块大小、尾部打包等。或者你想修改文件系统的某些部分,例如排除文件、更改所有权等 显然,您已经能够挂载 Squashfs 文件系统并通过mksquashfs在挂载的目录上运行来重新生成文件系统。但是,这需要 root 访问权限(有时不可用)。到目前为止,唯一的其他选择是将 Squashfs 文件系统提取到中间未压缩目录,然后通过mksquashfs在该目录上运行来重新生成文件系统。然而,这很慢并且需要存储空间来存储未压缩的文件系统。 unsquashfs现在可以将代表输入文件系统的伪文件输出到 stdout,并且mksquashfs现在可以从 stdin 读取伪文件。这允许 的输出通过unsquashfs管道传输到mksquashfs。 下面是一些例子。 如果您有 GZIP 文件系统并想将其转换为 ZSTD,您可以执行以下操作: % unsquashfs -pf - image.sqsh | mksquashfs - new.sqsh -pf - -comp zstd 如果您想更改为 XZ 压缩、增加到 1 MB 块大小并使用-tailend打包,您可以执行以下操作: % unsquashfs -pf - image.sqsh | mksquashfs - new.sqsh -pf - -comp xz -b 1M -tailends 如果您只想要该目录,foobar您可以告诉 Unsquashfs 仅提取该目录: % unsquashfs -pf - image.sqsh foobar | mksquashfs - new.sqsh -pf - 如果您无意中存储了二进制.o文件,您可以使用新的“非锚定”unsquashfs排除文件功能来删除它们: % unsquashfs -excludes -pf - image.sqsh "... *.o" | mksquashfs - new.sqsh -pf - 如果要将所有文件时间戳更新为now,并使每个文件都属于phillip: % unsquashfs -pf - image.sqsh | mksquashfs - new.sqsh -all-time now -force-uid phillip -pf - user10489 2024-04-28T20:32:07+08:002024-04-28T20:32:07+08:00 Squashfs 工具操作已创建的 squashfs 的能力非常有限。截至撰写本文时,对现有映像的唯一可用更改是通过在根目录中添加新文件(以及合并或重命名旧根目录)来附加它。 然而,squashfs 是用来安装的。没有理由提取它,只需安装它即可。(如果你想修改它,你可以使用像overlayfs这样的东西来进行更改。) 安装后,您可以使用 mksquashfs 使用您想要的任何选项(包括备用压缩算法)从已安装的南瓜重建南瓜。如果您只想更改压缩,即使工具支持它,也没有更好的方法来处理这个问题。
Squashfs-tools 4.6 及更高版本(去年发布)支持这样做。
此处的文档提到了将 Squashfs 文件系统从一种压缩类型转换为另一种压缩类型(https://github.com/plougher/squashfs-tools/blob/master/README-4.6.1#L289)。
由于我编写了上述文档(和 Squashfs),因此将其复制到此处没有问题。
有时你有一个现有的 Squashfs 文件系统,你想使用一组不同的压缩选项重新生成它,例如压缩算法、块大小、尾部打包等。或者你想修改文件系统的某些部分,例如排除文件、更改所有权等
显然,您已经能够挂载 Squashfs 文件系统并通过
mksquashfs
在挂载的目录上运行来重新生成文件系统。但是,这需要 root 访问权限(有时不可用)。到目前为止,唯一的其他选择是将 Squashfs 文件系统提取到中间未压缩目录,然后通过mksquashfs
在该目录上运行来重新生成文件系统。然而,这很慢并且需要存储空间来存储未压缩的文件系统。unsquashfs
现在可以将代表输入文件系统的伪文件输出到 stdout,并且mksquashfs
现在可以从 stdin 读取伪文件。这允许 的输出通过unsquashfs
管道传输到mksquashfs
。下面是一些例子。
如果您有 GZIP 文件系统并想将其转换为 ZSTD,您可以执行以下操作:
如果您想更改为 XZ 压缩、增加到 1 MB 块大小并使用
-tailend
打包,您可以执行以下操作:如果您只想要该目录,
foobar
您可以告诉 Unsquashfs 仅提取该目录:如果您无意中存储了二进制
.o
文件,您可以使用新的“非锚定”unsquashfs
排除文件功能来删除它们:如果要将所有文件时间戳更新为
now
,并使每个文件都属于phillip
:Squashfs 工具操作已创建的 squashfs 的能力非常有限。截至撰写本文时,对现有映像的唯一可用更改是通过在根目录中添加新文件(以及合并或重命名旧根目录)来附加它。
然而,squashfs 是用来安装的。没有理由提取它,只需安装它即可。(如果你想修改它,你可以使用像overlayfs这样的东西来进行更改。)
安装后,您可以使用 mksquashfs 使用您想要的任何选项(包括备用压缩算法)从已安装的南瓜重建南瓜。如果您只想更改压缩,即使工具支持它,也没有更好的方法来处理这个问题。