Linux

將 LXD 容器移動到其他儲存

  • February 21, 2020

我的目前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 複製到伺服器。

複製內容的步驟是:

  1. 關閉所有容器
  2. 重啟機器
  3. 將舊 storage.img 掛載到 /mnt/oldstorage
  4. 將新的 storage.img 掛載到 /mnt/newstorage
  5. 執行 sudo cp -rpv /mnt/oldstorage /mnt/newstorage
  6. 將舊 storage.img 移出 /var/lib/lxd/disks/ 文件夾
  7. 將新的 storage.img 移動到 /var/lib/lxd/disks/
  8. 重啟機器
  9. 啟動所有容器

編輯:只要您不刪除任何現有容器,此方法就可以正常工作。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

學分:https ://discuss.linuxcontainers.org/t/how-to-move-containers-to-a-new-storage-pool-on-the-same-host/2798

引用自:https://serverfault.com/questions/901885