Le BTRFS garantit-il la cohérence des données en cas de panne de courant?

11

Comme le déclare ZFS exclusivement ,ZFS est invulnérable ZFS accepte qu'il pourrait être vulnérable aux pannes de courant.

Je n'ai pas pu trouver une telle déclaration pour BTRFS. Est-il (ou conçu / prévu pour être) durable entre les coupures de courant?

ceremcem
la source
lire à nouveau. "Si votre pool est endommagé en raison d'une panne de matériel ou d'une panne de courant, voir Réparation des dommages à l'échelle du pool de stockage ZFS." (..) Tentative de récupération du pool à l'aide de la zpool clear -F commande
Michael D.
Vous dites donc que "ZFS ne garantit pas la cohérence des données, il tente uniquement de récupérer"?
ceremcem
Oui. Il y a plusieurs caches à gérer, un cache intégré aux disques durs, des caches / buffers OS. À un moment donné, il y a un syncou un flushqui écrit des caches sur le disque, ou pas pendant une panne de courant, ces données seront perdues. ZFS peut fonctionner parfaitement si le disque dur est sain et qu'il n'y a pas de coupure de courant (ou si un onduleur est connecté pour arrêter correctement l'ordinateur en cas de panne). Ce que vous ne pouvez pas dire sur FAT32.
Michael D.
2
La perte de données n'est pas un problème car c'est une conséquence naturelle lorsqu'une perte de puissance se produit, mais la cohérence des données est un problème dans mon cas. Un système de fichiers peut perdre des données dans ces conditions extrêmes, mais ne doit pas provoquer de données incohérentes sur le disque. J'ai besoin d'une fonction d'instantanés continue, donc je vais continuer avec BTRFS. NILFS2 est cependant l'option la plus proche dans mon cas.
ceremcem
1
J'ai posé la question sur #btrfs IRC, ils ont dit should be ok if your hw isn't "buggy"où pas - "buggy" signifie your hw has correct flush/barrier semantics. J'ai publié un lien vers cette question sur IRC, j'espère que quelqu'un prendra du temps pour élaborer; mais pour l'instant c'est tout.
Hi-Angel

Réponses:

5

J'ai posé la question sur #btrfs IRC, ils ont dit should be ok if your hw isn't "buggy"où pas - "buggy" signifie your hw has correct flush/barrier semantics.

TL; DR: Cela signifie que btrfs est protégé contre la corruption de données due à une perte d'alimentation de la même manière que ZFS.

Voici pourquoi: L'idée générale derrière ZFS et btrfs est similaire. Les deux utilisent des arbres Merkle comme structure de données . Les écritures peuvent nécessiter la mise à jour de plusieurs blocs sur le ou les disques. Le système de fichiers gère cela en écrivant les nouvelles données dans des blocs vides (même si un fichier existant est en cours de modification, il n'a donc pas besoin de modifier les blocs qui reflètent l'ancien état) et en construisant une nouvelle arborescence mise à jour. Une fois que tous les efforts sont effectués et que les données + l'arborescence mise à jour ont été écrites sur le disque, le pointeur de la tête est mis à jour vers la nouvelle arborescence, ce qui rend le changement visible.

Voici comment les choses sont censées se comporter lors de l'écriture dans un fichier:

  1. Écrivez des données sur des blocs libres sur le disque.
  2. Faites une copie de l'arborescence Merkle *, mettez-la à jour en fonction des modifications écrites en (1).
  3. Demander au matériel de vider les données sur le disque - le matériel écrit toutes les données en attente.
  4. Mettez à jour le pointeur de tête vers le nouvel arbre Merkle.
  5. Libérez les vieux blocs qui ne sont plus nécessaires.

Si l'alimentation est coupée après (4), la transaction est terminée. En cas de coupure de courant au cours des étapes (1) à (3), le système de fichiers retrouvera l'ancien état (les données écrites à l'étape (1) sont perdues mais le système de fichiers est cohérent). Notez qu'il n'est pas nécessaire de vérifier les erreurs du système de fichiers, ce qui signifie que le système de fichiers est disponible immédiatement, ce qui est un gros avantage (la vérification de grands systèmes de fichiers peut prendre très longtemps!).

Voici un exemple de la façon dont les choses peuvent mal se passer avec du matériel "buggy":

  1. Écrivez des données sur des blocs libres sur le disque.
  2. Faites une copie de l'arborescence Merkle *, mettez-la à jour en fonction des modifications écrites en (1).
  3. Demander au matériel de vider les données sur le disque - le matériel confirme la fin mais ne videra pas complètement (par exemple, les données peuvent rester dans le cache de réécriture du disque).
  4. Mettez à jour le pointeur de tête vers le nouvel arbre Merkle. Ces données sont écrites sur le disque avant les autres données en attente (par exemple parce que la tête du disque se trouve au bon endroit).
  5. Les données écrites aux étapes (1) et (2) sont écrites sur le disque.
  6. Libérez les vieux blocs qui ne sont plus nécessaires.

Le système de fichiers deviendra incohérent en cas de panne de courant entre (4) et (5) ou lors de l'exécution de l'étape (5). Par conséquent, l'arborescence Merkle et / ou les données peuvent être partiellement écrites, ce qui rend le système de fichiers incohérent.

En pratique, vous devez être particulièrement prudent lorsque vous utilisez des contrôleurs RAID . Ils désactivent généralement les caches de réécriture sur le disque et utilisent leur propre cache de réécriture à la place. Il y a deux façons courantes pour que les choses tournent mal:

* Je simplifie les choses ici. Il n'est en fait pas nécessaire de copier tout l'arbre. Seules les parties modifiées doivent être ajoutées - les parties restantes peuvent être partagées entre l'ancienne et la nouvelle arborescence .

Martin
la source
Merci pour cette jolie explication. Cependant, la citation était nécessaire pour toutes les revendications, y compris la conversation IRC. Votre réponse sera alors acceptée.
ceremcem
En ce qui concerne les journaux IRC, je faisais référence au commentaire de @ Hi-Angel ici. Peut-être qu'il peut fournir une référence? J'ai cependant ajouté quelques références aux autres parties.
Martin
BTRFS n'utilise pas d'arbres Merkle, il utilise des arbres B (d'où «B-TRee FileSystem»), et vos exemples d'échecs nécessitent que les barrières d'écriture ne soient pas correctement implémentées par le matériel (ce qui est en fait un cas plutôt inhabituel de nos jours) . Sinon, bonne réponse.
Austin Hemmelgarn
Les arbres utilisés par btrfs sont en fait à la fois des B-arbres (cette propriété concerne la "forme" de l'arbre et le fait qu'ils s'auto-équilibrent) et des arbres de hachage / Merkle (les feuilles contiennent le hachage de certaines données, les nœuds contiennent le hachage de leurs enfants, chaque changement se propage donc jusqu'à la racine). Pouvoir vérifier ces hachages est ce qui permet à btrfs et ZFS de détecter les données corrompues (et de les lire sur un autre disque si elles sont utilisées en mode "miroir").
Martin