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