
我即將從頭開始重新配置我的家庭伺服器,並且想知道備份 LXD 容器的最佳策略是什麼。同時,我正在運行 Ubuntu 20.04 LTS,並將一些服務配置為作為 LXD/LXC 容器運行。例如:
- 執行seafile的容器“cloudserv”
- 執行 nginx 和 MariaDB 的容器“webservice”
這兩個容器位於我的帶有 btrfs 檔案系統的 SSD 上。對於資料存儲,我使用磁碟陣列(也使用 BTRFS),其中我創建了另一個帶有存儲卷的 LXC 存儲池,該存儲卷附加到 Seafile 容器以保存所有資料。佈局是這樣的:
固態硬碟
- BTRFS過濾系統
- 儲存池“預設”
- 容器“雲端服務”
- 容器“網路服務”
- 圖片
- 儲存池“預設”
硬碟
- BTRFS 檔案系統
- 儲存池“DataPool1”
- 自訂儲存磁碟區“seafile-data”-->附加到容器“cloudserv”
- 儲存池“DataPool1”
透過使用 BTRFS,我希望能夠利用 BTRFS 快照和發送和接收工具來輕鬆地將容器和儲存磁碟區作為子磁碟區傳輸到例如附加了 BTRFS 磁碟區的 RasPi。但是閱讀例如LXD手冊或者如何備份和還原 LXD 容器我的印像是我總是必須創建一個 tarball 來備份然後可以傳輸的實例。這意味著我實際上失去了一些 BTRFS 有吸引力的功能,例如能夠發送/接收子卷/快照以及對 LXC 實例和資料進行增量備份。
我錯過了什麼嗎?任何人都可以為使用 BTRFS 的 LXD/LXC 適當的備份工作流程提供一些提示嗎?
答案1
如果您在遠端伺服器中安裝了 LXD 且兩台伺服器都使用 Btrfs,則可以使用最佳化執行個體傳輸像這樣:
lxc remote add mybtrfsremotebackupserver XXX
lxc snapshot mycontainer snap1
lxc copy mycontainer mybtrfsremotebackupserver: --verbose
它將用於btrf-send
容器及其所有快照的初始傳輸。
然後,您有一種非常方便的方法來維護容器,並且它的快照僅使用該選項發送增量更改--refresh
(LXD 3.7)
lxc copy --refresh mycontainer mybtrfsremotebackupserver: --verbose
但不幸的是它使用了rsync
,至少在 LXD 4.0 中,所以你將失去優化btrfs-send
。
檢查此問題以獲取更多資訊:功能請求:複製的 --snapshots-only 標誌
另外,還有“刷新自訂磁碟區副本的支援”但我不確定它是否使用優化路徑或它是否對您的目標有用。您也可以在 lxc 匯出中檢查 --optimized-storage
問候