Skip to content Skip to footer

TrueNAS backupy maszyn wirtualnych w kontenerach LXC

TrueNAS SCALE to potężny system open-source do zarządzania danymi i kontenerami, oparty na linuxcontainers.org, który umożliwia uruchamianie kontenerów LXC/Incus oraz maszyn wirtualnych (VM). W tym artykule pokażemy, jak w prosty sposób tworzyć backupy całych maszyn wirtualnych działających w kontenerach LXC/Incus, aby można je było przywrócić po awarii, oraz jak przenieść działającą maszynę na inny serwer TrueNAS SCALE. Instrukcja jest napisana w sposób „idiotoodporny”, z myślą o początkujących użytkownikach.

Dlaczego warto robić backupy maszyn wirtualnych?

Backupy są kluczowe, aby zabezpieczyć dane i konfiguracje maszyn wirtualnych przed awarią sprzętu, błędami użytkownika lub problemami z oprogramowaniem. W TrueNAS SCALE kontenery LXC/Incus przechowują system plików w folderze (np. ZFS dataset), co ułatwia tworzenie i przywracanie backupów. Przenoszenie maszyn na inny serwer pozwala na migrację środowiska bez konieczności ponownej konfiguracji.

Uwaga: Zawsze przechowuj backupy na oddzielnym urządzeniu lub w chmurze, aby zminimalizować ryzyko utraty danych w przypadku awarii serwera.

Część 1: Tworzenie backupów maszyn wirtualnych w kontenerach LXC/Incus

TrueNAS SCALE używa Incus jako domyślnego systemu do zarządzania kontenerami LXC. Poniżej znajdziesz krok po kroku instrukcję tworzenia backupów, które umożliwią przywrócenie działających maszyn po awarii.

Krok 1: Zidentyfikuj kontener LXC/Incus

Pierwszym krokiem jest sprawdzenie, jakie kontenery są uruchomione na Twoim serwerze TrueNAS SCALE:

  1. Zaloguj się do interfejsu TrueNAS SCALE.
  2. Przejdź do System Settings > Shell, aby otworzyć terminal.
  3. Wykonaj polecenie, aby wyświetlić listę kontenerów:
    incus list
    Wynik pokaże listę kontenerów, np.:
    +---------------+---------+------+------+
    |     NAME      | STATUS  | IPV4 | IPV6 |
    +---------------+---------+------+------+
    | docker-test-srvr | RUNNING | 192.168.76.177 | |
    +---------------+---------+------+------+
                    
    Zapisz nazwę kontenera (np. docker-test-srvr).

Krok 2: Zatrzymaj kontener (opcjonalne, ale zalecane)

Aby zapewnić spójność danych, zatrzymaj kontener przed utworzeniem backupu:

incus stop docker-test-srvr

Jeśli kontener musi działać, możesz pominąć ten krok, ale backup może zawierać niespójne dane.

Krok 3: Utwórz snapshot ZFS

Kontenery LXC/Incus w TrueNAS SCALE są przechowywane jako ZFS datasets. Snapshot ZFS to szybki i efektywny sposób na utworzenie backupu.

  1. Sprawdź, gdzie przechowywany jest kontener:
    incus config show docker-test-srvr
    Poszukaj linii z root:, np.:
    root:
      path: /mnt/tank/containers/docker-test-srvr
                    
    Ścieżka (np. tank/containers/docker-test-srvr) to ZFS dataset.
  2. Utwórz snapshot ZFS:
    zfs snapshot tank/containers/docker-test-srvr@snapshot-20250807
    Nazwa snapshotu (np. snapshot-20250807) może być dowolna, ale zaleca się używanie daty dla łatwego rozpoznania.
  3. Sprawdź, czy snapshot został utworzony:
    zfs list -t snapshot
    Powinieneś zobaczyć swój snapshot, np.:
    NAME                                    USED  AVAIL  REFER  MOUNTPOINT
    tank/containers/docker-test-srvr@snapshot-20250807  0B      -   1.2G  -
                    

