backup:zfs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
backup:zfs [2020/05/07 07:48] – [Nettoyer] davidbackup:zfs [2024/03/30 16:13] (Version actuelle) – [Sauvegarder] david
Ligne 34: Ligne 34:
  
 Préparez votre hôte <label type="success">D</label> pour recevoir la sauvegarde. Préparez votre hôte <label type="success">D</label> pour recevoir la sauvegarde.
 +
 +==== Disque ====
 +
 +Si vous avez un disque dédié à la sauvegarde, préparez le:
  
 <code bash> <code bash>
-$ zfs create zroot/BCK +zpool create svgd /dev/da0 
-$ zfs create zroot/BCK/S +</code> 
-$ zfs set canmount=off zroot/BCK/S+ 
 +==== Dataset ==== 
 + 
 +Créer vos //dataset//: 
 + 
 +<code bash> 
 +$ zfs create svgd/BCK 
 +$ zfs create svgd/BCK/S 
 +$ zfs set canmount=off svgd/BCK/S
 </code> </code>
  
 La dernière ligne vous assure que votre sauvegarde ne sera jamais remontée automatiquement, ce qui va éviter de sérieux problèmes si la sauvegarde contient des points de montage de la hiérarchie standard, hier(7). Ce qui est en général le cas. La dernière ligne vous assure que votre sauvegarde ne sera jamais remontée automatiquement, ce qui va éviter de sérieux problèmes si la sauvegarde contient des points de montage de la hiérarchie standard, hier(7). Ce qui est en général le cas.
  
 +=== Chiffrement ===
 +Vous pouvez aussi chiffrer le disque, pour éviter que votre disque soit lisible par d'autres:
 +<code>
 +zfs create -o encryption=aes-256-gcm -o keyformat=passphrase  svgd/BCK
 +</code>
 +
 +=== Permissions  ===
 Nous allons faire passer le flux de données au travers d'un tunnel //ssh//, nous allons avoir besoin: Nous allons faire passer le flux de données au travers d'un tunnel //ssh//, nous allons avoir besoin:
  
Ligne 49: Ligne 68:
  
 <code bash> <code bash>
-$ zfs allow -u david create,mount,destroy,receive zroot/BCK/S+$ zfs allow -u david create,mount,destroy,receive svgd/BCK/S
 </code> </code>
  
 +==== options ====
  
 +Comme ce //dataset// est dédié à la sauvegarde, utilisez des paramètres appropriés:
 +
 +<code bash>
 +$ zfs set -o compression=lz4 svgd/BCK/
 +$ zfs set copies=2 svgd/BCK/
 +$ zfs set atime=off svgd/BCK/
 +$ zfs set dedup=off svgd/BCK/
 +</code>
 ===== Sauvegarder ===== ===== Sauvegarder =====
  
Ligne 58: Ligne 86:
  
 <code bash> <code bash>
-$ zfs send -R zroot@maintenant | ssh -i my_id_rsa david@sauvegarde.D.net zfs recv -Fduv zroot/BCK/S+$ zfs send -R zroot@maintenant | ssh -i my_id_rsa david@sauvegarde.D.net zfs recv -Fduv svgd/BCK/S
 </code> </code>
  
   * ''my_id_rsa'' est  [[net::ssh|la clef SSH]] pour se connecter à <label type="success">D</label>.   * ''my_id_rsa'' est  [[net::ssh|la clef SSH]] pour se connecter à <label type="success">D</label>.
-  * ''-F'' va supprimer sur la cible les clichés qui ne sont plus sur la source.+  * ''-d'' va supprimer le nom du ''pool'' du chemin de la sauvegarde. 
 +  * ''-u'' ne pas monter le système sur la cible. 
 +  * ''-F'' va supprimer sur la cible les clichés qui ne sont plus sur la source. Ne fonctionne qu'avec ''-R''.
  
-Affinez et accélérer le transfert par +Affinez et accélérer le transfert par :
  
 <code bash> <code bash>
-$ zfs send -c -D -R zroot@maintenant | ssh -i my_id_rsa david@sauvegarde.D.net zfs recv -Fduv zroot/BCK/S+$ zfs send -c -R zroot@maintenant | ssh -i my_id_rsa david@sauvegarde.D.net zfs recv -Fduv svgd/BCK/S
 </code> </code>
  
   * ''-c'' pour compresser ce qui peut l'être   * ''-c'' pour compresser ce qui peut l'être
