Oto wprowadzenie do korzystania rsyncz 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. rsyncmoż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 /sysi /procpunkty montowania istnieje. Ale nic nie powinny zawierać. Kolejny:
/dev/*
devKatalog nie jest całkiem tak samo jak proci sysale 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/*
/runna ogół też nie jest na dysku, jest w pamięci. Być może /tmpmoż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 /mntlub /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.txt1, 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). --deleteza 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. aZestawy rekurencji do katalogów i sprawia, że wszystkie atrybuty plików mecz. -Hjest zachowanie twardych linków 2 , vjest dla pełnych, dlatego dostajesz trochę danych wyjściowych (w przeciwnym razie rsyncjest cicho). Zobacz man rsyncwięcej.
Istnieje skrót, dzięki któremu można pominąć --exclude-fromplik. Jeśli masz pewność, że wszystkie rzeczy, których nie chcesz kopiować ( /tmpitp.), Znajdują się w osobnych systemach plików, możesz po prostu użyć:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-xzostał wstawiony. Jest to krótka forma --one-file-system, która mówi, rsyncaby nie przekraczać granic systemu plików. Osobiście wolę --exclude-from, ale na przykład domyślny Raspbian, --one-file-systembędzie działał dobrze. Możesz użyć obu, jeśli chcesz -xzachować ostrożność: D
To nie jest kompletna kopia zapasowa. Wystarczy, jeśli nic nie włożyłeś booti 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.txtchcesz 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ę .imgplikiem, będziesz miał do czynienia z prawdziwym urządzeniem (np. /dev/sdb), Co oznacza, że musisz tylko utworzyć tablicę partycji, fdiska następnie format /dev/sdb1i 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 ddcał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.txtA „opcje ssh” to to, czego normalnie używasz (jeśli cokolwiek). Musisz mieć dostęp do roota poprzez sshto zrobić dla celów kopii zapasowej systemu (ustawiony PermitRootLogin=yesw /etc/ssh/sshd_configi 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 rsyncpolecenie, 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 rsyncnie robi tego automatycznie.
dd, spójrzrsync.