文章大綱 (Contents)
Proxmox VE (以下簡稱 **PVE**) 是一套功能強大的開源虛擬機作業系統,可以做到許多連 VMware 都做不到的功能。目前已知 PVE 可以做到本地與網路備份,但官方尚未正式支援可以備份至雲端硬碟的功能,因此必須搭配別的工具,才能做到雲端備份!
如果您的 PVE 伺服器想要做到多儲存媒介備份的目標,或是剩餘的硬碟空間比較吃緊但又想保留所有的 VM/CT 備份檔,那麼,將備份檔存放到雲端硬碟,就是一種絕佳的選項。
本文就是使用富源兄(FuYuan’s Space)撰寫的proxmox-vzbackup-rclone 腳本,來將 PVE 的虛擬機備份檔同步上傳/備份至 **Google Drive** 的目的。本文的實測為參考自「在 Proxmox VE 中直接備份至 Google Drive (vzdump + rclone)」一文,測試結果已與原作者取得同意並刊登! 在閱讀本文前,建議先移駕到上面的連結來參考原作的 **Rclone 前置設定作業**,再來參考本文內的測試結果。
▲ Proxmox VE 的 QEMU VM 檔和 Container LXC 檔案,都成功備份至 Google Drive
▲ 原先 Proxmox VE 的 Local 備份區,也有存放一份相同的備份!
先說結論與實測概覽
結論
- 此 Script 確實可順利運作! 適用於 **PVE 7** 和 **PVE 6** (需根據不同版本來修改 Script 裡面一個變數)。
- **PVE 備份過程是:** 備份時程觸發備份工作 → Local 端正常備份。
- **VZDump + Rclone 備份過程是:** 備份工作觸發 Rclone script 檔 → Local 端正常備份 → **上傳至 Google Drive**。
效能與限制
- 效能方面: 實測上傳至 Google Drive 的時間還可以 (**15~30MB/sec**,視您的網路頻寬而定),但若一次上傳太多虛擬機備份檔,**有可能造成頻寬過載**,使得總體備份時間也跟著拉長 (要是 Google Drive 整個卡住的話,有可能導致整個備份作業停滯,因此正式導入前,請先測試評估後再導入)。
- 備份還原: 下拉回自己的備份檔時,會**一次全部下載回來**,原網站建議還是自己從雲端下載比較快,別用 script。
- 功能限制: 此法目前僅限 **Full Backup (全備份)**,不支援 Proxmox Backup Server (PBS) 的 **Incremental backup (增量備份)** 功能。
Rclone 設定 Google Drive API 與 OAuth Client-ID
透過程式去存取 Google Drive (或是其他服務),必須經過 **OAuth 認證**,才能以 API 來存取。Rclone 也是要設定 OAuth 來進行認證。
雖說使用者其實可以略過此部份,直接用 Rclone 開發者的 Google Drive OAuth Client-ID 去存取你的 Google Drive 空間,但考量「**效能**」和「**安全性**」的因素,建議還是用自己的 **OAuth Client-ID** 會比較好。
- 效能考量: 使用 Rclone 自家的 API,因為有太多人用了,所以上傳速度會很慢。
- 安全性考量: 用你的雲端空間來綁定 Rclone 的 OAuth Client-ID,是有隱私問題。
設定方式,可以參考 Rclone 官網的說明 (https://rclone.org/drive/#making-your-own-client-id),來建立自己的 Google Drive OAuth Client-ID,這個步驟比較複雜,首次設定會比較多步驟,但只要設定好一次就可以一勞永逸了!
此時您需要先登入您容量夠大的 Google Drive 帳號,然後登入 **Google API Console** (https://console.developers.google.com/),去建立自己 rclone 專用的 OAuth 2.0 API。
首次設定 Rclone 專用 Google Drive OAuth Client-ID 的過程:

▲ 01. 登入 Google Drive 帳號後,先去 Google API Console (https://console.developers.google.com/),點 **建立專案**

▲ 02. 新增一個 rclone 的專案名稱,然後選自己的機構和位置

▲ 04. API 程式庫裡面,搜尋一下 **Drive**

▲ 05. 此時出現 **Google Drive API**,就點選它

▲ 06. 確定是 Google Drive API 的話,點選 **啟用**

▲ 07. 接下來設定 API 相容認證,首次要設定 OAuth 的同意畫面,這時請點選 **設定同意畫面**

▲ 08. 這裡選擇**外部** (若您是 G Suite 用戶,Rclone 官方是說可以選內部看看,但還沒測試過 XD)

▲ 09. 接下來輸入應用程式名稱 (rclone)、您的電子郵件…

▲ 10. 畫面往下拉,輸入開發者電子郵件,然後 **儲存並繼續**

▲ 15. 應用程式類型選 **電腦版應用程式**,名稱沒差,然後建立

▲ 16. 終於建立好了,此時請將您的**用戶端 ID** 和**用戶端密碼**都複製並存好,待會 Rclone 設定要用到

▲ 17. 最後記得回 OAuth 同意畫面,將這個 rclone **發布應用程式** 一下,以便正式啟用
Rclone for PVE 設定與安裝
上面經過那麼多道步驟取得 OAuth 的資訊之後,接下來就可以開始設定 Rclone for PVE 了。設定步驟可以參考原作者的「在 Proxmox VE 中直接備份至 Google Drive (vzdump + rclone)」文章。以下就簡單介紹說明安裝步驟。
1. 進入 PVE 的 Terminal 畫面
2. 安裝 Rclone
直接用 apt 指令來安裝 Rclone:
apt update
apt install rclone -y
3. 設定 Rclone config 檔
rclone config
4. 設定 Rclone config 連結至 Google Drive
- 按 **n** 選 new remote
- 在 name 輸入 **gd-backup\_crypt** (這是 script 裡面的固定名字,請照實輸入)
- 此時會列出您要用哪個雲端硬碟,以畫面來說是 **13**
- 在 Storage> 提示符號輸入 **13**
接下來就是輸入上面的 **OAuth Client-ID** 和密碼了…
- client-ID 那欄貼上 OAuth Client-ID: 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com
- client-secret 貼上密碼: GOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
- 接著選擇 rclone 的權限,為 Full Access,請輸入 **1**
接著是輸入 Google Drive 的根目錄 ID,此時可以先去您 Google Drive (https://drive.google.com)…
在根目錄下,建立一個 **Rclone** 的子目錄 (您也可以自己取其他名字)
然後切到該目錄之後,上面的 URL 網址列,就會出現類似以下的網址列:
https://drive.google.com/drive/u/2/folders/1zXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXU
這個 URL 中 folders/ 後面那個 1zXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXU 就是 **root\_folder\_id** 了。
- 在 root\_folder\_id> 那欄輸入 1zXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXU
- 然後 service\_account\_file 那欄不理它,直接按 **<Enter>** 略過
- 接著問 Edit advanced config? (y/n) 請選 **n**
- 再來是 Use auto config? 一般都是遠端控制 PVE,因此選擇 **n**
接著螢幕出現一個很長串的網址,也就是要取得 rclone 的驗證碼,請將該網址複製下來,並打開剛剛的瀏覽器,將網址輸入進去。
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=bXXXXXXXXXXXXXXXXXXXXQ
選擇好您剛剛在 OAuth 畫面所輸入的開發者 Google 帳號,然後就會出現 rclone 要存取你 Google 帳戶的訊息。
此時請按 **<允許>** 就可以取得 Rclone 的 Google Drive API 授權碼了。
出現此授權碼之後,請記得將該授權碼複製下來。
- 在 Enter Verification code> 貼上上述的授權碼: 4/1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXLY
- 然後問是否設置成 Team Drive,輸入 **n**
- 接著會顯示 rclone.conf 檔案的內容,問你這樣是否 ok,若沒問題就輸入 **y**
- 最後會列出當前 rclone 的 remote 設置,名字是 **gd-backup\_crypt**,種類是 **drive (Google Drive)**。好了話,就按 **q** 離開。
安裝 proxmox-vzbackup-rclone 與修改對應的 PVE 版本
上面最複雜的設定部份搞定之後,接下來就可以參考原文章[安裝 proxmox-vzbackup-rclone]之後的安裝說明。這裡簡單說明一下安裝步驟 (以 root 身份來安裝)。
cd /root
apt install git
git clone https://github.com/fuyuanli/proxmox-vzbackup-rclone.git
cd proxmox-vzbackup-rclone
git checkout pve7
chmod +x vzbackup-rclone.sh
修改 vzbackup-rclone.sh 內容
再來檢視/修改一下 **vzbackup-rclone.sh** 的內容
nano vzbackup-rclone.sh
- 先看第 5 行的 **dumpdir** 是否正確,一般 PVE 都是將備份檔案存放到 **/var/lib/vz/dump** 的,若沒改過的話,只要維持 `dumpdir=”/var/lib/vz/dump”` 的設定即可。
- 接著再看您的 PVE 版本是 **6.x** 還是 **7.x**。若是 6.x 的話,在第 18 行的 **tarfile** 變數要改對才行:
PVE 7.x → tarfile=${TARGET}
PVE 6.x → tarfile=${TARFILE}
修改上面檔案之後,記得存檔。
修改 vzdump.conf 檔案
最後,再改一個檔案 **`/etc/vzdump.conf`**,讓它去觸發新的 script 檔即可:
nano /etc/vzdump.conf
在 `/etc/vzdump.conf` 裡面加入以下這一行:
script:/root/proxmox-vzbackup-rclone/vzbackup-rclone.sh
存檔後,以上的所有設定大功告成。
效能簡測與 Log 比較
上述繁複的設定搞好之後,您的 PVE 伺服器就會在進行正常的備份作業之後,觸發 **vzbackup-rclone.sh** 去將您的備份資料上傳到 Google Drive。PVE 備份設定就不多介紹了,以下僅以實際備份測試,並列出 Log 檔來做比較。
1. 原先 VM 備份的 log (尚未設定 vzbackup-rclone 前):
INFO: starting new backup job: vzdump 101 --mode snapshot --remove 0 --compress zstd --storage local --node pve-vm
INFO: Starting Backup of VM 101 (lxc)
INFO: Backup started at 2021-10-12 12:19:36
INFO: status = stopped
INFO: backup mode: stop
INFO: ionice priority: 7
INFO: CT Name: rockylinux
INFO: including mount point rootfs ('/') in backup
INFO: creating vzdump archive '/var/lib/vz/dump/vzdump-lxc-101-2021_10_12-12_19_36.tar.zst'
INFO: Total bytes written: 724377600 (691MiB, 33MiB/s)
INFO: archive file size: 226MB
INFO: Finished Backup of VM 101 (00:00:22)
INFO: Backup finished at 2021-10-12 12:19:58
INFO: Backup job finished successfully
TASK OK
2. 搭配 vzbackup-rclone 的 VM 備份 log (226MB 的資料花約 15 秒上傳, 平均 15MB/sec):
INFO: starting new backup job: vzdump 101 --mode snapshot --remove 0 --compress zstd --storage local --node pve-vm
INFO: Backup VM/LXC with Rclone
INFO: Starting Backup of VM 101 (lxc)
INFO: Backup started at 2021-10-12 12:35:31
INFO: status = stopped
INFO: backup mode: stop
INFO: ionice priority: 7
INFO: CT Name: rockylinux
INFO: including mount point rootfs ('/') in backup
INFO: creating vzdump archive '/var/lib/vz/dump/vzdump-lxc-101-2021_10_12-12_35_31.tar.zst'
INFO: Total bytes written: 724377600 (691MiB, 36MiB/s)
INFO: archive file size: 226MB
INFO: Backing up /var/lib/vz/dump/vzdump-lxc-101-2021_10_12-12_35_31.tar.zst to remote storage
INFO: rcloning /var/lib/vz/dump/rclone/2021/10
INFO: 2021/10/12 12:36:06 INFO : vzdump-lxc-101-2021_10_12-12_35_31.tar.zst: Copied (new)
INFO: 2021/10/12 12:36:06 INFO :
INFO: Transferred: 226.268M / 226.268 MBytes, 100%, 16.218 MBytes/s, ETA 0s
INFO: Transferred: 1 / 1, 100%
INFO: Elapsed time: 14.9s
INFO: Finished Backup of VM 101 (00:00:35)
INFO: Backup finished at 2021-10-12 12:36:06
INFO: Backing up main PVE configs
INFO: Tar files
INFO: rcloning /var/tmp/proxmox-ZayJHniQ/pveConfig.2021-10-12.12.36.06.tgz
INFO: 2021/10/12 12:36:11 INFO : pveConfig.2021-10-12.12.36.06.tgz: Copied (new)
INFO: 2021/10/12 12:36:11 INFO : pveConfig.2021-10-12.12.36.06.tgz: Deleted
INFO: 2021/10/12 12:36:11 INFO :
INFO: Transferred: 13.104k / 13.104 kBytes, 100%, 4.602 kBytes/s, ETA 0s
INFO: Checks: 2 / 2, 100%
INFO: Deleted: 1
INFO: Renamed: 1
INFO: Transferred: 1 / 1, 100%
INFO: Elapsed time: 5.3s
INFO: Cleaning up
INFO: Backup job finished successfully
TASK OK
3. vzbackup-rclone 的 VM 備份 log: (備份大的 VM, 8.326GB, 4分40秒, 平均 29.7MB/s):
INFO: starting new backup job: vzdump 100 --node pve-vm --storage local --compress zstd --remove 0 --mode snapshot
INFO: Backup VM/LXC with Rclone
INFO: Starting Backup of VM 100 (qemu)
INFO: Backup started at 2021-10-12 12:56:27
... (省略大量磁碟讀取 log)
INFO: archive file size: 8.33GB
INFO: Backing up /var/lib/vz/dump/vzdump-qemu-100-2021_10_12-12_56_27.vma.zst to remote storage
INFO: rcloning /var/lib/vz/dump/rclone/2021/10
INFO: 2021/10/12 13:00:42 INFO :
INFO: Transferred: 1.784G / 8.326 GBytes, 21%, 30.613 MBytes/s, ETA 3m38s
... (省略大量傳輸進度 log)
INFO: Transferred: 8.326G / 8.326 GBytes, 100%, 30.724 MBytes/s, ETA 0s
INFO: Transferred: 1 / 1, 100%
INFO: Elapsed time: 4m39.3s
INFO: Finished Backup of VM 100 (00:07:53)
INFO: Backup finished at 2021-10-12 13:04:20
INFO: Backing up main PVE configs
INFO: Tar files
... (省略 PVE config 備份 log)
INFO: Backup job finished successfully
TASK OK
以上就是 PVE 透過 **vzdump + Rclone** 的方式同步備份至 Google Drive 的簡單測試結果。至於結論… 在文章一開始就先說明囉!























