Proxmox VE 內建完整的備份功能,這點是我喜歡使用它的其中一個原因。
不過,我在叢集最近新增的幾個節點卻經發生有幾個容器會備份失敗,這是什麼原因呢?
問題狀況
如本文首圖所示,我在 Proxmox VE 的作業記錄中發現了不少的錯誤訊息。
展開記錄細節,可以查看到這樣的訊息:
INFO: create storage snapshot 'vzdump'
INFO: creating vzdump archive '/mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tar.zst'
INFO: tar: /mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tmp: Cannot open: Permission denied
INFO: tar: Error is not recoverable: exiting now
INFO: cleanup temporary 'vzdump' snapshot
ERROR: Backup of VM 141 failed - command 'set -o pipefail && lxc-usernsexec -m u:0:100000:65536 -m g:0:100000:65536 ...中間略...' >/mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tar.dat' failed: exit code 2
INFO: Failed at 2021-07-19 01:26:24
INFO: creating vzdump archive '/mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tar.zst'
INFO: tar: /mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tmp: Cannot open: Permission denied
INFO: tar: Error is not recoverable: exiting now
INFO: cleanup temporary 'vzdump' snapshot
ERROR: Backup of VM 141 failed - command 'set -o pipefail && lxc-usernsexec -m u:0:100000:65536 -m g:0:100000:65536 ...中間略...' >/mnt/pve/nas1/dump/vzdump-lxc-141-2021_07_19-01_26_24.tar.dat' failed: exit code 2
INFO: Failed at 2021-07-19 01:26:24
備份失敗的錯誤訊息
經過比對,只有在 非特權容器 (Unpriviledged container) 才會發生,如果是 特權容器 (Priviledged container) 則可以順利備份。接著實際測試了一下,這兩種模式在 vzdump 程式備份時使用的身份不一樣,前者會使用大於 100000 的 UID,而後者直接用 root 執行。
使用 root 身份執行的 vzdump 備份作業
但這又引來另一個問題,這個執行的身份跟備份失敗有什麼關係?
原因在於 vzdump 進行備份時會把 /tmp 拿來當做暫存資料夾,但這個資料夾的權限是無法讓 100000 以上的身份取用,這也是導致前述 vzdump 備份失敗的原因。
解決方案
既然已經明確查出問題的原因,接下來就好辦了。
請用編輯器打開 /etc/vzdump.conf 這個設定檔,裡面有一個 tmpdir 路徑的設定,請指向 /tmp 以外的一個新建路徑即可。
修改 vzdump.conf 中的 tmpdir 路徑
修改完成以後手動再次進行備份,或是下次排程備份時就可以正常的完成備份作業了。
參考資料
- Unprivileged LXC containers - Proxmox VE
https://pve.proxmox.com/wiki/Unprivileged_LXC_containers
- Backup and Restore - Proxmox VE
https://pve.proxmox.com/wiki/Backup_and_Restore