Krok 4: Eksportuj snapshot do pliku

Aby backup był przenośny, wyeksportuj snapshot do pliku tar.gz:

incus export docker-test-srvr /mnt/tank/backups/docker-test-srvr-20250807.tar.gz --instance-only

Flaga --instance-only zapewnia, że eksportujesz tylko kontener, bez dodatkowych snapshotów. Plik zostanie zapisany w podanej lokalizacji (np. /mnt/tank/backups).

Uwaga: Upewnij się, że masz wystarczająco dużo miejsca w puli ZFS (tank/backups) na zapisanie backupu.

Krok 5: Skopiuj backup na zewnętrzne urządzenie

Aby zabezpieczyć backup, skopiuj plik na zewnętrzny dysk USB lub inny serwer:

  1. Podłącz dysk USB do TrueNAS SCALE i zamontuj go (np. w /mnt/usb).
  2. Skopiuj plik backupu:
    cp /mnt/tank/backups/docker-test-srvr-20250807.tar.gz /mnt/usb/
  3. Alternatywnie, użyj rsync do zdalnego serwera:
    rsync -av /mnt/tank/backups/docker-test-srvr-20250807.tar.gz user@remote-server:/backups/

Krok 6: Automatyzacja backupów (opcjonalne)

Aby regularnie tworzyć backupy, skonfiguruj zadanie cron:

  1. Otwórz crontab:
    crontab -e
  2. Dodaj linię do tworzenia snapshotu i eksportu co tydzień (np. w każdą niedzielę o 2:00):
    0 2 * * 0 /usr/sbin/zfs snapshot tank/containers/docker-test-srvr@snapshot-$(date +\%Y\%m\%d) && incus export docker-test-srvr /mnt/tank/backups/docker-test-srvr-$(date +\%Y\%m\%d).tar.gz --instance-only
  3. Zapisz i wyjdź. Cron będzie automatycznie tworzył backupy.

Część 2: Przywracanie maszyny wirtualnej z backupu

Po awarii możesz przywrócić kontener z backupu, aby odzyskać działającą maszynę.

Krok 1: Skopiuj backup na serwer

Jeśli backup znajduje się na zewnętrznym dysku lub zdalnym serwerze, skopiuj go z powrotem do TrueNAS SCALE:

cp /mnt/usb/docker-test-srvr-20250807.tar.gz /mnt/tank/backups/

Lub użyj rsync z zdalnego serwera:

rsync -av user@remote-server:/backups/docker-test-srvr-20250807.tar.gz /mnt/tank/backups/

Krok 2: Importuj kontener z backupu

Zaimportuj kontener z pliku tar.gz:

incus import /mnt/tank/backups/docker-test-srvr-20250807.tar.gz

Sprawdź, czy kontener pojawił się na liście:

incus list

Krok 3: Uruchom kontener

Uruchom przywrócony kontener:

incus start docker-test-srvr

Sprawdź, czy działa poprawnie, np. przez SSH:

ssh tomasz-syn-grzegorza@192.168.76.177

Krok 4: Rozwiązywanie problemów

  • Brak miejsca w puli ZFS: Upewnij się, że masz wystarczająco dużo miejsca w puli ZFS (zfs list).
  • Błąd importu: Sprawdź, czy plik tar.gz nie jest uszkodzony:
    tar -tzf /mnt/tank/backups/docker-test-srvr-20250807.tar.gz
  • Problemy z siecią: Upewnij się, że konfiguracja sieciowa kontenera (np. tryb mostkowy) jest zgodna z ustawieniami serwera.

Część 3: Przenoszenie maszyny wirtualnej na inny serwer TrueNAS SCALE

Przeniesienie działającego kontenera LXC/Incus na inny serwer TrueNAS SCALE wymaga eksportu i importu backupu lub replikacji ZFS.

Krok 1: Przygotuj serwer docelowy

