SD Karta s BTRFS záloha?


#1

Je možné nějak šikovně provést zálohu celé SD karty zmigrované na BTRFS ze které se spouští systém v Turris 1.0 ? a jakým způsobem to nějak šikonvně obnovit ? Chtěl bych mít zálohu celého obsahuje SD karty včetně všeho obsahu a LXC kontejneru tak abych ji mohl v případě že odejde snadno obnovit na novou. Ideálně naplánovat tak aby se zálohovala denně na připojený hdd nebo flash disk. Jakým způsobem provést zálohu včetné obou partition do tgz a jakým způsobem to pak jednoduše obnovit rozbalit na nové kartě ?


#2

Není potřeba ukládat celý obraz karty, stačí uložit příslušný snapshot. Tedy například:

# schnapps mount <number>
# tar czf /path/to/backupfile.tgz . -C /mnt/snapshot-@<number>
# umount /mnt/snapshot-@<number>
# rmdir /mnt/snapshot-@<number>

Při případné obnově do nové SD karty stačí reprodukovat postup migračního skriptu, tedy vytvořit na SD kartě 2 oddíly, první typu VFAT, druhý typu BTRFS. Pak v BTRFS oddílu vytvořit subvolume jménem @ a do něj rozbalit zálohu. Nakonec je potřeba zkopírovat z podadresáře boot uvnitř zálohy soubory fdt a zImage do kořene VFAT oddílu.


#3

Díky za rychlou odpověď, tedy v případě zničení SD karty bych asi znovu spustil migrační skript a pak nabootovat z nově migrované SD karty. Moc jsem nepochopil vytvoření subvolume. Bylo by možné uvést nějakou posloupnost příkazů také pro obnovu ? Díky moc!


#4

No vida, to mě nenapadlo, to je vlastně ještě lepší nápad ;). Čili vložit novou SD kartu a provést normální migraci podle skriptu jako obvykle. Pak založit na btrfs nový subvolume a rozbalit do něj zálohu a nakonec zavolat schnapps rollback k přechodu na nový subvolume:

# mkdir /tmp/btrfs
# mount /dev/mmcblk0p2 /tmp/btrfs/
# btrfs subvolume create /tmp/btrfs/@restore
# tar xzpf /path/to/backupfile.tgz -C /tmp/btrfs/@restore
# umount /tmp/btrfs
# schnapps rollback restore
# reboot

Netestoval jsem to, ale klidně to otestujte. Výhodou btrfs je, že se pak můžete vrátit ke snapshotu před rollbackem, takže nepřijdete o data :wink:


#5

Dnes ověřeno. Díky za návod. Jediná chybička je v příkazu:
tar czf /path/to/backupfile.tgz -C /mnt/snapshot-@

Chybí tam hvězdička na konci :slight_smile:
tar czf /path/to/backupfile.tgz -C /mnt/snapshot-@ *


#6

Nemá tam být hvězdička, ale tečka (hvězdička expanduje obsah aktuálního adresáře v shellu, to v kombinaci s přepínačem -C nechceme). Opraveno, díky.


#7

Tak jsem si zkusil udělat snapshot a zazálohovat ho na externí disk, ale vždy skoční tar chybovou hláškou :

root@xxxxx:/home/xyxyx# tar czf /mnt/nas/snapshots_backups/sys_snap_backup2.tgz . -C /mnt/snapshot-@19/
tar: read error: Input/output error

zkoušel jsem to 2x a pokaždé stejně a vytvořený soubor má stejnou velikost - snad bude OK - to zjistím až vyměním kartu …

předpokládám, že chybu způsobuje chyba v BTRFS, protože se mi pravidelně v logu objevuje :
warning kernel[]: [209533.996700] BTRFS warning (device mmcblk0p2): csum failed ino 20739 off 0 csum 3260122917 expected csum 763398129

ta chyba je vlastně důvod, proč chci tu kartu zkusit vyměnit …


#8

Ano, tohle skutečně vypadá na vadnou SD kartu. Teď jsem to zkoušel u sebe a postup prošel bez problému.


#9

Díky za potvrzení … ta karta je tam od doby co Turris 1.0 mám tak už má asi odslouženo :slight_smile: ukládala se na ni databáze Domoticzu, Majordoma, logy, data z collectd apd. prostě vše co jsem chtěl aby přežilo restart …


#11

Dobrý den, vytvořil jsem si tento skript, ale nedokážu přijít na to, jak správně naplnit proměnnou number. Respektive nyní to funguje, dokud bude číslo snapshotu větší jak 9 a menší než 100. Poté tedy provedu opravu na cut -c 3-5.

Nešlo by to nějak jinak?

#!/bin/sh
descr="BackupSD_$(date +%Y-%m-%d_%H:%M:%S)"
schnapps create $descr
number=$(schnapps list | grep $descr | cut -c 4-5)
schnapps mount $number
cd /mnt/snapshot-\@$number
tar -czf /mnt/System/Backup_Turris/Snapshots/$descr.tgz . -C /mnt/snapshot-\@$number
cd /
umount /mnt/snapshot-\@$number
rmdir /mnt/snapshot-\@$number

#12

Nevím jestli si zbytečně nekomplikujete život, víte že schnapps umí export/import?
Stačí dát schnapps list vybrat číslo a pak schnapps export číslo a cesta.
Mrkněte na schnapps --h, píšu to z hlavy, ale tak nějak to je. A funguje to.


#13

Jo tak super, tohle fakt funguje :slight_smile: Takže skript pro cron zredukován na:

#!/bin/sh
schnapps export /mnt/System/Backup_Turris/Snapshots/

Udělá to aktuální stav, zabalí to rovnou do tar.gz a v názvu je i datum :slight_smile:

Díky