Automatyczna kopia zapasowa – skrypt + cron
W poprzednim wpisie omówiliśmy sobie czym są zadania Cron oraz stworzyliśmy całą automatyzację aktualizacji systemu. W tym wpisie kontynuujemy ten temat, ale tym razem stworzymy skrypt do cyklicznego tworzenia kopii zapasowej serwera, który będzie odpalany co trzy dni jako kolejne zadanie w naszej tablicy Cron.
Przygotowanie dysku zewnetrznego
Na potrzeby przechowywania kopii zapasowych podłączyłem do serwera jakiś stary dysk SSD o pojemności 512GB, który włożyłem do kieszeni na dyski zewnętrzne za 40 zł. Będziemy postępować analogicznie do tego co zostało szczegółowo opisane we wpisie o obsłudze pamięci przenośnych, lecz z tą różnicą, że tym razem wykorzystamy format plików NTFS. Zaczynamy od ustalenia oznaczenia nowego dysku:fdisk -l
W moim przypadku jest to „/dev/sdb”. Wyczyśćmy go poprzez usunięcie wszystkich jego partycji:wipefs -af /dev/sdb
Przystępujemy do tworzenia nowej partycji:cfdisk /dev/sdb
Najpierw zostaniemy zapytanie o wybranie „Label type”, więc wybierzmy „dos”. Na dole wybieramy opcję „[New]”, program sam podpowie o jakiej wielkości zrobić partycję (wykorzystać całą pojemność), potwierdzamy ENTERem, wybieramy typ partycji „primary”, następnie „[Write]”, kontrolne pytanie czy jesteśmy pewni, więc „yes” i gotowe. Na górze zamiast „Free space” powinna się pojawić partycja „/dev/sdb1”. Wychodzimy przyciskiem „[Quit]”.
Teraz pozostaje nam już tylko ustawić format plików NTFS:mkfs.ntfs -f /dev/sdb1
Flaga „-f” oznacza „fast”, czyli szybkie formatowanie (bez sprawdzania bad sectorów i zerowania całej partycji, co może trwać naprawdę długo przy dużym dysku).
Tak przygotowaną partycję dysku musimy jeszcze zamontować. Najlepiej od razu wrzucić ją do pliku „/etc/fstab”, żeby była ona montowana zawsze przy uruchomieniu serwera. Najpierw jednak musimy utworzyć punkt kotwienia:sudo mkdir /media/usb-sd512
Teraz musimy ustalić UUID partycji, która nas interesuje:ls -l /dev/disk/by-uuid/*
W rezultacie dostaniemy listę, w której jednym z wierszy będzie coś podobnego do:lrwxrwxrwx 1 root root 10 Jul 10 18:21 /dev/disk/by-uuid/7F3EEEDC2A790BFB -> ../../sdb1
Interesuje nas z tego numer podajny po „…/by-uuid/”. Otwieramy do edycji plik „fstab”:sudo nano /etc/fstab
Na jego końcu wstawiamy linijkę:/dev/disk/by-uuid/7F3EEEDC2A790BFB /media/usb-sd512/ ntfs defaults 0 0
Plik zapisujemy i wychodzimy z niego. Teraz wypadałoby zrestartować serwer w celu sprawdzenia czy dysk zostanie automatycznie prawidłowo zamontowany:sudo reboot
Tworzymy skrypt bash
Tak samo jak we wpisie o kopiach zapasowych do tworzenia back-up’u serwera wykorzystamy polecenie „tar”, a utworzone w ten sposób archiwum przeniesiemy od razu na zewnętrzny dysk podpięty do serwera.
Tworzymy skrypt:sudo nano /home/skrypty/backup_do_usb.sh
Otworzy nam się edytor tekstowy, w który wklejamy treść skryptu:#!/bin/bash
#Skrypt do robienia backupu calego serwera i przerzucenie go do usb
#Tworzenie folderu jezeli nie istnieje
sudo mkdir /media/usb-ssd512/backup
#Tworzenie archiwum
sudo tar -cpzf /media/usb-ssd512/backup/$(date +"%FT%H%M")_odroid_backup.tar.gz --one-file-system /
#Komunikat o zakonczeniu tworzenia archiwum
echo "Kopia zostala wykonana i zapisana na zewnętrznym nosniku usb"
Warto zauważyć, że z polecenia „tar” wyrzuciliśmy flagę „-v”. Jest to podyktowane tym, że w później utworzonym pliku log nie chcemy mieć strasznego śmietnika z listą wszystkich przetworzonych plików. Gdybyśmy zostawili tą flagę to log byłby naprawdę obszernym plikiem, którego rozmiar może sięgać nawet kilkudziesięciu MB. Plik zapisujemy i wychodzimy z edytora. Musimy jeszcze uczynić ten skrypt wykonywalnym:sudo chmod +x /home/skrypty/backup_do_usb.sh
Tworzymy zadanie Cron
Otwieramy tablicę zadań Cron użytkownika root:sudo crontab -e
Przechodzimy do ostatniej linijki i wpisujemy:0 1 * * 1 /home/skrypty/backup_do_usb.sh > /home/skrypty/logi/backup_do_usb_sh.log 2>&1
Tak skonfigurowane zadanie będzie się uruchamiać w każdy poniedziałek o godzinie 1:00. Specjalnie ustawiłem taką godzinę, aby kopia zapasowa zrobiła się dwie godziny przed automatyczną aktualizacją systemu, która odbywa się codziennie o 3:00. W ten sposób jak cokolwiek pójdzie nie tak to będzie można przywrócić kopię. Wydaje mi się, że tworzenie kopii raz w tygodniu jest OK, ale jeżeli ktoś uważa, że potrzebuje robić to częściej to nie ma przeszkód, aby zmodyfikować ustawienia zadania Cron. Warto jednak pamiętać, że będzie to dość spora ilość danych, więc albo trzeba zainwestować w duży dysk, albo co jakiś czas usuwać najstarsze kopie. Nie zapomnieliśmy także o zachowaniu loga z wynikiem zadania. Po wykonaniu zadania można go będzie podejrzeć:cat /home/skrypty/logi/backup_do_usb_sh.log
Na koniec pamiętajmy, że po każdej zmianie dobrze jest przeładować tablicę zadań Cron:sudo service cron reload
Jeżeli materiał zawarty w tym wpisie jest dla Ciebie wartościowy i masz ochotę wesprzeć moją pracę to zapraszam na mój profil na >Patronite<. Zachęcam także do odwiedzenia mojej strony >tomaszdunia.pl<. Możesz także zagadać do mnie na Twitterze >@theto3k<.
Poprzedni wpis:
Zadania Cron – podstawy automatyzacji
Następny wpis:
Komentarze: 2 - “Automatyczna kopia zapasowa – skrypt + cron”
Skomentuj palpatine Anuluj pisanie odpowiedzi
Kategorie: Poradniki,Skrypty - @ 2022-10-14 18:00
Tagi: automatyzacja, back-up, Cron, cron jobs, Crontab, harmonogram zadań, kopia zapasowa, Linux, logi, ntfs, ODROID, RaspberryPi, ssd, Unix, zadania cron
Bardzo fajna strona, nie dawno zakupiłem odroida i się przydaje twoja praca, oby tak dalej. Liczę na częstsze wpisy. Ciekawy jestem do czego jeszcze można używać odroid 🙂
Bardzo mi miło, że informacje zawarte na tym skromnym blogu komuś się przydają 🙂 Postaram się publikować dalej jak tylko wpadnie mi do głowy jakoś pomysł na wpis 😉