web-dev-qa-db-fra.com

LXD déplaçant des conteneurs / instantanés vers un autre lecteur

Le chemin par défaut pour LXD est /var/lib/lxd, ainsi les conteneurs sont dans /var/lib/lxd/containers et les instantanés sont placés dans /var/lib/lxd/snapshots.

La partition/var/est en train de saturer, je prévois donc d’utiliser une autre partition pour les conteneurs et les instantanés, qui dispose de beaucoup plus d’espace.

Mes options actuelles sont:

  • Créer un lien symbolique vers le nouveau répertoire (dans l'autre lecteur)
  • Lier (monter) le nouveau répertoire dans le répertoire actuel
  • Changer un paramètre lxd (s'il existe) qui pointe vers un répertoire dans l'autre lecteur

Vous ne savez pas quelle méthode est la plus facile et s'il existe d'autres moyens de l'obtenir facilement.

Je crains avoir des problèmes avec apparmor, les autorisations du conteneur ou des problèmes dans lxd/lxc.

Quelle serait la meilleure (ou la meilleure) façon de les déplacer?

(Avril 2017) MISE À JOUR *******************

LXD 2.9+ prend en charge plusieurs pools de stockage.

3
lepe

Le gros problème avec LXD est qu’à l’heure actuelle, il ne semble prendre en charge qu’un seul pool de stockage. En particulier, cela pose un problème si vous souhaitez exécuter une partie de vos conteneurs dans un volume de disque et une autre dans un autre. Disons que vous avez des conteneurs "rapides" dans un volume SSD et des conteneurs "lents" dans un volume HDD.

Si vous souhaitez exécuter vos conteneurs dans un seul volume, la solution est simple:

  • arrêtez vos conteneurs
  • arrêter LXD (service lxd stop)
  • déplacez tout votre répertoire/var/lib/lxd vers votre nouveau pool de stockage
  • créer un lien symbolique vers votre nouveau pool de stockage
  • démarrer LXD (service lxd start)
  • vous avez terminé

Par exemple, si votre nouveau stockage est monté sous/mnt/large pool dans un sous-répertoire nommé lxd, créez le lien ainsi: ln -s /mnt/largepool/lxd /var/lib/lxd

De cette façon, vous aurez vos conteneurs sur votre nouveau volume de stockage.

Attention, si vous utilisez BTRFS ou ZFS comme back-end de stockage, vous voudrez peut-être créer d'abord les sous-volumes nécessaires sur votre nouveau stockage, afin que vos conteneurs se trouvent dans leurs propres sous-volumes. Par exemple, si vous avez btrfs et des conteneurs nommés c1 et c2 et que le répertoire/mnt/largepool/lxd/conteneurs est déjà en place, avant le déplacement réel des fichiers, créez des sous-volumes: btrfs su create /mnt/largepool/lxd/containers/c1 btrfs su create /mnt/largepool/lxd/containers/c2

Cela faciliterait la création d'instantanés de conteneur par la suite.

J'espère que cette information a été utile.

3
Alvils Berzins

LXD est basé sur une base de données sqlite. Pour modifier l'emplacement de la piscine, il suffit de modifier la base de données:

installer le client sqlite3 si vous n'en avez pas

echo "UPDATE config SET valeur = 'new_pool_lxd' WHERE\key = 'storage.zfs_pool_name';" | sqlite3 / var/lib/lxd/lxd.db

en supposant que votre base de données lxd à l'emplacement par défaut

puis vérifier

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

1 | storage.zfs_pool_name | new_pool_lxd

j'espère que cela t'aides

2
Alex Barchiesi