Outils pour utilisateurs

Outils du site


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
zfs [2017/09/29 18:44]
luc
zfs [2018/10/13 20:32] (Version actuelle)
Ligne 11: Ligne 11:
 En revanche, j'ai eu besoin de quelques commandes pour mettre en place mon système et j'ai eu du mal à les trouver, d'où cette section sur zfs : comment utilise-t-on en pratique zfs sur une debian ? En revanche, j'ai eu besoin de quelques commandes pour mettre en place mon système et j'ai eu du mal à les trouver, d'où cette section sur zfs : comment utilise-t-on en pratique zfs sur une debian ?
  
-==== Installation ====+===== Installation de zfs (sur debian 9) =====
  
 Il y a des petites histoires d'incompatibilités de licences entre zfs (CDDL) et linux (GPL), d'où un processus un peu tordu.\\ Il y a des petites histoires d'incompatibilités de licences entre zfs (CDDL) et linux (GPL), d'où un processus un peu tordu.\\
Ligne 17: Ligne 17:
 Il faut autoriser le dépot ''contrib'', puis installer les paquets ''linux-headers-xx'' adaptés, puis ''zfs-dkms''. Il faut autoriser le dépot ''contrib'', puis installer les paquets ''linux-headers-xx'' adaptés, puis ''zfs-dkms''.
  
 +===== zpool =====
  
-==== Importer des zpool existants ====+Sans surprise, c'est la commande ''zpool'' qu'il faut utiliser. 
 + 
 +==== Créer et Importer des zpool existants ====
  
 C'est la commande ''zpool'' qu'il faut utiliser.  C'est la commande ''zpool'' qu'il faut utiliser. 
Ligne 24: Ligne 27:
 <code bash> <code bash>
 # liste les zpool existants sur les disques durs mais pas encore montés # liste les zpool existants sur les disques durs mais pas encore montés
-zpool import   +zpool import 
 # l'option -d est indispensable pour ne pas utiliser l'identification via /dev/sda qui est susceptible de changer d'un boot à l'autre : # l'option -d est indispensable pour ne pas utiliser l'identification via /dev/sda qui est susceptible de changer d'un boot à l'autre :
 zpool import -d /dev/disk/by-id    zpool import -d /dev/disk/by-id   
Ligne 31: Ligne 35:
 zpool import -d  /dev/disk/by-id <pool_name> zpool import -d  /dev/disk/by-id <pool_name>
  
 +
 +# créer un zpool 
 +zpool create (-f) -m MOUNT_POINT POOL_NAME (raidzX/mirror) DISK_IDs
 +</code>
 +
 +On doit pouvoir monter dans un dossier spécifique, de base ils sont à la racine ''/<pool_name>/''
 +
 +==== Alors, ces zpool ? ====
 +
 +<code bash>
 # voir les zpool importés/montés # voir les zpool importés/montés
 zpool list zpool list
 +# voir comment se portent les zpool
 +zpool status
 </code> </code>
  
-On doit pouvoir monter dans un dossier spécifique, de base ils sont à la racine ''/<pool_name>/'' 
  
