LXDコンテナを他のストレージに移動する

LXDコンテナを他のストレージに移動する

現在のファイル (btrfs) に問題がありますstorage.img。コンテナ内に 2 TB のデータがあったため、storage.img のサイズが 2 TB になりました。その後、すべてを削除し、実際のデータは 100 GB になりました。問題は、storage.img が 100 GB に縮小されなかったことです。まだ 2 TB の大きさです。

newstorage.imgコマンドを使用してLXDで別のストレージ(btrfs)を作成しましたlxc storage create newstorageが、コンテナを新しいストレージに転送する方法がわかりません正しい方法古いものを削除しstorage.imgて HDD のスペースを取り戻すことができます。

2 つの img を手動でマウントするなどの操作を試しました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デフォルトで 15 GB のイメージが作成されることです。この値は変更できません。

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>

関連情報