zfs send / zfs receive

Ces deux commandes s’utilisent avec des snapshots.

local

En admettant un serveur avec deux pools (baie1 et baie2) :

zfs snapshot baie1/data@transfert
zfs send -veLR baie1/data@transfert | zfs recv -d baie2
send -v : verbeux
send -e : flux plus compact, profitant de l'option "embedded_data" des pools
send -L : flux avec des blocs plus large (> 128KiB)
send -R : flux de réplication, incluant la descendance du système de fichier (propriétés, snapshots, filesystems enfants et clones)

recv -d : ne pas tenir compte du premier élément du filesystem (ici, "baie1") lors de la réception

distant, netcat

En admettant un serveur source (localhost) et un serveur destination (IP: 192.168.0.7).

  • Création d’un snapshot sur le serveur source, puis envoi, via netcat, vers le serveur destination :

# sur serveur source
zfs snapshot rpool@20230404
zfs send rpool@20230404 | nc 192.168.0.7 12224
  • Ouverture du port correspondant sur le serveur destination, et réception du flux :

# sur 192.168.0.7
nc -l 12224 | zfs receive tank/backup/zfs/host/rpool

distant, ssh

Transfert entre data6 (serveur source, IP: 172.16.2.32) et data12 (serveur destination, IP: 172.16.2.34) du volume geoflow.

  • sur baie1 de data12 (destination)

Création du volume de réception :

zfs create -p -o mountpoint=/data baie1/data
  • sur data6 (source)

Création du snapshot, envoi via ssh :

zfs snapshot baie1/data/geoflow@transfert
zfs send -vP baie1/data/geoflow@transfert | ssh root@data12 zfs receive -d baie1
# ou
zfs send -vP baie1/data/geoflow@transfert | ssh root@172.16.2.34 zfs receive -d baie1
send -v : verbeux
send -P : Affiche des informations détaillées sur le flux (progression)

distant, mbuffer

Transfert entre data6 (serveur source, IP: 172.16.2.32) et data12 (serveur destination, IP: 172.16.2.34) du volume geoflow, en utilisant mbuffer.

mbuffer est un tampon pour flux réseau.

  • sur baie1 de data12 (destination)

zfs create -p -o mountpoint=/data baie1/data
mbuffer -4 -v 1 -s 128k -m 4G -I 172.16.2.32:1030 | zfs receive -d baie1

Création du volume d’accueil, et lancement en attente d’un démon mbuffer, avec un tampon RAM de 4 GiB (-m 4G), écoutant la machine source en ipv4 (-I 172.16.2.32:1030).

  • sur baie1 de data6 (source)

zfs snapshot baie1/data/geoflow@transfert
zfs send baie1/data/geoflow@transfert | mbuffer -4 -v 1 -s 128k -m 4G -O 172.16.2.34:1030

On crée le snapshot, qu’on envoie ensuite au mbuffer local, qui va le transmettre au mbuffer distant (-O 172.16.2.34:1030) sur la machine destination.

Si le transfert a été long (supérieur à 24h, c’est le cas ici), on finira avec un envoi incrémental des derniers snapshots :

  • sur baie1 de data12 (destination)

mbuffer -4 -v 1 -s 128k -m 4G -I 172.16.2.32:1030 | zfs receive -d baie1
  • sur baie1 de data6 (source)

zfs snapshot baie1/data/geoflow@final
zfs send -I baie1/data/geoflow@transfert baie1/data/geoflow@final | mbuffer -4 -v 1 -s 128k -m 4G -O 172.16.2.34:1030
send -I : envoi incrémental, comprenant tous les snapshots entre "@transfert" et "@final"

Sauvegarde et restauration depuis un serveur distant

À faire

exemple de sauvegarde et restauration depuis un serveur distant