Переместить контейнер LXD в другое хранилище

Переместить контейнер LXD в другое хранилище

У меня проблема с моим текущим storage.imgфайлом (btrfs). У меня было 2 ТБ данных внутри контейнера, поэтому storage.img стал большим на 2 ТБ. После этого я удалил все, оставив себе 100 ГБ реальных данных. Проблема теперь в том, что storage.img не сжался до 100 ГБ. Он все еще большой на 2 ТБ.

Я создал еще одно хранилище newstorage.img(btrfs) в LXD с помощью команды lxc storage create newstorage, но не знаю, как перенести контейнеры в новое хранилище.правильный путьчтобы я мог удалить старое storage.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 ГБ. Это значение изменить нельзя.

Нужно иметь доступ к другой машине Linux с новой установкой LXD и выполнить 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>

Связанный контент