![備份數據,同時保留 POSIX ACL 和權限](https://rvso.com/image/488051/%E5%82%99%E4%BB%BD%E6%95%B8%E6%93%9A%EF%BC%8C%E5%90%8C%E6%99%82%E4%BF%9D%E7%95%99%20POSIX%20ACL%20%E5%92%8C%E6%AC%8A%E9%99%90.png)
我正在尋找一種實用的方法來從伺服器備份資料並保留所有 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 行的輸出,因為沒有差異。