Linux

從沒有 get/setfattr 的文件中清除使用者 xattrs 的想法

  • May 24, 2022

我有一個目錄,其中包含我 SquashFS 的根文件系統,然後作為 r/o 安裝在其他盒子上。

但是,在 SquashFS’ing 之前,我想從文件系統中清除所有使用者命名空間 xattrs。這對於一個小循環腳本來說是微不足道的getfattrsetfattr但我想避免將它們作為依賴項引入。

棘手的部分是我只想清除使用者 xattrs。我需要保留安全 xattrs,因為它們包含我的 SELinux 標籤。因此,簡單地告訴 Squash 不要收集 xattrs 不是一種選擇。

我的一個想法是獲取文件系統的大小,分配一個該大小的空白文件,將其格式化為 ext4,然後使用 安裝它-o nouser_xattrr,將文件複製到那裡,然後壓縮它們。這會起作用,但它很麻煩,我必須希望我有足夠的空間來存放文件。tmpfs 不起作用,因為沒有 xattr 支持,而且我可能會用完記憶體。

還有其他想法嗎?

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

應該管用。

引用自:https://unix.stackexchange.com/questions/703319