„Menteni, menteni, menteni!”
Mondta Lenin elvtárs 😀
Két fajta ember van: az egyiknek már volt adatvesztése, a másiknak majd lesz.
Velem 20 éve történt, amikor kiesett a kezemből a minden adatomat tartalmazó winchesterem. Leszakadt az író/olvasó fej, esélyem se volt megmenteni az adatokat. Akkor döntöttem el, hogy ezt többé nem szeretném átélni. Ugorjunk az időben, megépítettem a saját NAS-omat, benne 3 db HDD RAID5-ben. Ez már véd a diszk hibák ellen, de ne feledjük, a RAID nem mentés! Ezen a gépen elkülönítettem egy kötetet a mentésnek. Mentésre pedig az rsnapshotot használtam. Ez gyakorlatilag egy fapados deduplikáció.
Ha ellopják a NAS-t visznek mindent…
El se kell lopni, elég, ha becsap a villám a közelünkben, és a túlfeszültség kiégeti mindhárom merevlemezt 🙁
Történt egyszer, hogy a legjobb barátomtól kaptam ajándékba egy első generációs RPI-t. Nem mai csirke, kb 10 éves, akkor sem volt egy kapkodó idegbeteg. Sokáig tanakodtam, hogy mire tudnám használni.
Aztán beugrott. Ebből fogok építeni mentő szervert. Volt egy felesleges 2 TB-os USB-s külső merevlemezem. Letöltöttem a hozzá passzoló oprendszert (raspbian), ami egy Debian, erre optimalizálva.
Feltelepítettem a már bevált rsnapshotot, és, hogy biztonságban közlekedjenek az adatok, egy openvpn klienst is. Az esetleges diszk ellopás ellen pedig merevlemez titkosítással védekeztem (luks). A VPN-nek köszönhetően bárhová elviszem a „cuccot”, be fogok rá tudni lépni ssh-n, nem kell tudnom az aktuális IP címét.
A lehető legbiztonságosabb helyre helyeztem, bevittem a munkahelyem szerverszobájába. Oda csak 3-4 kollégám tud belépni, kamerával megfigyelt, klimatizált helyiség 🙂 És 30 km-re van tőlem, így, ha itthon mindenem megsemmisül, lesz egy másolat egy távoli helyen!
Miért most írok cikket egy ~10 évvel korábban összerakott rendszerről?
Mert úgy egy hónapja megadta magát a merevlemeze, ezért hazahoztam. Élt 12 évet, ami nem is rossz egy 0-24-ben üzemelő diszktől.
Az igazsághoz hozzá tartozik, hogy időközben beleszerettem az RPI-be, és később vettem két 3B modellt is. Az egyikből media playert csináltam a libreelec segítségével, a másik felváltotta a régi rpi-t. A nyugdíjas rpi bekerült a fiókba, ha kitalálok neki valami feladatot, újra elő fogom venni.
Térjünk vissza az eredeti témához, hazahoztam a rossz diszket és az rpit. Volt a fiókban egy 3 TB-os diszk, vettem hozzá egy külső dobozt.
Minek vettem új dobozt, ha már volt egy nekem?
Mert az elromlott Verbatim doboz nem hajlandó nagyobb diszkkel működni!
Amíg kihozta a futár az új USB3-as diszk dobozt, lementettem az SD kártyáról a /etc mappát. Letöltöttem a legfrissebb oprendszert (még csak Debian 11 alapú!), feltettem az SD kártyára, és elkezdtem a telepítést, konfigurálást. Ebben nagy segítségemre volt a raspi-config:
A konfiguráláshoz nincs szükség a külső merevlemezre, szóval nekiálltam a telepítésnek.
A telepítés és konfigurálás gyerekjátéknak ígérkezett, mert 2,5 éve elkészítettem a saját ansible role-omat, ami minden általam használt rsnapshot alapú mentő szerveremet kompletten beállítja.
Aztán jött Murphy, és beleszart a levesembe
Annó az ansible role-omat három operációs rendszerre készítettem el: CentOS 7, Red Hat 8, és Debian 10.
Az ansible role első feladata a szükséges szoftverek feltelepítése. És mint kiderült, kikerült a Debian 11-ből az rsnapshot. Előkaptam a kedvenc keresőmet, és elkezdtem kutatni. Találtam egy hibajegyet, ahol erről fojt a diskurzus. Az a lényeg, hogy a Debian csapata kivette a disztribúcióból az rsnapshot csomagot. Találtam a neten megfelelő csomagot (rsnapshot_1.4.5-1~bpo11+1_all.deb), kézzel feltettem.
Újra lefuttattam az ansible role-t, volt még 1-2 döccenő, ami csak abból fakadt, hogy nem volt felkészítve Debian 11-re. Miután ezt pótoltam, szépen lefutott, és mindent beállított. Pár nap múlva megjött a doboz, beleraktam a porosodó diszkemet. Megcsináltam a titkosítást:
# cryptsetup --verbose --cipher twofish-xts-plain64 --key-size 256 --hash sha256 --verify-passphrase luksFormat /dev/sda1
Tettem rá fájlrendszert (ext4), majd felcsatoltam a végleges helyére /BACKUP .
Jöhet az első próba szinkronizálás.
Egy kis rsnapshot gyorstalpaló: az rsnapshot a háttérben rsync-et használ, ami úgy működik, hogy az első másolás alkalmával mindent, következő alkalommal viszont csak a különbséget másolja át, ezzel időt, és sávszélességet spórol. A másik okossága pedig a hard linkekkel való játék, azaz, ha két mentés között nem változott a fájl, akkor a hard link miatt a másolat nem fog helyet foglalni!
Alig telt el pár perc, elkezdtek a hibaüzenetek ömleni a konzolomra. Beugrott, hogy miért volt a fiók alján ez a diszk. Tele volt szektor hibával 🙂
Nem estem kétségbe, a gugli erre is adott egy ötletet, végig kell vizsgálni a teljes diszket, és a hibás szektorokat ki kell zárni, így ha szerencsém van, évekig el fog ketyegni a már nem fiatal diszk. Ezt a parancsot használtam:
# e2fsck -v -p -c /dev/mapper/luks-b185c834-1c92-44ed-aa15-39e19bbb3cf4
Nem kicsi a diszk, nem túl gyors az rpi usb2 csatlakozója, így magára hagytam, valamikor hajnalban fejezte be. Azóta is hibátlannak látszik, a logok alapján nem keletkezett újabb bad sector.
Gondolhatjátok, hogy keresem a bajt, szándékosan szívatom magam
Mint említettem, ez a mentés mentése, így nem nagy katasztrófa, ha pár évente ki kell cserélnem a diszket, pár nap alatt megvan, ráadásul nem is kerül semmibe, mindig akad itthon 1-1 ehhez hasonló hdd.
Ha még nem zártad be ezt a cikket, megmutatom az rsnapshot.conf fájlomat:
msandor@rpi3:~ $ cat /etc/rsnapshot.conf
################################################################
# PLEASE BE AWARE OF THE FOLLOWING RULE: #
# This file requires tabs between elements #
################################################################################
config_version 1.2
snapshot_root /BACKUP/.snapshots/
cmd_cp /bin/cp
cmd_rm /bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
cmd_du /usr/bin/du
retain daily 50
retain monthly 12
verbose 3
loglevel 2
logfile /BACKUP/.snapshots/log/rsnapshot.log
lockfile /var/run/rsnapshot.pid
rsync_long_args --delete --numeric-ids --relative --delete-excluded -P -z --skip-compress=7z/avi/bz2/deb/gz/iso/jpeg/jpg/mov/mp[34]/ogg/rpm/tbz/tgz/zip
exclude lost+found
exclude *.vdi
exclude *.vmdk
sync_first 1
use_lazy_deletes 1
#################################
# BACKUP POINTS / SCRIPTS #
# HONNAN HOVÁ #
#################################
backup /etc/ localhost/
backup /root/ localhost/
backup /var/spool/cron/ localhost/
backup /var/lib/dpkg/ localhost/
backup /home/ localhost/
backup rsync://rpi3@192.168.5.250/BACKUP/.snapshots/.sync/ NAS/ +rsync_long_args=--password-file=/root/rsyncd.secrets.rpi3
Az aljáról töröltem néhány sort, a lényegen nem változtat, viszont nem publikus.
A legfontosabb tudnivalót a konfig is írja, mindent tabulátorral kell elválasztani egymástól, nem szóközzel!
Szerintem a konfig magáért beszél, de 1-2 dolgot azért kiemelnék:
- a „
retain daily 50
” azt jelenti, hogy 50 napi mentést tart meg (daily.0 -> daily.49) - a „
retain monthly 12
” azt jelenti, hogy 12 havi mentést tart meg (monthly.0 -> monthly.11) - az „
exclude
„-al lehet megadni, hogy milyen kiterjesztésű fájlokat hagyjon ki, soronként egyet
A mentett könyvtár struktúra így néz ki 2 szint mélységig (az érzékeny neveket kicsillagoztam):
msandor@rpi3:~ $ tree -a -L 2 /BACKUP/.snapshots/daily.0
/BACKUP/.snapshots/daily.0
├── localhost
│ ├── etc
│ ├── home
│ ├── root
│ └── var
└── NAS
├── **********
├── **********
├── MySQL
├── **********
└── .snapshots
11 directories, 0 files
Hogyan csinálom a napi mentést?
Cronból futtatok egy kis scriptet, ami levelet küld nekem, ha végzett, de ez benne a lényeg, az első sor csinálja a szinkronizálást, a második a napi rotálást, a harmadik a havi rotálást:
# rsnapshot -V sync
# rsnapshot daily
# rsnapshot monthly
A ‘-V” kapcsolót a bővebb logolás miatt használom, nem kötelező.
Ennyi az egész!
Néhány ezer forintból és maradék, felesleges alkatrészekből lehet csinálni egy egyszerű, de nagyon hasznos mentő szervert. Ha beállítod, hogy a Debian frissítéseket automatikusan feltelepítse, akkor hónapokig feléje se kell nézni, teszi a dolgát. Miközben alig fogyaszt áramot. Nyugalmi állapotban az rpi 1,4 W-t fogyaszt, a merevlemez meg kb semmit, ugyanis, ha nem használom, leállítja a motort. Szinkronizálás közben a diszk kb 8-10 W-ot kér (becsült adat), az rpi ekkor is beéri 2W-al.
Végezetül pár fotó a cuccról
Előre is elnézést kérek az igénytelennek látszó szigszalagos megoldás miatt, amíg garis a HDD doboz, nem akarom megfúrni, de legalább egyben tartja a két fő alkatrészt 😀
Nagyon szeretem a Rasspberry-ket, jó sok mindenre lehet használni és ez a leírás is egy új 5letet mutat be.
Tetszett, hogy hibás HDD-t használtál és a titkosítás bekapcsolása is előremutató a biztonság szempontjából.