在没有 get/setfattr 的情况下从文件中清除用户 xattrs 的想法

在没有 get/setfattr 的情况下从文件中清除用户 xattrs 的想法

我有一个包含根文件系统的目录,我将其 SquashFS 并作为 r/o 挂载到其他机器上。

但是,在 SquashFS 之前,我想从文件系统中清除所有用户命名空间 xattrs。这对于getfattr小循环脚本来说是微不足道的setfattr,但我想避免将它们作为依赖项引入。

棘手的部分是我只想清除用户 xattrs。我需要保留安全 xattrs,因为它们包含我的 SELinux 标签。因此,简单地告诉 Squash 不要收集 xattrs 并不是一个选择。

我的一个想法是获取文件系统的大小,分配一个该大小的空白文件,将其格式化为 ext4,并使用 挂载它-o nouser_xattrr,将文件复制到那里,然后压缩它们。这可行,但很麻烦,而且我必须希望有足够的空间来容纳该文件。 tmpfs 无法工作,因为没有 xattr 支持,而且我可能会耗尽内存。

还有其他想法吗?

答案1

GNU tar 可以读取 xattrs 并对它们进行过滤,请参阅https://www.gnu.org/software/tar/manual/html_node/Extended-File-Attributes.html

sqfstar现在可以使用(在版本 4.5 及更高版本中)从 tar 存档创建 Squashfs 文件系统。

所以像

tar --xattrs --xattrs-exclude='user.*' -c your-directory | sqfstar img.sqfs

应该管用。

相关内容