Oto wprowadzenie do korzystania rsync
z kopii zapasowej na Pi. Po utworzeniu początkowej kopii zapasowej utrzymanie jej w ten sposób jest znacznie szybsze niż ciągłe zgrywanie całego obrazu. Możesz to zrobić na lokalnym dysku twardym lub w sieci.
W rzeczywistości nie potrzebujesz pełnej kopii działającego systemu jako kopii zapasowej, ponieważ niektóre rzeczy rzekomo w systemie plików istnieją tylko w czasie wykonywania. Dołączenie tego do kopii zapasowej, a następnie użycie go do odtworzenia obrazu później może spowodować problemy.
Są też inne wyjątki. rsync
może zaakceptować listę ( globalnych ) wzorców do wykluczenia, które można odczytać z pliku, więc najpierw przejrzyjmy, co powinno być w takim pliku. Pamiętaj, że wpisy mają formę, /directory/*
a nie formę /directory
. Jest tak, ponieważ chcemy, aby istniały, ale nie chcemy niczego w nich kopiować.
/proc/*
/sys/*
Te tak naprawdę nie istnieją na dysku. Są interfejsem do jądra, które tworzy je i utrzymuje w pamięci . Jeśli skopiujesz je, a następnie skopiujesz z powrotem do systemu i uruchomisz, będzie to (co najwyżej) bez znaczenia, ponieważ jądro używa ich jako punktów montowania dla interfejsów [Jeśli chcesz zobaczyć, co się stanie po zamontowaniu partycji systemu plików w katalogu z danymi, spróbuj. Działa i nie wyrządzi żadnej szkody, ale rzeczy, które były w katalogu, są teraz niedostępne.]
Należy pamiętać, że ważne jest, że /sys
i /proc
punkty montowania istnieje. Ale nic nie powinny zawierać. Kolejny:
/dev/*
dev
Katalog nie jest całkiem tak samo jak proc
i sys
ale dla naszych celów jest. Jeśli uważasz, że powinieneś to zapisać, aby mieć te same węzły urządzenia w kopii zapasowej lub coś w tym rodzaju, jesteś w błędzie . Nie zawracaj sobie głowy Nie kopiuj dev
. Dawno, dawno temu Linux działał w ten sposób, ale już nie.
/boot/*
Jest to rodzaj szczególnego przypadku z większością (być może wszystkimi) specyficznych dystrybucji Pi, takich jak Raspbian. W rzeczywistości jest to punkt montowania pierwszej partycji vfat. Zajmiemy się tym osobno. Cokolwiek robisz, nie zawracaj sobie głowy włączaniem go tutaj, ponieważ znowu jest to punkt montowania.
/tmp/*
/run/*
/run
na ogół też nie jest na dysku, jest w pamięci. Być może /tmp
może być też (zaoszczędziłoby to trochę akcji karty SD), ale w każdym razie, jak sugerują nazwy, nie są to miejsca do przechowywania trwałych danych. Aplikacje, które ich używają, oczekują, że mogą zostać usunięte przy każdym uruchomieniu.
/mnt/*
/media/*
Są to szczególnie ważne, jeśli planujesz wykonać kopię zapasową na dysku twardym lub w pamięci USB, a urządzenie jest w /mnt
lub /media
(automatyczne montowanie ma tendencję do korzystania z tego drugiego), ponieważ jeśli nie wykluczysz położenia tych urządzeń w systemie plików, utwórz pętlę, tworząc kopię zapasową zawartości dysku, aż zabraknie miejsca. Myślę, że rsync
może być wystarczająco mądry, aby dostrzec coś głupiego, ale staraj się unikać testowania przesłanki.
Przejdź do faktycznego tworzenia kopii zapasowych: Utwórz katalog, na którym chcesz utworzyć kopię zapasową na lokalnie zamontowanym dysku twardym, urządzeniu USB itp. - np. „Pi_backup”. Możesz na przemian tworzyć kopie zapasowe w zdalnej lokalizacji za pośrednictwem ssh
(patrz poniżej) lub przy użyciu sieciowego systemu plików, ale prawdopodobnie zajmie to trochę czasu po raz pierwszy.
Jeśli plik zawierający listę do wykluczenia to /rsync-exclude.txt
1, a dysk to /mnt/usbhd
, wykonaj kopię zapasową:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Zauważ, że na końcu jest ukośnikpi_backup/
.
To zajmie trochę czasu i wygeneruje dużo danych wyjściowych (jeśli chcesz to sprawdzić w dzienniku, dołącz > rsync.log
). --delete
za pierwszym razem jest bez znaczenia, ale do aktualizowania kopii zapasowej używaj jej. To gwarantuje, że rzeczy, które później usunąłeś z Pi, również zostaną usunięte z kopii zapasowej. a
Zestawy rekurencji do katalogów i sprawia, że wszystkie atrybuty plików mecz. -H
jest zachowanie twardych linków 2 , v
jest dla pełnych, dlatego dostajesz trochę danych wyjściowych (w przeciwnym razie rsync
jest cicho). Zobacz man rsync
więcej.
Istnieje skrót, dzięki któremu można pominąć --exclude-from
plik. Jeśli masz pewność, że wszystkie rzeczy, których nie chcesz kopiować ( /tmp
itp.), Znajdują się w osobnych systemach plików, możesz po prostu użyć:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-x
został wstawiony. Jest to krótka forma --one-file-system
, która mówi, rsync
aby nie przekraczać granic systemu plików. Osobiście wolę --exclude-from
, ale na przykład domyślny Raspbian, --one-file-system
będzie działał dobrze. Możesz użyć obu, jeśli chcesz -x
zachować ostrożność: D
To nie jest kompletna kopia zapasowa. Wystarczy, jeśli nic nie włożyłeś boot
i nie masz nic przeciwko użyciu kopii zapasowej do przywrócenia systemu poprzez włożenie karty do komputera i uruchomienie:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Możesz to również zrobić z kartą z nowym obrazem (zakładając, że jest taki sam jak obraz podstawowy), chociaż jest to trochę nieefektywne, jeśli musisz utworzyć obraz (ponieważ następnie zamierzasz go zastąpić). Możesz także podłączyć inną kartę SD za pomocą adaptera USB z takim obrazem i użyć powyższej metody, aby zachować duplikat karty.
Jeśli wstawiłeś coś /boot
(np. Niestandardowe jądro), w tym także /boot/config.txt
chcesz to zrobić (dość proste - nie ma w tym wiele). Po prostu zrób to osobno, a po przywróceniu pliki zostaną przeniesione na pierwszą partycję.
Zobacz tutaj, jeśli chcesz utworzyć pusty obraz w stylu Raspbian, który możesz następnie utworzyć kopię zapasową. Możesz użyć podobnej metodologii, aby stworzyć pustą kartę w stylu Raspbian - zamiast zajmować się .img
plikiem, będziesz miał do czynienia z prawdziwym urządzeniem (np. /dev/sdb
), Co oznacza, że musisz tylko utworzyć tablicę partycji, fdisk
a następnie format /dev/sdb1
i sdb2
(lub cokolwiek) z mkfs
.
Ale kopiowanie całego obrazu jest łatwiejsze! Po co zawracać sobie tym głowę?
To nie jest takie trudne; Wróciłem do pustej karty (sformatowanej zgodnie z ostatnim linkiem) w 10 minut. Tak, samo użycie dd
całości jest prostsze (jeśli znajdziesz takie rzeczy, jak słowa mylące ...), ALE to zajmuje trochę czasu za każdym razem, gdy chcesz zaktualizować kopię zapasową, ponieważ musisz zrobić 100% za każdym razem. Używanie rsync
, po utworzeniu kopii zapasowej, jej aktualizowanie jest znacznie szybsze, dzięki czemu można tak skonfigurować, aby codziennie odbywała się bezboleśnie za pośrednictwem crona. Nawet przez sieć. Co sześć godzin. Im częściej to robisz, tym mniej czasu to zajmie.
rsync
przez ssh
Oto przykład:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
„Opcje” to np. -av --delete --exclude-from=/rsync-exclude.txt
A „opcje ssh” to to, czego normalnie używasz (jeśli cokolwiek). Musisz mieć dostęp do roota poprzez ssh
to zrobić dla celów kopii zapasowej systemu (ustawiony PermitRootLogin=yes
w /etc/ssh/sshd_config
i zrestartuj serwer).
1 Powinieneś zachować ten plik. Możesz umieszczać w nim komentarze w wierszach rozpoczynających się od #
lub ;
. Może to obejmować rzeczywiste rsync
polecenie, które można później skopiować i wkleić, abyś nie musiał pamiętać go za każdym razem.
2 Dzięki Kris za wskazanie rsync
nie robi tego automatycznie.
dd
, spójrzrsync
.