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?
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.
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.
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.
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.
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!
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.