2021年7月19日 星期一

[經驗分享] 解決 Proxmox VE 容器備份失敗問題

 



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



備份失敗的錯誤訊息



經過比對,只有在 非特權容器 (Unpriviledged container) 才會發生,如果是 特權容器 (Priviledged container) 則可以順利備份。接著實際測試了一下,這兩種模式在 vzdump 程式備份時使用的身份不一樣,前者會使用大於 100000 的 UID,而後者直接用 root 執行。



使用 root 身份執行的 vzdump 備份作業




但這又引來另一個問題,這個執行的身份跟備份失敗有什麼關係?

原因在於 vzdump 進行備份時會把 /tmp 拿來當做暫存資料夾,但這個資料夾的權限是無法讓 100000 以上的身份取用,這也是導致前述 vzdump 備份失敗的原因。











解決方案

既然已經明確查出問題的原因,接下來就好辦了。

請用編輯器打開 /etc/vzdump.conf 這個設定檔,裡面有一個 tmpdir 路徑的設定,請指向 /tmp 以外的一個新建路徑即可。



修改 vzdump.conf 中的 tmpdir 路徑


修改完成以後手動再次進行備份,或是下次排程備份時就可以正常的完成備份作業了。












參考資料