====== 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