Linux
從沒有 get/setfattr 的文件中清除使用者 xattrs 的想法
我有一個目錄,其中包含我 SquashFS 的根文件系統,然後作為 r/o 安裝在其他盒子上。
但是,在 SquashFS’ing 之前,我想從文件系統中清除所有使用者命名空間 xattrs。這對於一個小循環腳本來說是微不足道的
getfattr
,setfattr
但我想避免將它們作為依賴項引入。棘手的部分是我只想清除使用者 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
應該管用。