Tutoriel des instantanés ZFS

Tutoriel des instantanés ZFS
Les instantanés sont importants, que vous exécutiez une machine virtuelle simple sur votre ordinateur domestique ou s'il s'agit d'une base de données d'entreprise qui est constamment mise à jour et modifiée. Avoir des instantanés, c'est-à-dire qu'une copie de l'ensemble du système de fichiers tel qu'il était à une période donnée est important.

Les gens perdent souvent la trace de l'endroit où les choses ont mal tourné, un fichier a été supprimé et personne n'a remarqué qu'il était parti. Plusieurs sauvegardes sont passées et maintenant vous vous rendez compte qu'un fichier important est absent de toutes les sauvegardes disponibles des 5 dernières semaines. Dans ce tutoriel, nous verrons comment utiliser les instantanés ZFS et aborder diverses politiques d'instantané qui fonctionneraient de manière optimale, en termes d'utilisation des ressources et de récupérabilité.

Mécanisme de copie-écriture

ZFS a à la fois un aperçu de haut niveau des fichiers et des répertoires et comprend comment les données sont écrites sur le disque. Lorsque vous écrivez physiquement des données sur un disque, il est fait dans des blocs discrets. En règle générale, la taille du bloc peut aller jusqu'à 1 Mo, mais la valeur par défaut est généralement de 128 Ko. Maintenant, cela signifie que chaque modification (lire, écrire ou supprimer) se produira dans les blocs discrets.

Le mécanisme de copie-écriture garantit que chaque fois qu'un bloc est modifié, au lieu de modifier directement le bloc, il fait une copie du bloc avec les modifications requises effectuées sur le nouveau bloc.

Cela est particulièrement utile dans les cas où, par exemple, il y a une panne de courant et que votre système se bloque pendant que de nouvelles données étaient écrites sur le disque. Si cela se produit dans un système de fichiers traditionnel, vos fichiers seront corrompus ou laissés avec des trous dedans. Mais si vous utilisez ZFS, vous pouvez perdre la transaction en cours car cela se produisait, mais le dernier état valide de vos fichiers sera toujours resté intact.

Les instantanés s'appuient également sur cette fonctionnalité, et assez fortement en fait. Lorsque vous prenez un instantané d'un ensemble de données donné («ensemble de données» est le terme ZFS pour un système de fichiers), ZFS enregistre simplement l'horodatage lorsque l'instantané a été produit. C'est ça! Aucune donnée n'est copiée et aucun stockage supplémentaire n'est consommé.

Ce n'est que lorsque le système de fichiers change et que les données en informatique divergent à partir de l'instantané, l'instantané commence à consommer un stockage supplémentaire. Ce qui se passe sous le capot est le suivant - au lieu de recycler les anciens blocs au fil du temps, ZFS les maintient. Cela améliore également l'utilisation du stockage. Si vous êtes un instantané un ensemble de données de 20 Go et que vous modifiez seulement quelques fichiers texte ici et là, l'instantané ne peut prendre que quelques MBS d'espace.


Créer des instantanés

Pour démontrer l'utilisation des instantanés, commençons par un ensemble de données qui a beaucoup de fichiers texte, juste pour garder la question simple. La machine virtuelle que j'utiliserai pour la démo exécute FreeBSD 11.1-Release-P3 qui est la dernière version stable disponible au moment de la rédaction de cet article. Le système de fichiers racine est monté sur le zroot Pool par défaut et beaucoup de répertoires familiers comme / usr / src, / home, / etc sont tous leurs propres ensembles de données montés sur zroot. Si vous ne savez pas ce qu'une piscine (ou un zpool) signifie, dans le vernaculaire ZFS, il vaut la peine d'être lu avant de continuer.

L'un des nombreux systèmes de fichiers, ou ensembles de données, par défaut sur FreeBSD est: zroot / usr / src

Pour voir les propriétés, exécutez la commande suivante.

root @ testbsd: ~ $ zfs lister zroot / usr / src

Comme vous pouvez le voir, il utilise 633 Mo de stockage. Il contient la totalité de l'arbre source pour le système d'exploitation.

Prenons un instantané de zroot / usr / src

root @ testbsd: ~ $ zfs snapshot zroot / usr / src @ snapshot1

Le symbole @ agit comme un délimiteur entre l'ensemble de données et le nom d'instantané, qui dans notre cas est instantané.

Regardons maintenant l'état de l'instantané lors de sa création.

En exécutant la commande:

ZFS List -rt All Zroot / USR / SRC

Vous pouvez voir que l'instantané n'utilise aucun espace supplémentaire à sa naissance. Il n'y a pas non plus d'espace disponible, car il s'agit d'un ensemble de données strictement lu, l'instantané lui-même ne peut pas grandir, modifier ou rétrécir. Enfin, il n'est monté nulle part, ce qui le rend complètement isolé de la hiérarchie du système de fichiers donné.

Maintenant, supprimons le sbin répertoire dans / usr / src /

root @ testbsd: $ rm / usr / src / sbin

En regardant l'instantané, vous verrez maintenant qu'il a grandi,

Ceci est prévu car le mécanisme de copie-écriture est à l'œuvre ici et supprimer (ou modifier) ​​les fichiers ont conduit à plus de données associées uniquement à l'instantané et non à l'ensemble de données réellement utilisé.

Remarquez la colonne de référence dans la sortie ci-dessus. Il vous donne la quantité de données accessibles sur l'ensemble de données tandis que la colonne utilisée vous montre la quantité d'espace occupée sur le disque physique.

Le mécanisme de copie sur l'écriture de ZFS donne souvent ces résultats contre-intuitifs où la suppression d'un fichier donnerait l'impression que plus d'espace est maintenant utilisé qu'avant. Cependant, après avoir lu jusqu'à présent, vous savez ce qui se passe réellement!

Avant de terminer, récupérons le sbin depuis instantané. Pour ce faire, exécutez simplement:

root @ testbsd: / usr / src $ zfs rollback zroot / usr / src @ snapshot1

Politique d'instantané

La question suivante à poser est - à quelle fréquence vous voulez prendre les instantanés? Bien qu'il puisse varier d'une entreprise à l'autre, prenons l'exemple d'une base de données très dynamique qui change de temps en temps.

Pour commencer, vous commenceriez à prendre des instantanés toutes les 6 heures environ, mais parce que la base de données change tellement, il deviendrait bientôt irréalisable de stocker tous les nombreux instantanés qui ont été créés. Donc, l'étape suivante serait de purger des instantanés qui sont plus âgés que, disons, 48 ​​heures.

Maintenant, le problème serait de récupérer quelque chose qui a été perdu il y a 49 heures. Pour contourner ce problème, vous pouvez garder un ou deux instantanés de cette histoire de 48 heures et les garder pendant une semaine. Purgez-les quand ils vieillissent que ça.

Et si vous pouvez continuer dans ce sens, vous pouvez entamer des instantanés jusqu'à la genèse même du système, juste dans l'ordre de fréquence décroissant. Enfin, je voudrais souligner que ces instantanés sont en lecture seule, ce qui signifie que si vous êtes infecté par un ransomware et obtenez toutes vos données cryptées (modifiées). Ces instantanés seraient très probablement intacts.