LXD mover contêineres / instantâneos para outra unidade

3

O caminho padrão para o LXD é /var/lib/lxd , portanto os contêineres estão em /var/lib/lxd/containers e instantâneos são colocados em /var/lib/lxd/snapshots .

A partição / var / está ficando cheia, então estou planejando usar outra partição para contêineres e snapshots que tenha muito mais espaço.

Minhas opções atuais são:

  • Crie um link simbólico para o novo diretório (na outra unidade)
  • Vincule (monte) o novo diretório ao diretório atual
  • Alterar alguma configuração de lxd (se existir) que aponta para um diretório na outra unidade

Não tenho certeza qual método é mais fácil e se há outras maneiras de conseguir isso facilmente.

Estou preocupado em ter problemas com o apparmor, as permissões do contêiner ou causar problemas no lxd / lxc.

Qual seria a maneira correta (ou melhor) de movê-los?

(abril de 2017) ATUALIZAÇÃO ******************

O LXD 2.9+ suporta vários conjuntos de armazenamento.

    
por lepe 05.10.2016 / 09:43

2 respostas

3

O grande problema com o LXD é que (atualmente) parece apenas suportar apenas um pool de armazenamento. Em particular, isso se torna um problema se você deseja executar parte de seus contêineres em um volume de disco e parte em outro. Digamos que você tenha alguns contêineres "rápidos" em um volume SSD e alguns contêineres "lentos" em um volume de disco rígido.

Se você deseja apenas executar seus contêineres em um único volume, a solução é simples como o inferno: * pare seus containers * pare LXD (serviço lxd stop) * mover todo o seu diretório / var / lib / lxd para seu novo conjunto de armazenamento * crie um link simbólico para o seu novo pool de armazenamento * inicie o LXD (serviço lxd start) * você está pronto

Por exemplo, se você tiver seu novo armazenamento montado em / mnt / largepool em um subdiretório chamado lxd, crie o link da seguinte forma: ln -s / mnt / largepool / lxd / var / lib / lxd

Dessa forma, você terá seus contêineres em seu novo volume de armazenamento.

Por favor, esteja ciente de que se você estiver usando o BTRFS ou o ZFS como back-end de armazenamento, talvez você queira criar os subvolumes necessários em seu novo armazenamento primeiro, para que seus contêineres estejam localizados em seus próprios subvolumes. Por exemplo, se você tiver btrfs e tiver contêineres denominados c1 e c2 e tiver o diretório / mnt / largepool / lxd / containers já em vigor, antes da movimentação real dos arquivos, crie subvolumes: btrfs su criar / mnt / largepool / lxd / containers / c1 btrfs su criar / mnt / largepool / lxd / containers / c2

Isso facilitaria a criação de instantâneos de contêiner posteriormente.

Espero que esta informação seja útil.

    
por Alvils Berzins 05.10.2016 / 15:13
2

O LXD é baseado em um banco de dados sqlite, portanto, para alterar o local do conjunto, apenas altere o banco de dados:

instale o cliente sqlite3 se você não tiver um

  

echo "UPDATE configuração SET valor = ' new_pool_lxd ' WHERE \   key = 'storage.zfs_pool_name'; "| sqlite3 /var/lib/lxd/lxd.db

assumindo seu lxd db no local padrão

depois, verifique

  

echo "SELECT * FROM config;" | sqlite3 /var/lib/lxd/lxd.db

     

1 | storage.zfs_pool_name | new_pool_lxd

espero que isso ajude

    
por Alex Barchiesi 06.10.2016 / 16:53

Tags