備份數據,同時保留 POSIX ACL 和權限

備份數據,同時保留 POSIX ACL 和權限

我正在尋找一種實用的方法來從伺服器備份資料並保留所有 ACL 和權限。我看過 tar ,但根據 Google tar 不保留 ACL 。我知道 rsync 可以保留 ACL 和權限,但前提是目標系統支援 POSIX ACL 並具有相同的使用者。就我而言,我正在備份到位於 AFS 上的目錄,因此不支援 POSIX ACL。

目前,我已經透過編寫一個腳本解決了這個問題,該腳本使用 find 在系統中遞歸(我使用 find 是因為我要排除某些目錄)並將權限和 ACL 保存到文字檔案中。這個解決方案有效,但速度慢得令人痛苦。有更好的解決方案嗎?

答案1

apt-get install star
man star
star -acl -whatever -other -options -you -need

Star 是支援擴展 POSIX 標頭的 tar,也就是能夠在 tar 檔案中儲存一些關於檔案的額外資料。該-acl選項取得 ACL;您需要它來創建和提取存檔。

答案2

如果您不想安裝其他程序,可以單獨備份 ACL:

getfacl -R somedir > acls.txt

這會將所有 ACL 轉儲到somedir檔案中acls.txt

若要恢復,請使用:

setfacl -R --set-file=acls.txt somedir

答案3

除了星星你可以使用bsdtar

答案4

在這裡交叉發布我的答案:https://unix.stackexchange.com/a/725745/550161


建立/解壓縮存檔時,您需要使用--acls --xattrs選項,當然有適當的權限來讀/寫這些

例子:

1. 建立檔案:

ZSTD_CLEVEL=19 tar --acls --xattrs -caPf systemd-network-conf.tzst --directory=/etc systemd/network systemd/networkd.conf.d

上面將使用壓縮等級建立一個zstd壓縮tar存檔19,同時保留 ACL 和擴充屬性。

  • 擴展.tzst名的意思是「一個存檔使用壓縮”,tgz就像編輯版本等
  • 隱式壓縮器使用的壓縮等級由同一行開始時zstd提供的環境變數設定。ZSTD_CLEVEL
  • 請參閱手冊頁:tar(1)zstd(1)

2. 提取該存檔:

sudo tar --acls --xattrs -xvf systemd-network-conf.tzst

上面的程式碼將在您的目前目錄中建立子目錄,systemd因為它是存檔內的公共根目錄。

3. 比較原始文件和提取的文件屬性。

{cd /etc; getfacl -R systemd/network systemd/networkd.conf.d} >original.acl; cd -
getfacl -R systemd/network systemd/networkd.conf.d >extracted.acl
diff -u original.acl extracted.acl
  • 您應該看不到前兩行的輸出,因為它被重定向到檔案。
    (第一行例外,由於最後一個cd -單獨的命令將輸出當前目錄,因此該命令僅恢復當前目錄。)
  • 您應該也看不到 diff 行的輸出,因為沒有差異。

相關內容