Upewnij się, że serwer docelowy ma zainstalowany TrueNAS SCALE i Incus:

incus version
Jeśli Incus nie jest zainstalowany, skontaktuj się z dokumentacją TrueNAS SCALE.

Krok 2: Eksportuj kontener z serwera źródłowego

Wykonaj backup kontenera, jak opisano w Części 1 (Krok 4):

incus export docker-test-srvr /mnt/tank/backups/docker-test-srvr-20250807.tar.gz --instance-only

Krok 3: Przenieś plik backupu na serwer docelowy

Skopiuj plik backupu na serwer docelowy, np. przez rsync:

rsync -av /mnt/tank/backups/docker-test-srvr-20250807.tar.gz user@new-server:/mnt/tank/backups/
Zastąp new-server adresem IP nowego serwera (np. 192.168.76.200).

Krok 4: Zaimportuj kontener na serwerze docelowym

Na serwerze docelowym zaimportuj kontener:

incus import /mnt/tank/backups/docker-test-srvr-20250807.tar.gz

Sprawdź, czy kontener jest widoczny:

incus list

Krok 5: Skonfiguruj sieć i uprawnienia

Po imporcie upewnij się, że konfiguracja sieciowa jest zgodna z nowym serwerem (np. adres IP w tej samej podsieci). Sprawdź ustawienia:

incus config show docker-test-srvr

Jeśli kontener używa specyficznych uprawnień (np. root:root z UID 2147000001), dostosuj je:

sudo chown -R 2147000001:2147000001 /mnt/tank/containers/docker-test-srvr

Krok 6: Uruchom kontener na nowym serwerze

Uruchom kontener:

incus start docker-test-srvr

Przetestuj dostęp, np. przez SSH:

ssh tomasz-syn-grzegorza@192.168.76.177

Krok 7: (Opcjonalne) Replikacja ZFS dla automatycznej synchronizacji

Jeśli chcesz regularnie przenosić dane między serwerami, skonfiguruj replikację ZFS:

  1. Na serwerze źródłowym włącz replikację:
    zfs set readonly=off tank/containers/docker-test-srvr
  2. Wyślij snapshot ZFS na serwer docelowy:
    zfs send tank/containers/docker-test-srvr@snapshot-20250807 | ssh user@new-server zfs receive tank/containers/docker-test-srvr
  3. Skonfiguruj zadanie cron dla regularnej replikacji:
    0 3 * * * zfs snapshot tank/containers/docker-test-srvr@snapshot-$(date +\%Y\%m\%d) && zfs send -i tank/containers/docker-test-srvr@snapshot-$(date -d "yesterday" +\%Y\%m\%d) tank/containers/docker-test-srvr@snapshot-$(date +\%Y\%m\%d) | ssh user@new-server zfs receive tank/containers/docker-test-srvr

Zalecenia i wskazówki

  • Regularne backupy: Automatyzuj backupy za pomocą cron, aby uniknąć ręcznej pracy.
  • Zewnętrzne przechowywanie: Przechowuj backupy na osobnym urządzeniu lub w chmurze (np. Backblaze).
  • Testowanie backupów: Regularnie testuj przywracanie backupów, aby upewnić się, że są poprawne.
  • Bezpieczeństwo SSH: Używaj kluczy SSH zamiast haseł dla rsync i replikacji ZFS.
  • Dokumentacja TrueNAS: Więcej informacji znajdziesz w dokumentacji TrueNAS SCALE oraz na linuxcontainers.org.

Podsumowanie

Tworzenie backupów i przenoszenie maszyn wirtualnych w kontenerach LXC/Incus na TrueNAS SCALE jest proste dzięki snapshotom ZFS i narzędziom Incus. Wykonując powyższe kroki, możesz zabezpieczyć swoje dane i łatwo migrować kontenery między serwerami. Pamiętaj o regularnym testowaniu backupów i zabezpieczaniu dostępu do serwera, aby zapewnić bezpieczeństwo i niezawodność.

Leave a comment

0.0/5