Jak wykonać kopię zapasową / przenieść kontenery LXC?

Chcę wykonać kopię zapasową kontenera lxc. Mamy serwer z {[1] } i zainstalowałem w nim LXC - 1.0.0.alpha2. Chciałem zaktualizować nasz ubuntu server do 14.04 LTS. Chcę więc mieć kopię zapasową kontenerów LXC - > upgrade OS do 14.04 - > restore LXC containers. Z wcześniejszą wersją (0.7.5 chyba) było lxc-backup i LXC-restore ale z 1.0.0.alpha2 nie mamy operacji tworzenia kopii zapasowych i przywracania. Jak Mogę mieć kopię zapasową kontenerów lxc. Spędziłem ponad 3 godziny z copy container folder (/var / lib / LXC / my_container/) w pendrive i wklej go do innego serwera LTS 12.04, ale nie działa błąd, który otrzymuję, to

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

Więc jak mogę się spodziewać, że będzie działać w zaktualizowanym 14.04 server OS.

Jakiś pomysł na backup lxc-container?

Author: BobTuckerman, 2014-05-02

4 answers

Edycja: 29 marca 2016

W przypadku, gdy natknąłeś się na ten post, moja odpowiedź jest naprawdę oprzenoszenie kontenerów LXC między systemami, ponieważ wydawało się, że to pytanie jest zadawane.

Jeśli chceszwykonać kopię zapasową swoich kontenerów LXC, zobacz odpowiedź @Stuart, aby znaleźć kilka świetnych opcji.

Przenoszenie kontenerów LXC pomiędzy systemami hostów

W ten sposób migruję kontenery LXC między systemami. Udało mi się przenieść kontenery ubuntu 12.04 na 14.04 gospodarz, i działają świetnie.

  • Zamknij pojemnik

    # lxc-stop -n $NAME
    
  • Archiwum kontenerów rootfs & config

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

    Flaga --numeric-owner jest bardzo ważna! Bez niego kontener może się nie uruchomić, ponieważ uid/gid zostają zniekształcone w wyodrębnionym systemie plików. kiedy tar tworzy archiwum, zachowuje informacje o własności użytkownika / grupy. Domyślnie, podczas rozpakowywania, tar próbuje rozwiązać archiwum użytkownika / grupy nazwy własności z identyfikatorami w systemie z uruchomionym tar. Ma to na celu zapewnienie, że własność użytkownika zostanie rozwiązana w Nowym Systemie, w przypadku gdy wartości liczbowe UID różnią się między systemami.

    jest to złe dla systemu plików LXC, ponieważ własność numeryczna uid/gid ma być zachowana dla całego systemu plików. Jeśli zostanie rozwiązany do innej wartości, złe rzeczy się zdarzają.

  • Skopiuj plik do nowego Serwer

    # rsync -avh container_fs.tar.gz user@newserver:/var/lib/lxc/
    
  • Wyciąg z korzeni

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

Jeśli używasz kontenera z nakładką, musisz również przenieść kontener, na którym opiera się ten nowy. Na koniec możesz zobaczyć kilka ostrzeżeń o pominiętych plikach gniazd:

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

Zignorowałem ten błąd i nie miałem żadnych problemów z żadnym kontenerem, którym zarządzam. Jeśli masz dalsze problemy, Dodaj swoje komunikaty o błędach do oryginalnego posta, a ja rozwiń.

 31
Author: BobTuckerman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 12:35:47

EDIT: listopad 2017

Aby szybko wykonać kopię zapasową lxc kontenera na remote host Bez btrfs systemu plików montuję system plików z remote hosta z sshfs & cd do góry. Zatrzymaj kontener i utwórz z niego archiwum tar.xz.


EDIT: Marzec 2016

Uruchamiam teraz moje lxc kontenery na btrfs system plików, aby ułatwić pobranie snapshot uruchomionych kontenerów. btrfs sub snap wykrywa proc run sys są wirtualnymi systemami plików i nie dołącz je do migawki.


Używam Duply do tworzenia kopii zapasowych kontenerów LXC. W przeciwieństwie do tworzenia kopii zapasowej zwykłej maszyny, należy włączyć /dev z kontenera LXC do kopii zapasowej.

apt-get install duply
duply mybackup create

W ~/.duply/mybackup/exclude użyłem:

- /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/*

Powyższe tworzy kopię zapasową całej maszyny i wszystkich kontenerów LXC.

Aby po prostu utworzyć kopię zapasową kontenerów edytuj ~/.duply/mybackup/conf & Zmień SOURCE='/' na SOURCE='/var/lib/lxc' & usuń linie inne niż LXC z ~/.duply/mybackup/exclude

Testowane z uruchomieniem Alpine Linux LXC containers - będzie również działać na Debianie.

Proste kopie zapasowe za pomocą Duply - możesz również wykonać bardzo proste niezaszyfrowane kopie zapasowe do pliku lokalnego (Ustaw TARGET='file://[relative|/absolute]/local/path' w ~/.duply/mybackup/conf)

Aby podpisać Duply kopie zapasowe zobacz GnuPG w zautomatyzowanych środowiskach (Klucz podpisywania bez hasła zamiast przechowywania hasła w postaci zwykłego tekstu ).

Ustaw GPG_TEST='disabled' w pliku Duply conf Dla zadań cron.

Jeśli zrobisz Nie przechowuj jakiekolwiek hasła tekstowe w twoim conf do Nie wyłącz GPG_TEST on przywraca - więc gpg-agent buforuje Twoje hasła.

 9
Author: Stuart Cardall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 19:49:12

Zgadzam się z Bradem Jaspersonem. Robię to w ten sposób:

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

Jeśli coś pójdzie nie tak z Twoim kontenerem, a przestój kosztuje dużo, możesz uruchomić kopię:

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

I stop:

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

Możesz skopiować go z powrotem w odpowiednim czasie. Powodzenia!

 2
Author: Alek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-24 10:31:57

Najprostszym sposobem tworzenia kopii zapasowej kontenera jest uruchomienie lxc-clone.

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

Przywrócenie go jest tak proste, jak skopiowanie lub przeniesienie kopii zapasowej z powrotem do /var / lib / lxc Możesz również smołować, aby zaoszczędzić miejsce.

 1
Author: Brad Jasperson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-29 18:31:30