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:
- Zaloguj się do interfejsu TrueNAS SCALE.
- Przejdź do System Settings > Shell, aby otworzyć terminal.
- Wykonaj polecenie, aby wyświetlić listę kontenerów:
Wynik pokaże listę kontenerów, np.:incus list+---------------+---------+------+------+ | 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.
- Sprawdź, gdzie przechowywany jest kontener:
Poszukaj linii zincus config show docker-test-srvrroot:, np.:root: path: /mnt/tank/containers/docker-test-srvrŚcieżka (np.tank/containers/docker-test-srvr) to ZFS dataset. - Utwórz snapshot ZFS:
Nazwa snapshotu (np.zfs snapshot tank/containers/docker-test-srvr@snapshot-20250807snapshot-20250807) może być dowolna, ale zaleca się używanie daty dla łatwego rozpoznania. - Sprawdź, czy snapshot został utworzony:
Powinieneś zobaczyć swój snapshot, np.:zfs list -t snapshotNAME 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:
- Podłącz dysk USB do TrueNAS SCALE i zamontuj go (np. w
/mnt/usb). - Skopiuj plik backupu:
cp /mnt/tank/backups/docker-test-srvr-20250807.tar.gz /mnt/usb/ - 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:
- Otwórz crontab:
crontab -e - 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 - 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:
- Na serwerze źródłowym włącz replikację:
zfs set readonly=off tank/containers/docker-test-srvr - 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 - 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ść.