ZFS

Tutoriel sur les instantanés ZFS

Tutoriel sur les instantanés ZFS

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

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 avait disparu. Plusieurs sauvegardes sont passées et maintenant vous vous rendez compte qu'un fichier important est manquant dans toutes les sauvegardes disponibles des 5 dernières semaines. Dans ce tutoriel, nous verrons comment utiliser les snapshots ZFS et aborderons diverses politiques de snapshots qui fonctionneraient de manière optimale, à la fois en termes d'utilisation des ressources et de capacité de récupération.

Mécanisme de copie sur écriture

ZFS a à la fois une vue d'ensemble de haut niveau des fichiers et des répertoires et comprend comment les données sont écrites sur le disque. Lors de l'écriture physique de données sur un disque, cela se fait par 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 (lecture, écriture ou suppression) se produira dans les blocs discrets.

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

Ceci est particulièrement utile dans les cas où, par exemple, il y a une panne de courant et votre système se bloque alors 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. Mais si vous utilisez ZFS, vous risquez de perdre la transaction en cours comme cela se produisait, mais le dernier état valide de vos fichiers restera inchangé.

Les instantanés reposent également sur cette fonctionnalité, et en fait assez fortement. 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é créé. 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 qu'il contient diverge de l'instantané que l'instantané commence à consommer de l'espace de stockage supplémentaire. Voici ce qui se passe sous le capot : au lieu de recycler les vieux blocs au fil du temps, ZFS les garde. Cela améliore également l'utilisation du stockage. Si vous prenez un instantané d'un ensemble de données de 20 Go et que vous ne modifiez que quelques fichiers texte ici et là, l'instantané peut ne prendre que quelques Mo d'espace.


Création d'instantanés

Pour démontrer l'utilisation des instantanés, commençons par un ensemble de données qui contient beaucoup de fichiers texte, histoire de simplifier les choses. 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 jeux de données montés sur zroot. Si vous ne savez pas ce que signifie un pool (ou un zpool), dans la langue vernaculaire ZFS, cela vaut la peine de le lire avant de continuer.

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

Pour consulter ses propriétés, exécutez la commande suivante.

[email protected]:~$ zfs list zroot/usr/src

Comme vous pouvez le voir, il utilise 633 Mo de stockage. Il contient l'intégralité de l'arborescence des sources du système d'exploitation.

Prenons un instantané de zroot/usr/src

[email protected]:~$ zfs snapshot zroot/usr/[email protected]

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

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 pas d'espace supplémentaire lorsqu'il est né. Il n'y a pas non plus d'espace disponible, car il s'agit d'un ensemble de données strictement en lecture seule, l'instantané lui-même ne peut pas augmenter, modifier ou réduire. 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/

[email protégé] :$ rm /usr/src/sbin

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

Ceci est attendu car le mécanisme de copie sur écriture est à l'œuvre ici et la suppression (ou la modification) des fichiers a conduit à associer davantage de données uniquement à l'instantané et non à l'ensemble de données réellement utilisé.

Notez la colonne REFER dans la sortie ci-dessus. Il vous donne la quantité de données accessibles sur l'ensemble de données tandis que la colonne USED vous montre simplement combien d'espace est occupé sur le disque physique.

Le mécanisme de copie sur é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'auparavant. Cependant, après avoir lu jusqu'à présent, vous savez ce qui se passe réellement!

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

[email protected] :/usr/src$ zfs rollback zroot/usr/[email protected]

Politique de capture instantanée

La prochaine question à poser est - À quelle fréquence voulez-vous prendre les instantanés? Si cela peut 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 comme la base de données change tellement, il deviendrait bientôt impossible de stocker tous les nombreux instantanés créés. La prochaine étape consisterait donc à purger les instantanés datant de plus de, 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 conserver un ou deux instantanés de cet historique de 48 heures et les conserver pendant une semaine. Purge-les quand ils deviennent plus vieux que ça.

Et si vous pouvez continuer ainsi, vous pourriez entasser des instantanés jusqu'à la genèse même du système, juste par ordre décroissant de fréquence. Enfin, je tiens à souligner que ces instantanés sont en LECTURE SEULE, ce qui signifie que si vous êtes infecté par un ransomware et que toutes vos données sont cryptées (modifiées). Ces instantanés seraient, très probablement, toujours intacts.

Comment afficher la superposition OSD dans les applications et jeux Linux en plein écran
Jouer à des jeux en plein écran ou utiliser des applications en mode plein écran sans distraction peut vous couper des informations système pertinente...
Top 5 des cartes de capture de jeu
Nous avons tous vu et aimé des gameplays en streaming sur YouTube. PewDiePie, Jakesepticye et Markiplier ne sont que quelques-uns des meilleurs joueur...
Comment développer un jeu sur Linux
Il y a dix ans, peu d'utilisateurs de Linux prédisaient que leur système d'exploitation préféré serait un jour une plate-forme de jeu populaire pour l...