web-dev-qa-db-fra.com

Comment sauvegarder/déplacer des conteneurs LXC?

Je veux prendre la sauvegarde de conteneur LXC. Nous avons un serveur avec 12.04 LTS ubuntu server et j’y ai installé LXC - 1.0.0.alpha2. Je voulais mettre à jour notre serveur Ubuntu à 14.04 LTS. Je souhaite donc sauvegarder les conteneurs LXC -> mettre à niveau le système d'exploitation vers 14.04 -> restaurer les conteneurs LXC. Avec la version précédente (0.7.5 je suppose), il y avait lxc-backup et lxc-restore, mais avec 1.0.0.alpha2, nous n'avons pas d'opérations de sauvegarde et de restauration. Comment puis-je avoir des sauvegardes de conteneurs lxc. J'ai passé plus de 3 heures avec le dossier de conteneur de copie (/ var/lib/lxc/my_container /) dans la clé USB et le coller dans un autre serveur 12.04 LTS mais cela ne fonctionne pas, l'erreur est en train d'arriver

#Sudo lxc-start -n my_container
lxc-start: invalid sequence number 1, expected 4.
lxc-start: failed to spwan "my_container"

alors comment puis-je m'attendre à ce que cela fonctionne dans l'OS serveur mis à jour 14.04.

Une idée de sauvegarde lxc-container?

12
niren

EDIT: 29 mars 2016

Au cas où vous tomberiez sur cet article, ma réponse concerne en fait déplacement les conteneurs LXC entre les systèmes, puisque cela semblait être la question posée.

Si vous voulez sauvegarder _ vos conteneurs LXC, consultez la réponse de @ Stuart pour quelques bonnes options.

Déplacement de conteneurs LXC entre systèmes hôtes

Voici comment je migre les conteneurs LXC entre les systèmes. J'ai réussi à transférer des conteneurs 12.04 basés sur Ubuntu vers un hôte 14.04 et ils fonctionnent très bien.

  • Fermer le conteneur

    # lxc-stop -n $NAME
    
  • (Archive & config du conteneur d'archivage}

    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -czvf container_fs.tar.gz ./*
    

    L'indicateur --numeric-owner est très important. Sans lui, le conteneur ne peut pas démarrer car les uid/gids sont mutilés dans le système de fichiers extrait.. Lorsque tar crée une archive, il conserve les informations de propriété des utilisateurs/groupes. Par défaut, lors de l'extraction, tar tente de résoudre les noms de propriété des utilisateurs/groupes d'archives avec les identifiants du système sur lequel tar est exécuté. Cela a pour but de garantir que la propriété des utilisateurs est résolue sur le nouveau système, au cas où les valeurs numériques de l'UID diffèrent entre les systèmes.

    Ceci est mauvais pour un système de fichiers LXC car la propriété numérique uid/gid est destinée à être préservée pour l'ensemble du système de fichiers. Si le problème est résolu à une valeur différente, de mauvaises choses se produisent.

  • _ {Copiez le fichier sur votre nouveau serveur} _

    # rsync -avh container_fs.tar.gz user@newserver:/var/lib/lxc/
    
  • _ {Extraire les rootfs

    # mkdir /var/lib/lxc/$NAME/
    # cd /var/lib/lxc/$NAME/
    # tar --numeric-owner -xzvf container_fs.tar.gz .
    

Si vous utilisez un conteneur sauvegardé en superposition, vous devez également migrer le conteneur sur lequel ce nouveau conteneur est basé. Enfin, vous pourriez voir quelques avertissements concernant les fichiers de socket ignorés: 

tar: /var/lib/lxc/$NAME/rootfs/dev/log: socket ignored 

J'ai ignoré cette erreur et je n'ai rencontré aucun problème avec les conteneurs que je gère. Si vous avez d'autres problèmes, ajoutez vos messages d'erreur au message d'origine et je développerai.

33
BobTuckerman

EDIT: novembre 2017

Pour sauvegarder rapidement un conteneur lxc sur un hôte remote sans système de fichiers btrfs, je monte un système de fichiers à partir de l'hôte remote avec sshfs & cd dans le montage. Arrêtez le conteneur et créez une archive tar.xz de celui-ci.


EDIT: mars 2016

J'exécute maintenant mes conteneurs lxc sur un système de fichiers btrfs afin de simplifier l'utilisation d'une snapshot des conteneurs en cours d'exécution. btrfs sub snap détecte proc run sys sont des systèmes de fichiers virtuels et ne les inclut pas dans l'instantané.


J'utilise Duply pour sauvegarder les conteneurs LXC. Contrairement à la sauvegarde d'une machine normale, vous VOULEZ vouloir inclure /dev à partir du conteneur LXC dans la sauvegarde.

apt-get install duply
duply mybackup create

Dans ~/.duply/mybackup/exclude j'ai utilisé:

- /cdrom
- /dev
- /lost+found
- /media
- /mnt
- /proc
- /run
- /sys
- /tmp
- /var/backup/restore/*
- /var/backup/tmp/*
- /var/lib/lxc/*/rootfs/lost+found
- /var/lib/lxc/*/rootfs/media/*
- /var/lib/lxc/*/rootfs/mnt/*
- /var/lib/lxc/*/rootfs/proc/*
- /var/lib/lxc/*/rootfs/run/*
- /var/lib/lxc/*/rootfs/sys/*
- /var/lib/lxc/*/rootfs/tmp/*
- /var/lib/lxcfs/*

Ce qui précède sauvegarde l’ensemble de la machine et tous les conteneurs LXC. 

Pour sauvegarder uniquement les conteneurs, éditez ~/.duply/mybackup/conf & changez SOURCE='/' en SOURCE='/var/lib/lxc' & supprimez les lignes autres que lxc de ~/.duply/mybackup/exclude

Testé avec les conteneurs Alpine Linux LXC en cours d'exécution - fonctionnera également sous Debian.

Sauvegardes simples avec Duply - vous pouvez également effectuer de très simples sauvegardes non chiffrées dans un fichier local (définissez TARGET='file://[relative|/absolute]/local/path' dans ~/.duply/mybackup/conf)

Pour signer Duply backups, voir GnuPG dans des environnements automatisés (clé de signature sans mot de passe au lieu de stocker le mot de passe en texte brut).

Définissez GPG_TEST='disabled' dans le fichier Duply conf pour les travaux cron. 

Si vous not ne stockez aucun mot de passe en texte brut dans votre conf faites not désactivez GPG_TEST sur restaure - so gpg-agent met en cache vos mots de passe.

10
Stuart Cardall

Je suis d'accord avec Brad Jasperson. Je le fais de cette façon:

lxc-clone -KMP /path/to/backup name name

Si quelque chose ne va pas avec votre conteneur et que les temps d'arrêt coûtent cher, vous pouvez exécuter la copie:

lxc-start -n name -P /path/to/backup

et arrêtez:

lxc-stop -n name -P /path/to/backup

vous pouvez le copier à nouveau plus tard au moment opportun. Bonne chance!

2
Alek

Je trouve que le moyen le plus simple de sauvegarder un conteneur est d’exécuter simplement lxc-clone.

lxc-clone -o NAMEOFCONTAINER -n NAMEOFCONTAINER -P BACKUPDIR

La restauration est aussi simple que de copier ou de replacer la sauvegarde dans /var/lib/lxc Vous pouvez également la supprimer pour économiser de l'espace.

1
Brad Jasperson