將 LXD 容器移至其他存儲

將 LXD 容器移至其他存儲

storage.img我目前的文件 (btrfs)有問題。我的容器內有 2TB 數據,因此 storage.img 也有 2TB 大。之後我刪除了所有內容,留下了 100GB 的真實數據。現在的問題是,storage.img 並沒有縮減到 100GB。還是2TB大。

newstorage.img我使用命令在 LXD 中創建了另一個存儲(btrfs) lxc storage create newstorage,但我不知道如何將容器傳輸到新存儲正確的方式這樣我就可以刪除舊的storage.img並回收我的硬碟空間。

我嘗試了諸如手動安裝兩個 imgs 之類的操作,cp -R /one/* /new/但隨後我無法啟動容器。

答案1

無需任何技巧:

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

答案2

我找到了解決該問題的“黑客”。

問題是預設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>

相關內容