Wydrukuj tę dokumentację Pokaż jako slajdy

Backup za pomocą ZFS

Za pomocą zfs send oraz zfs receive (zfs recv) można dość szybko wykonać backup całej partycji ZFSowej. Podstawą jest wykonania snapshota.

Skrypt

# wykonanie snaphota wraz ze wszystkimi "dziećmi"
zfs snapshot -r storage/imap@pelny

# wyslanie snapshota do pliku GZip
zfs send -Rv storage/imap@pelny | gzip -c > /opt/_imap_full.zfs.gz

# rozpakowanie "snapshota" w miejscu docelowym:
gunzip -c /opt/_imap_full.zfs.gz | zfs recv -vdeusF  sda

Uprawnienia dla zwykłego użytkownika

Można również wykonać zfs send oraz zfs receive poprzez SSH. Trzeba tylko upoważnić użytkownika do wykonywania operacji na partycji ZFS:

zfs allow -u <user> create,receive,rename,mount,share,send sda/backup/imap

Wykorzystanie mbuffer

Dzięki wykorzystaniu mbuffer, to można całość spokojnie przesyłać przez sieć:

# dla sieci Internet
export _MBUF="-s 256k -m 512M"

# dla sieci LAN
export _MBUF="-s 256k -m 1G"

# send:
#   -R r/ownie/z wszystkie ew. dzieci danego zfs-a
#
# receive
#   -d u/zyj ca/lego snapshota, ale bez pierwszego cz/lonu (bez nazwy pool-i)
#   -e u/zyj tylko ostatniego cz/lonu snapshota (jak w opisie dla -d)
#   -u nie montuj automatycznie
#   -s mo/zliwo/s/c wznowienia wysy/lania, gdyby wyst/api/ly b/l/edy
#   -F wymu/s rollback przed uruchomieniem zfs recv
#
zfs send -R storage/imap@pelny | mbuffer $_MBUF 2>/dev/null | ssh -c aes128-ctr __user__@server2 "mbuffer $_MBUF | zfs receive -deusF sda/backup/imap"

/!\ UWAGA /!\ Jeżeli ssh wymaga podania hasła, to komunikat w celu jego wpisania zostanie przykryty przez komunikaty mbuffer o przesyłaniu danych z prędkością 0/0. Tak więc najlepiej jest wykonać kopiowanie z wykorzystaniem kluczy (bez hasła).

Algorytmy szyfrowania SSH

Dodanie odpowiedniego algorytmu szyfrowania (patrz odnośniki poniżej) znacznie przyspieszy przesyłanie dużego backupu. Niemniej jest to algorytm, który trzeba dopisać do konfiguracji demona OpenSSH:

Ciphers +aes256-gcm@openssh.com

Oczywiście po zmianach należy wykonać restart demona:

service openssh restart

Jeżeli serwer (procesor) wspiera obsługę AESNI, to warto wgrać stosowny moduł:

kldload aesni

Źródła w sieci internet


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.