zfs send / zfs receive ====================== Ces deux commandes s'utilisent avec des **snapshots**. local ----- En admettant un serveur avec deux pools (*baie1* et *baie2*) : .. code-block:: bash 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 : .. code-block:: bash # 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 : .. code-block:: bash # 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 : .. code-block:: bash zfs create -p -o mountpoint=/data baie1/data * sur *data6* (source) Création du snapshot, envoi via ssh : .. code-block:: bash 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) .. code-block:: bash 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 :term:`RAM` de 4 GiB (*-m 4G*), écoutant la machine source en ipv4 (*-I 172.16.2.32:1030*). * sur *baie1* de *data6* (source) .. code-block:: bash 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) .. code-block:: bash mbuffer -4 -v 1 -s 128k -m 4G -I 172.16.2.32:1030 | zfs receive -d baie1 * sur *baie1* de *data6* (source) .. code-block:: bash 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 ---------------------------------------------------- .. todo:: exemple de sauvegarde et restauration depuis un serveur distant