Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
backup:zfs [2020/04/26 10:55] – [Sauvegarder] david | backup:zfs [2022/03/10 21:45] (Version actuelle) – [Nettoyer] david |
---|
| |
* ''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 zroot/BCK/S |
</code> | </code> |
| |
* ''-c'' pour compresser ce qui peut l'être | * ''-c'' pour compresser ce qui peut l'être |
* ''-D'' pour utiliser la dé-duplication, c'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 particulier, un //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 ==== |
| |
<code bash> | <code bash> |
$ zfs destroy -pr 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 fichiers. Pour 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 ===== |
* [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|Le manuel ]]. | * [[https://www.freebsd.org/doc/handbook/zfs-zfs.html|Le manuel ]]. |
</alert> | </alert> |
| |
| |