Mova o contêiner LXD para outro armazenamento

Mova o contêiner LXD para outro armazenamento

Tenho um problema com meu storage.imgarquivo atual (btrfs). Eu tinha 2 TB de dados dentro de um contêiner e, portanto, o storage.img ficou com 2 TB. Depois disso apaguei tudo, ficando com 100 GB de dados reais. O problema agora é que o storage.img não diminuiu para 100 GB. Ainda tem 2 TB de tamanho.

Criei outro armazenamento newstorage.img(btrfs) no LXD com o comando lxc storage create newstoragemas não sei como transferir os containers para o novo armazenamentoo caminho certopara que eu possa excluir o antigo storage.imge recuperar meu espaço no disco rígido.

Tentei coisas como montar manualmente os dois imgs e fazer isso, cp -R /one/* /new/mas não consigo iniciar os contêineres.

Responder1

Não são necessários truques:

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

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

Responder2

Encontrei um "hack" que resolve o problema.

O problema é que lxc storage create newstoragecria uma imagem de 15 GB por padrão. Este valor não pode ser alterado.

É preciso ter acesso a outra máquina Linux com uma nova instalação do LXD e executar lxd initlá. Selecione btrfs, um tamanho de dispositivo de loop com a nova capacidade desejada da imagem e o nome da imagem. Agora copie esse novo storage.img para o servidor.

As etapas para copiar o conteúdo são:

  1. Desligue todos os contêineres
  2. Reinicializar máquina
  3. Monte o storage.img antigo em /mnt/oldstorage
  4. Monte o novo storage.img em /mnt/newstorage
  5. Execute sudo cp -rpv /mnt/oldstorage /mnt/newstorage
  6. Mova o antigo storage.img para fora da pasta /var/lib/lxd/disks/
  7. Mova o novo storage.img para /var/lib/lxd/disks/
  8. Reinicializar máquina
  9. Iniciar todos os contêineres

Editar: este método funciona bem, desde que você não exclua nenhum contêiner existente. O LXD cria um subvolume para cada contêiner. Se quiser manter a capacidade de excluir contêineres existentes, você deverá criar um subvolume para cada contêiner.

btrfs subvolume create [-i <qgroupid>] [<dest>/]<name>

informação relacionada