-==== +===== dataset ===== 
 + 
 +Et là, c'est la commande ''zfs'' qu'il faut regarder 
 + 
 +==== Lister, Créer, modifier, supprimer un dataset ==== 
 + 
 +<code bash> 
 +# lister les dataset 
 +zfs list 
 + 
 +# créer un dataset 
 +zfs create -o mountpoint=/path/to/dir POOL_NAME/DATASET_NAME 
 + 
 + 
 + 
 +</code> 
 + 
 +==== Paramètres des dataset ==== 
 + 
 +<code bash> 
 +# lire un paramètre (sur un dataset / zpool) 
 +zfs get 
 +zfs get PARAMETER  
 +zfs get PARAMETER ZPOOL/DATASET 
 + 
 +# régler un paramètre  
 +zfs set ... 
 + 
 +</code> 
 + 
 + 
 +==== snapshot ==== 
 + 
 +Ce sont des copies en read-only d'un dataset. 
 + 
 +<code bash> 
 +# lister les snapshots 
 +zfs list -t snapshot 
 + 
 +# créer un snapshot 
 +zfs snapshot (-r) ZPOOL/DATASET   # -r : recursive, tous les dataset enfants sont concernés 
 + 
 +# détruire un snapshot 
 +zfs destroy ZPOOL/SNAPSHOT 
 + 
 +# renommer un snapshot 
 +zfs rename ZPOOL/OLD_NAME_SNAPSHOT ZPOOL/NEW_NAME_SNAPSHOT  
 + 
 + 
 +# déplacer un snapshot (crée une "image stream" vers la sortie standard --> pipe) 
 +zfs send ZPOOL/SNAPSHOT > /PATH/TO/FILE 
 + 
 +# et la réciproque  
 +zfs receive ZPOOL/SNAPSHOT < /PATH/TO/FILE 
 + 
 +# Pour envoyer et recevoir en une seule commande 
 +zfs send -i ZPOOL/SNAPSHOT | ssh SERVER zfs receive ANOTHER_POOL/DATASET 
 + 
 +# pour n'envoyer que le différentiel 
 +zfs send -i ZPOOL/SNAPSHOT | ssh SERVER zfs recv ANOTHER_POOL/DATASET 
 + 
 + 
 +# pour ne récupérer qu'un seul fichier en accédant au dossier snapshot du dataset :  
 +# ''.zfs/snapshot/snapshot_name created under the file system for which snapshot was taken 
 +ls .. 
 +cp .. 
 + 
 + 
 +</code> 
 + 
 +Il existe la possibilité de rollback, mais c'est dangereux, on préfèrera faire des clones 
 + 
 +=== auto-snapshot === 
 + 
 +Le paquet ''zfs-auto-snapshot'' est disponible sur debian et archlinux permet de faire comme son nom l'indique des snapshot autoamatiquement et d'en faire une gestion automatique (supprimer les anciennes). 
 + 
 +En réalité, c'est un script cron qui s'occupe de tout ça : sur debian, il est ici ''/etc/cron.d/zfs-auto-snapshot'' 
 +<code> 
 +PATH="/usr/bin:/bin:/usr/sbin:/sbin" 
 + 
 +*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 // 
 +00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 // 
 +59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 // 
 +59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 // 
 +00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 // 
 +</code> 
 + 
 +On peut aussi rajouter le paramètre ''-r recursive'', et ''--default-exclude'' pour exclure les dataset dont la sauvegarde n'a pas été explicitement autorisée via le paramètre zfs ''com.sun:auto-snapshot'' 
 +<code BASH> 
 +# zfs get all DATASET_NAME 
 +NAME          PROPERTY                        VALUE SOURCE 
 +DATASET_NAME  com.sun:auto-snapshot           true  local 
 +DATASET_NAME  com.sun:auto-snapshot:monthly   true  local 
 +DATASET_NAME  com.sun:auto-snapshot:weekly    true  local 
 +DATASET_NAME  com.sun:auto-snapshot:hourly    true  local 
 +DATASET_NAME  com.sun:auto-snapshot:frequent  true  local 
 +DATASET_NAME  com.sun:auto-snapshot:daily     true  local 
 +</code> 
 + 
 +et pour détruire des lots de snapshots : 
 + 
 +<code bash> 
 +zfs list -H -o name -t snapshot | grep hourly | xargs -n1 zfs destroy 
 +</code> 
 + 
 +==== clones ==== 
 + 
 +Les clones sont des copies write/read du système de fichiers, uniquement créées à partir des snapshot 
 + 
 +<code bash> 
 +# créer un clone 
 +zfs clone ZPOOL/SNAPSHOT ZPOOL/DATASET/CLONE 
 + 
 +# lister les clones  
 +zfs list -r 
 + 
 +# détruire un clone 
 +zfs destroy ZPOOL/DATASET/CLONE 
 +</code> 
 + 
 +==== scrub ==== 
 + 
 +Pour inspecter un zpool (et le réparer automatiquement si une erreur est trouvée et qu'il y a de la redondance).\\ 
 +1 seul scrub n'est possible à la fois, ça consomme trop de ressources sinon. 
 + 
 +<code bash> 
 +# lancer un scrub 
 +zpool scrub ZPOOL 
 + 
 +# arrêter un scrub 
 +zpool scrub -s ZPOOL 
 +</code> 
 + 
 + 
 +==== Des trucs en vrac, à trier ==== 
 + 
 +<code> 
 + 
 +Transfer ZFS Snapshot Over Network 
 + 
 +zfs send mypool/testarea@first-snapshot | gzip > /mnt/backup/snapshot.img.gz ## save snapshot as image 
 +zfs send mypool/testarea@first-snapshot | ssh host "zfs receive remotepool/blabla" ## send snaphsot to remote host 
 +zfs send -p -R ... ## transmit settings like compression 
 +zfs send mypool/testarea@first-snapshot mypool/testarea@second-snapshot ... ## send just incremental changes 
 +## speedup receive 
 +zfs send -i mypool/testarea@first-snapshotman s | ssh host "mbuffer -s 128k -m 1G | zfs receive -F tank/pool 
 +## speedup send & receive: 
 +# Start the receiver first. This listens on port 9090, has a 1GB buffer, 
 +    and uses 128kb chunks (same as zfs): 
 +mbuffer -s 128k -m 1G -I 9090 | zfs receive data/filesystem 
 +# Now we send the data, also sending it through mbuffer: 
 +zfs send -i data/filesystem@1 data/filesystem@2 | mbuffer -s 
 +    128k -m 1G -O 10.0.0.1:9090 
 + 
 +</code> 
 + 
 +<code> 
 +aptitude install zfs-auto-snapshot 
 +zfs-auto-snapshot --quiet --syslog --label=daily --keep=31 pool1/dataset1 ## make daily snapshots, keep for 31 days 
 +zfs-auto-snapshot --quiet --syslog --label=monthly --keep=12 pool1/dataset1 
 +</code>
zfs.1506710651.txt.gz · Dernière modification: 2018/10/13 20:32 (modification externe)