Назад | Перейти на главную страницу

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

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

Я создал другое хранилище newstorage.img (btrfs) в LXD командой lxc storage create newstorage но я не знаю, как перенести контейнеры на новое хранилище правильный путь так что я могу удалить старый storage.img и освободить место на моем жестком диске.

Я пробовал вручную монтировать два imgs и делать cp -R /one/* /new/ но тогда я не могу запустить контейнеры.

Никаких уловок:

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

Я нашел "хак", решающий проблему.

Проблема в том, что 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>