====== Backup ====== Różne pomysły i zapiski. ==== Borg ==== Scenariusz kopii zapasowych opartych o borgbackup: * SRVA posiada przestrzeń na kopie zapasowe * SRVB ma ważne pliki, które trzeba kopiować Serwer SRVA posiada dysk na kopie zapasowe: sdb 8:16 0 600G 0 disk └─data-backup 253:2 0 550G 0 lvm /mnt/data/backup Oraz użytkownika //zapas//: zapas:x:1501:1501::/mnt/data/backup/zapas:/bin/bash Jako użytkownik //zapas// przygotowano przestrzeń na kopie zapasowe na serwerze SRVA: mkdir -p pliki/srvb cd pliki/srvb borg init --encryption none . Na serwerze SRVB przygotowano klucze SSH dla użytkownika root: ssh-keygen ze wszystkimi domyślnymi opcjami. Następnie skopiowano zawartość pliku ///root/.ssh/id_rsa.pub// z serwera SRVB do pliku ///mnt/data/backup/zapas/.ssh/authorized_keys// na serwerze SRVA. Potwierdzono możliwość logowania z serwera SRVB na serwer SRVA: ssh zapas@SRVA Wykonanie kopii zapasowych na serwerze SRVB: borg create ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srvb::{fqdn}-etc-{now} /etc borg create ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srvb::{fqdn}-www-{now} /var/www W katalogu srvb na serwerze SRBA pojawi się kilka plików: $ tree srvb/ srvb/ ├── config ├── data │   └── 0 │   ├── 0 │   ├── 1 │   ├── 2 │   ├── 3 │   ├── 4 │   ├── 5 │   ├── 6 │   ├── 7 │   ├── 8 │   └── 9 ├── hints.9 ├── index.9 ├── integrity.9 └── README Katalogów numerycznych będzie z czasem przybywać. Każde następne utworzenie backupu na serwerze SRVA będzie traktowane jako przyrostowe. Można to sprawdzić na serwerze SRVB listując backupy: borg list ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srbv SRVB-etc-2022-09-10T13:57:47 Sat, 2022-09-10 13:57:49 [3d72c22d8d1a6d27e1556854c3065261cfc12cc2acd5fd2a052c4fccf173a57b] SRVB-www-2022-09-10T13:58:26 Sat, 2022-09-10 13:58:27 [95bc01266ef2a75a44ecdb2428239a2ab96a349ae584f0313f5196a70bb053ed] SRVB-etc-2022-09-15T04:22:11 Thu, 2022-09-15 04:22:11 [f7ecc4fd1b440c4046ed3fd9c25bdc9ade83b437989cf8fd421e930fae41a2be] SRVB-www-2022-09-15T04:22:18 Thu, 2022-09-15 04:22:18 [3254377dd11ff0e100041715205e00faf36b3da47a7670456d0b46b4bdbea3a1] oraz porównując ich zawartość: borg diff ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srbv::SRVB-etc-2022-09-10T13:57:47 SRVB-etc-2022-09-15T04:22:11 **Odzyskiwanie kopii zapasowych** Na serwerze SRVB utworzono punkt montowania: mkdir /root/restore oraz zamontowano zdalne repozytorium borga: borg mount ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srvb /root/restore/ Można przeglądać ten katalog jak każdy inny oraz kopiować z niego pliki. borgfs on /root/restore type fuse (ro,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions) Po zakończeniu prac z odzyskiwaniem plików można odmontować repozytorium: borg umount /root/restore/ **Możliwe problemy** * Podczas przeglądania zawartości kopii zapasowej w katalogu z repozytorium tworzony jest plik w formacie json o nazwie //lock.roster//. Jeżeli nie zostanie usunięty, kolejne kopie zapasowe nie będą wykonywane. Należy go wówczas ręcznie usunąć, lub zmienić jego nazwę. ** Monitorowanie Borga ** Skrypty do monitorowania Borga za pomocą nrpe i Nagoisa: #!/usr/bin/bash repo=$1 wynik=`borg check -v -p /mnt/data/backup/zapas/pliki/${repo} &> /mnt/data/backup/zapas/stan/${repo}` chmod 644 /mnt/data/backup/zapas/stan/${repo} #!/usr/bin/bash if [[ `find /mnt/data/backup/zapas/ -type f -name lock.roster` ]] ; then echo 'CRITICAL lock exists' exit 2 else echo 'OK no lock file' exit 0 fi #!/usr/bin/bash repo=$1 if [[ `cat /mnt/data/backup/zapas/stan/${repo}` == *'Archive consistency check complete, no problems found.'* ]] ; then echo "OK backup ${repo}" exit 0 else echo "CRITICAL backup ${repo} not consistent" exit 2 fi **Wykluczanie katalogów** Wykluczanie katalogów //updater//, na przykładzie katalogu z plikami aplikacji Nextcloud: borg create ssh://zapas@SRVA:22/mnt/data/backup/zapas/pliki/srvb::{fqdn}-www-{now} /var/www --exclude /var/www/nextcloud/public_html/data/updater-* Wykluczanie katalogów technicznych aplikacji znacznie zmniejsza poszczególne kopie przyrostowe. ==== MariaDB ==== Najprostszy zrzut bazy MariaDB: mysqldump bazadanych | bzip2 > bazadanych-$(date +%F).db.bz2 Skrypty do sprawdzenia kopii baz danych dla nrpe i Nagiosa: #!/usr/bin/bash baza=$1 if [[ -e /mnt/data/backup/zapas/bazydanych/${baza}-$(date +%F).db.bz2 ]] ; then echo "OK backup bazy ${baza}" ; exit 0 else echo "CRITICAL backup bazy ${baza} nie istnieje" exit 1 fi #!/usr/bin/bash baza=$1 size=$2 if [[ `du /mnt/data/backup/zapas/bazydanych/${baza}-$(date +%F).db.bz2 | cut -d$'\t' -f1` -ge ${size} ]] ; then echo "OK backup bazy ${baza}" ; exit 0 else echo "CRITICAL backup bazy ${baza} jest za maly" exit 1 fi