W temacie kopii zapasowej na stronach poświęconych Raspberry Pi znaleźć można wyłącznie(?) opisy jak to zrobić za pomocą dd
. Ten sposób nie podoba mi się na dłużą metę z uwagi na czas -- kopiowanie karty 8Gb z kompresją przez sshfs zajęło około 1 godziny. Tworzenie kopii przyrostowych (za pomocą rsync
) wydaje się lepszym pomysłem...
Wariant #1: dysk USB podłączony do RPi
Załóżmy, że do /etc/fstab
wpisano:
/dev/disk/by-id/usb-WD_5000AAV_External_57442D574341535535303634313031-0:0-part1 \
/mnt/external-disk ext4 noauto,user,rw 0 0
Utworzenie kopii systemu sprowadza się wykonania:
rsync -av --exclude=/proc/ --exclude=/sys/ --exclude=/tmp/ \
--exclude=/mnt/ --exclude=/home/pi/Dist/ --delete / /mnt/external-disk/backup/rpi
Opcja --exclude
pomija wymienione pliki/katalogi. W szczególności należy koniecznie umieścić tam katalogi, w których są/mogą być montowane inne systemy plików, np. /mnt/
(uniknięcie pętli, bo przecież /mnt/
zawiera zamontowany dysk USB) oraz /home/pi/Dist/
(moje zwyczajowe miejsce montowania systemów plików przez sshfs
)
Wariant #2: kopia systemu tworzona na innym komputerze
Kopia systemu z raspberry będzie tworzona na innym komputerze dostępnym poprzez sieć.
Konfigurowanie rsynca
należy rozpocząć od jego zainstalowania na obu komputerach (źródłowym i odbiorcy):
apt-get install rsync
Zawartość pliku /etc/rsyncd.conf
po stronie źródła (czyli raspberry):
uid = 0
gid = 0
hosts allow = 192.168.1.***
transfer logging = no
read only = yes
[wholefs]
path = /
comment whole root fs
W pliku /etc/default/rsync
(także po stronie źródła, tj. raspberry) należy wpisać lub ,,odhaszować'':
RSYNC_ENABLE=true
Teraz trzeba wystartować rsync
(po ustawnieniu RSYNC_ENABLE
, rsync
będzie już uruchamiany w momencie startu systemu -- nie potrzeba do tego żadnych dodatkowych zabiegów w konfiguracji)
# /etc/init.d/rsync restart
Można sprawdzić czy działa podając polecenie (moje raspberry nazywa się raspberrystar) na komputerze odbiorcy (jako root
):
rsync raspberrystar::wholefs/
Jeżeli wszystko jest OK to wyświetlona zostanie zawartość katalogu /
na raspberrystar (czyli źródle).
Utworzenie kopii systemu sprowadza się wykonania:
rsync -av --exclude=/proc/ --exclude=/sys/ --exclude=/tmp/ \
--exclude=/mnt/ --exclude=/home/pi/Dist/ --delete \
raspberrystar::wholefs/ /public/sheeva/backup/raspberrystar/rootfs
Przywracanie systemu z kopii zapasowej
W razie potrzeby kopia może być szybko przeniesiona na inną kartę SDHC.
# uwaga: nazwy katalogów odpowiadają wariantowi #2 tworzenia kopii:
rsync -av --log-file=rsync_`date +%Y%m%d%H`.log --delete \
/public/sheeva/backup/raspberrystar/rootfs/ /public/sdX
Gdzie /public/sdX
oznacza miejsce zamontowania karty SDHC. Karta musi być wcześniej sklonowana z ,,pierwszej'' kopii systemu wykonanej za pomocą dd
, tj.:
zcat sd_backup.img.gz > /dev/sdX
Teraz można gdybać czy użycie samego dd
nie będzie prostsze. Być może -- ja wolę korzystać na co dzień z rsynca
.
Zauważyłem, że przy intensywnych operacjach I/O są problemy z odczytem danych przez GPIO (temperatura/wilgotność). Problem nie jest duży, ponieważ tworzenie pierwszej kopii systemu zajęło mi jakieś 20 min (można się spodziewać, że kolejne będą tworzone w ciągu kilku minut), ale dla większej pewności dodałem ionice
i --bwlimit
(specjalnie tego nie testując, oprócz sprawdzenia, że działa)
ionice -c3 rsync -av --bwlimit=500 --exclude=/proc/ --exclude=/sys/ --exclude=/tmp/ \
--exclude=/mnt/ --exclude=/home/pi/Dist/ --delete \
raspberrystar::wholefs/ /public/sheeva/backup/raspberrystar/rootfs
Jeżeli powyższe zapisane zostanie do skryptu, np. o nazwie backup_raspberry.sh
, to teraz aby ten skrypt był uruchamiany raz na tydzień, np. w niedzielę o 4:00 należy wpisac do pliku crontab (na komputerze odbiorcy) coś takiego:
0 4 * * 7 /root/bin/backup_raspberry.sh >> /root/logs/RSync/RSync.log 2>&1
Ciekawy artykuł.
OdpowiedzUsuńBardzo wartościowy wpis
OdpowiedzUsuń