ZFS snapshot - replikace prirustkovych snapshotu

Marián Černý majo-users-l at cerny.sk
Tue Dec 1 14:27:20 CET 2015


Jan Dušátko wrote:

> jde mi o nasledujici.
> mam zfspool POOL a v nem treba 10 volumu VOL1, VOL2... VOL10
> 1) Na zacatku udelam snapshot celeho souboroveho systemu
> 2) Denne delam snapshoty pres cely pool (udela i volume)
> 3) Chci prenest jenom rozdilova data na zalozni server, ktery nedela
> nic, jen ceka

Princip je teda jednoduchy:
1) Na zaciatku urobit plnu zalohu
2) Denne urobit inkrementalnu zalohu medzi vcerajsim snapshotom a dnesnym snapshotom

Trosku ma metu tie volumy. V terminologii ZFS je volume block device. Napriklad volume pre swap. Ale nikdy som ich nepouzil. Tak neviem, ci myslis block device, alebo obycajny filesystem. Ale z pohladu zalohovania by to malo byt jedno.

> Zkousel jsem (pro zkopirovani posledniho existujiciho snapshotu)
> /sbin/zfs send -Rv `/sbin/zfs list -t snapshot | /usr/bin/grep
> "/POOL at VOL" | /usr/bin/cut -f1 | /usr/bin/cut -d " " -f1 | /usr/bin/tail
> -n 1` > /backup/zfs/zfsdata.pool

Chapem spravne, ze to ma zalohovat posledny snapshot *jedneho* volume/filesystemu?
Trosku ma metie to “/POOL at VOL”… cakal by som “POOL/VOL”.

Ten zapis v backticks by sa dal skratit na:

    zfs list -r -t snapshot -H -o name POOL/VOL | tail -n 1

-H - scripting mode (tabulatory namiesto medzier a bez hlavicky)
-o - vypisuje iba menovane property

Teraz su tri moznosti ako zalohovat, ktore ma napadaju a mam vyskusane:

1) Jednoduche zalohovanie, ako som popisoval predtym. Na zaciatku sa pouzije jednoduche `zfs send snapshot` a potom inkrementalne `zfs send -i snapshot1 snapshot2`. Pozeram, ze predtym som tam mal chybu, vypadlo mi to -i:

    zfs send pool/path at daily_2015-11-26 | ssh backup zfs receive pool2/path2
    zfs send -i @daily_2015-11-26 pool/path at daily_2015-11-27 | ssh backup zfs receive pool2/path2

alebo

    zfs send pool/path at daily_2015-11-26 | ssh backup zfs receive pool2/path2 at 2015-11-26
    zfs send -i @daily_2015-11-26 pool/path at daily_2015-11-27 | ssh backup zfs receive pool2/path2 at 2015-11-27

2) Zalohovat “rekurzivne” pomocou -R. Inkrementalne potom pomocou -R -I. To zalohuje vsetky descendant file systems - vsetky snapshoty, clones, rekurzivne pod-filesystemy a dokonca i properties. Pri prijimani je vhodne potom mat prepinac -u, aby sa automaticky nenamontovali prenasane filesystemy, pretoze sa prenasaju i properties a teda i mountpoint a ked sa takto zalohuje /, alebo /usr, tak to potom konci vytuhnutim systemu. -I zabezpeci, ze sa zalohuju i intermediary snapshots.

    zfs send -R pool/path at daily_2015-11-26 | ssh backup zfs receive pool2/path2
    zfs send -R -I @daily_2015-11-26 pool/path at daily_2015-11-27 | ssh backup zfs receive -u pool2/path2

Obcas je v takomto pripade potreba pouzit u zfs receive prepinac -F. Ten robi rollback filesystemu na posledny snapshot, takze ked je zaloha namontovana a zmeni sa, tak to revertne. Treba si davat pozor, ze -F okrem toho maze vsetky snapshoty u zalohy, ktore neexistuju u zdroja. Takto je mozne ziskat identicke kopie filesystemov (rekurzivne) do posledneho snapshotu - napriklad sa tak da zalohovat cely pool. Mne sa na tom nepaci to, ze ked by mi nieco zmazalo vsetky snapshoty, tak sa zmazu i zo zalohy, takze to -F nepouzivam.

3) Zalohovat “rekurzivne" pomocou -R, ale inkrementalne zalohy pomocou -R -i (obdoba 2), ale -i namiesto -I). Funguje to rovnako, ale neposielaju sa intermediary snapshoty.

    zfs send -R pool/path at daily_2015-11-26 | ssh backup zfs receive pool2/path2
    zfs send -R -i @daily_2015-11-26 pool/path at daily_2015-11-27 | ssh backup zfs receive -u pool2/path2

Takto to robim ja. Na zdroji robim hodinove, denne aj mesacne zalohy. Na backup prenasam iba denne zalohy. Keby som pouzil -I, tak sa mi budu prenasat i hodinove. Na backupe si potom mazem snapshoty, ako potrebujem. Napriklad po uvodom skopirovani je mozne vsetky snapshoty okrem posledneho zmazat.

> Bohuzel se mi prenasel vzdy cely volume.

Cele sa to musi preniest uplne na zaciatku. Potom zfs send -i alebo -I prenasa uz iba inkrementalne.

> Pokud jsem dal zfs send a zfs receive, zarvalo mi to na nejake chyby.


Je jedno, ci sa urobi zfs send do suboru a receive potom zvlast zfs receive z toho suboru, alebo naraz zfs send | zfs receive.

> Moje idea byla v hodinovych intervalech prenaset rozdily pro pripad
> necekane situace. Cilem je mit naprosto identicke prostory.

Naprosto identicke prostory je najlepsie pomocou toho `zfs send -R -I | zfs receive -F` v pripade, ze nevadi necekana situace, ze niekto zmaze stare snapshoty.

No a na zaver este poznamka, ze ZFS je zlozite a moze sa teoreticky stat, ze vo filesysteme vznikne chyba, ktora sa pomocou zfs send | zfs receive prenesie aj na backup… v najhorsom pripade clovek zostane s nenamountovatenymi filesystemami aj na backupe. Zatial sa mi to nestalo.

Marian




More information about the Users-l mailing list