-  ''-D'' pour utiliser la -duplicationc'est à dire n'envoyer qu'une fois les blocs qui sont identiques.+ 
 +Selon les capacités de vos ''pool'', soit ''large_blocks'' et ''embedded_data'', autant sur la cible que sur la source: 
 + 
 +<code bash> 
 +root@popeye:~ # zpool get feature@embedded_data zroot 
 +NAME   PROPERTY               VALUE                  SOURCE 
 +zroot  feature@embedded_data  active                 local 
 +root@popeye:~ # zpool get feature@large_blocks zroot 
 +NAME   PROPERTY              VALUE                 SOURCE 
 +zroot  feature@large_blocks  enabled               local 
 +</code> 
 + 
 +vous pouvez ajouter les options ''-L'' et ''-e'' à la commande ''send''
 + 
 + 
 +<callout type="warning" icon="true"> 
 +Attention à ne pas activer certaines capacités dans l'unique but  d'accélérer le transfert. Consultez d'abord la documentation, zpool-features(7). 
 +\\ 
 +En particulierun //dataset// qui aurait des blocs de taille supérieurs à ''128K'' (paramètre ''recordsize'') autorisé par l'option ''large_blocks'' n'est pas pris en charge par le boot-loader. 
 +</callout> 
 + 
 +==== Précautions ==== 
 +Pour éviter des montages inattendus sur la machine cible, évitez de transférer les point de montages avec la sauvegarde 
 + 
 +  * '' zfs recv … -x canmount -x mountpoint '' 
 +ou 
 +  *'' zfs recv … -o canmount=off -x mountpoint '' 
 + 
 +Si vous avez autorisé le passage de la propriété ''canmount'' sur <label type="success">D</label>
 + 
 +==== Sauvegarde incrémentale ==== 
 + 
 +Une fois le premier cliché sauvegardé, vous allez pourvoir utiliser la sauvegarde incrémentale. 
 +\\ C'est à dire, faire une sauvegarde à partir de deux clichés. Typiquement, entre le cliché le plus récent que vous avez pris sur la source <label type="primary">S</label> et le dernier que vous avez envoyé à l'hôte <label type="success">D</label>, qui doit bien sûr toujours exister sur <label type="primary">S</label>
 +\\ Il suffit de donner ces deux clichés à ''send'' derrière l'option ''-i''
 + 
 +<code bash> 
 +zfs send -c -i zroot/dataset@${REMOTE_ZLAST} zroot/dataset@${LOCAL_ZLAST} | ssh user@D zfs recv -Fdu zfs/${REMOTE_POOL} 
 +</code> 
 + 
 +  - ''${REMOTE_ZLAST}'', cliché le plus récent transféré sur <label type="success">D</label>; 
 +  - ''${LOCAL_ZLAST}'' , cliché le plus récent pris sur <label type="success">S</label>
 + 
 +Une fois transféré, vous pouvez supprimer le cliché ''${REMOTE_ZLAST}'' de <label type="primary">S</label>, ''${LOCAL_ZLAST}'' prenant sa place. 
 + 
 +==== En cascade ==== 
 + 
 + 
 +L'option ''-R'' (//replicate//) donnée à ''zfs send'' va envoyer en cascade le ''dataset'' parent ainsi que ses enfants. 
 +Ça a un coté pratique, puisque vous n'aurez pas à définir un par un les éléments que vous voulez sauvegarder et qu'il est nécessaire pour que ''-F'' fonctionne. 
 +D'un autre coté, vous allez absolument tout sauvegarder, en particulier de nombreuses données dont vous n'aurez pas besoin ensuite, par exemple ''/usr/src'', ''/tmp'' et une partie des enfants de ''/var''
 + 
 +Par contre, si la machine contient des [[jails:zfs|jails]], vous allez sauvegarder non seulement ces dernières, mais aussi la base qui a servi à les construire.Sans parler de vos [[ports:poudriere|poudrières]]. 
 + 
 +<callout type="primary" icon="true"> 
 +Assurez vous par ailleurs que toutes vos [[https://www.freebsd.org/doc/handbook/zfs-term.html#zfs-term-clone|clones]] sont promus, en particulier ceux des [[jails:zfs#multiplier|jails]].\\ 
 +Sinon, attendez vous à un beau bordel.les clichés à l'origine des clones vont entrer en conflit avec ceux destinés à la sauvegarde. 
 +</callout> 
 + 
 +Bien entendu , Vous allez automatiser tout ça dans un script, n'est-ce pas 😉? 
 +Ce qui rend le ''send'' en cascade inutile. 
 + 
 +Choisissez ceux que vous allez sauvegarder et intégrez les dans une boucle.
  
 ==== Nettoyer ==== ==== Nettoyer ====
Ligne 80: Ligne 172:
 $ zfs destroy  -vr zroot@%vieux  $ zfs destroy  -vr zroot@%vieux 
 </code> </code>
 +==== Sauvegarde dans un fichier ====
  
-Utilisé avec l'option ''-F'' de ''receive'', la cible sera aussi nettoyée.+Vous pouvez tout simplement sauvegarder vos //dataset// dans des fichiersPour les transférer ensuite à votre guise sur un autre support:
  
 +<code bash>
 +zfs send -c -e ${dataset}@${LAST} > /bck/${ZFILE}.bck
 +</code>
 +
 +Avec:
 +<code bash>
 +ZFILE=`echo "${dataset}" | sed 's+\/+_+g'`
 +</code>
 +
 +par exemple, pour remplacer les séparateurs.
  
 ===== En savoir plus ===== ===== En savoir plus =====
Ligne 90: Ligne 193:
   * [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|Le manuel ]].   * [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|Le manuel ]].
 </alert> </alert>
 +
 +
  • backup/zfs.1588837716.txt.gz
  • Dernière modification : 2020/05/07 07:48
  • de david