Linux
將 LXD 容器移動到其他儲存
我的目前
storage.img
文件 (btrfs) 有問題。我在一個容器中有 2TB 數據,因此 storage.img 有 2TB 大。在此之後,我刪除了所有內容,留下了 100GB 的真實數據。現在的問題是 storage.img 並沒有縮小到 100GB。它仍然是 2TB 大。我已經
newstorage.img
使用命令在 LXD 中創建了另一個儲存(btrfs),lxc storage create newstorage
但我不知道如何以正確的方式將容器轉移到新儲存,以便我可以刪除舊的storage.img
並回收我的 HDD 空間。我嘗試了手動安裝兩個 img 並執行操作,
cp -R /one/* /new/
但後來我無法啟動容器。
我找到了一個解決問題的“hack”。
問題是
lxc storage create newstorage
預設情況下會創建一個 15GB 的圖像。此值無法更改。必須能夠訪問另一台全新安裝 LXD 的 Linux 機器並在
lxd init
那裡執行。選擇 btrfs,圖像所需新容量的循環設備大小和圖像名稱。現在將新的 storage.img 複製到伺服器。複製內容的步驟是:
- 關閉所有容器
- 重啟機器
- 將舊 storage.img 掛載到 /mnt/oldstorage
- 將新的 storage.img 掛載到 /mnt/newstorage
- 執行 sudo cp -rpv /mnt/oldstorage /mnt/newstorage
- 將舊 storage.img 移出 /var/lib/lxd/disks/ 文件夾
- 將新的 storage.img 移動到 /var/lib/lxd/disks/
- 重啟機器
- 啟動所有容器
編輯:只要您不刪除任何現有容器,此方法就可以正常工作。LXD 確實為每個容器創建了一個子卷。如果您想保留刪除現有容器的能力,您應該為每個容器創建一個子卷。
btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>
無需技巧:
lxc stop container_name lxc move container_name temp_container_name -s new_storage_pool lxc move temp_container_name container_name lxc start container_name