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ě ?
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.
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!
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
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
tar czf /path/to/backupfile.tgz -C /mnt/snapshot-@ *
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.
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 …
Ano, tohle skutečně vypadá na vadnou SD kartu. Teď jsem to zkoušel u sebe a postup prošel bez problému.
Díky za potvrzení … ta karta je tam od doby co Turris 1.0 mám tak už má asi odslouženo 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 …
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
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.
Jo tak super, tohle fakt funguje 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
Díky