Les systèmes de fichiers de journalisation garantissent-ils contre la corruption après une panne de courant?

28

Je pose cette question au nom d' un autre utilisateur qui a soulevé le problème dans la salle de discussion Ubuntu.

Les systèmes de fichiers de journalisation garantissent-ils qu'aucune corruption ne se produira en cas de panne de courant?

Si cette réponse dépend du système de fichiers, veuillez indiquer ceux qui protègent contre la corruption et ceux qui ne le font pas.

Nathan Osman
la source

Réponses:

21

Il n'y a aucune garantie. Un système de fichiers de journalisation est plus résistant et moins sujet à la corruption, mais pas à l'abri.

Tout un journal est une liste d'opérations qui ont été récemment effectuées sur le système de fichiers. La partie cruciale est que l'écriture au journal est effectuée avant les opérations. La plupart des opérations comportent plusieurs étapes. La suppression d'un fichier, par exemple, peut entraîner la suppression de l'entrée du fichier dans la table des matières du système de fichiers, puis le marquage des secteurs sur le lecteur comme libres. Si quelque chose se produit entre les deux étapes, un système de fichiers journalisé peut le dire immédiatement et effectuer le nettoyage nécessaire pour que tout reste cohérent. Ce n'est pas le cas avec un système de fichiers non journalisé qui doit regarder tout le contenu du volume pour trouver des erreurs.

Bien que cette journalisation soit beaucoup moins sujette à la corruption que la non-journalisation, la corruption peut toujours se produire. Par exemple, si le disque dur présente un dysfonctionnement mécanique ou si les écritures dans le journal lui-même échouent ou sont interrompues.

La prémisse de base de la journalisation est que la rédaction d'une entrée de journal est généralement beaucoup plus rapide que la transaction réelle qu'elle décrit. Ainsi, la période entre le système d'exploitation commandant une écriture (journal) et le disque dur le remplissant est beaucoup plus courte que pour une écriture normale: une fenêtre plus étroite pour que les choses tournent mal, mais il y a toujours une fenêtre.

Lectures complémentaires

Andrew Lambert
la source
Pourriez-vous expliquer un peu pourquoi cela est vrai? Peut-être pourriez-vous donner un exemple de la façon dont la corruption se produirait dans un certain scénario.
Nathan Osman
1
@George Edison Voir ma réponse développée.
Andrew Lambert
2
Ce dernier bit est incorrect; il n'y a pas de fenêtre pour que les choses tournent mal. Puisqu'il enregistre ce qu'il est sur le point de faire avant de commencer à le faire, l'opération peut être redémarrée après la panne de courant, quel que soit le moment où elle se produit pendant l'opération. C'est une question d'ordre, pas de timing.
psusi
@psusi il y a encore une fenêtre pour l'interruption de l'écriture dans le journal. Les écritures de journal peuvent sembler atomiques au système d'exploitation, mais elles sont toujours écrites sur le disque.
Andrew Lambert
6
@Amazed, ils sont atomiques car ils ont des numéros de séquence et / ou des sommes de contrôle, de sorte que l'entrée de journal est entièrement écrite ou non. S'il n'est pas entièrement écrit, il est simplement ignoré après le redémarrage du système, et aucune autre modification n'a été apportée au fs afin qu'il reste cohérent.
psusi
18

Non.

Le type de journalisation le plus courant, appelé journalisation des métadonnées, ne protège que l'intégrité du système de fichiers, pas des données. Cela inclut xfs, et ext3/ ext4dans le data=orderedmode par défaut .

Si un système de fichiers non journalisé subit un plantage, il sera vérifié à l'aide fsckdu prochain démarrage. fsckanalyse chaque inode du système de fichiers, recherchant les blocs marqués comme utilisés mais non accessibles (c'est-à-dire sans nom de fichier), et marque ces blocs comme inutilisés. Cela prend beaucoup de temps.

Avec un système de fichiers de journalisation des métadonnées, au lieu de faire un fsck, il sait quels blocs il était en train de changer, il peut donc les marquer comme libres sans les chercher dans toute la partition.

Il existe un type de journalisation moins commun, appelé journalisation des données, qui ext3fonctionne si vous le montez avec l' data=journaloption.

Il tente de protéger toutes vos données en écrivant non seulement une liste d'opérations logiques, mais également le contenu entier de chaque écriture dans le journal. Mais comme il écrit deux fois vos données, cela peut être beaucoup plus lent.

Comme d'autres l'ont souligné, même cela n'est pas une garantie, car le disque dur aurait pu dire au système d'exploitation qu'il avait stocké les données, alors qu'il se trouvait encore dans le cache du disque dur.

Pour plus d'informations, consultez l'article de Wikipedia Journaling File System et la section Data Mode de la documentation ext4 .

Mikel
la source
1
+1 pour la distinction entre corruption de système de fichiers et corruption de données. Cette petite distinction est assez compliquée dans la pratique.
SplinterReality
Excusez ma totale ignorance, mais cela n'a-t-il data=journalaucun sens du tout?
boehj
Encore une fois, le système d'exploitation sait quand le lecteur met en cache les données et le force à le vider en cas de besoin afin de maintenir un fs cohérent. Votre fichier de données peut bien sûr être perdu ou corrompu si l'application qui l'écrivait lorsque la panne de courant ne le faisait pas avec soin, et cela s'applique que vous utilisiez ou non data = journal.
psusi
@psusi n'a pas d'importance à quel point le programme est prudent dans l'écriture des données, de nombreux disques durs corrompent silencieusement les données sur READING stackoverflow.com/q/34141117/3338098
user3338098
@ user3338098, les lecteurs qui corrompent silencieusement les données sont horriblement cassés et ne devraient jamais être utilisés, et sont une conversation entièrement différente de la corruption causée par un logiciel qui fait la mauvaise chose.
psusi
8

Un système de fichiers ne peut pas garantir la cohérence de son système de fichiers en cas de panne de courant, car il ne sait pas ce que fera le matériel.

Si un disque dur met en mémoire tampon les données pour l'écriture mais indique au système d'exploitation qu'il a écrit les données et ne prend pas en charge les barrières d'écriture appropriées, des écritures en désordre peuvent se produire lorsqu'une écriture antérieure n'a pas atteint le plateau, mais une écriture ultérieure a. Voir cette réponse de panne de serveur pour plus de détails.

De plus, la position de la tête sur un disque dur magnétique est contrôlée par des électro-aimants. Si l'alimentation tombe en panne au milieu d'une écriture, il est possible que certaines données continuent à être écrites pendant que les têtes bougent, corrompant les données sur des blocs que le système de fichiers n'a jamais voulu écrire.

camh
la source
Le micrologiciel du lecteur n'est-il pas assez intelligent pour suspendre l'écriture lors de la rétraction de la tête?
Nathan Osman
@George: Cela dépendra du lecteur. Il y en a beaucoup et vous ne savez pas dans quelle mesure votre lecteur (bon marché) fait les choses.
camh
1
Le disque dur indique au système d'exploitation s'il utilise un cache d'écriture derrière, et le système d'exploitation prend des mesures pour s'assurer qu'ils sont vidés dans le bon ordre. De plus, les lecteurs sont conçus de telle sorte qu'en cas de panne de courant, ils arrêtent d'écrire. J'ai vu des cas où le secteur en cours d'écriture au moment de la perte de puissance devient corrompu car il n'a pas terminé la mise à jour de l'ecc (mais peut être facilement réécrit correctement), mais je n'ai jamais entendu parler de secteurs aléatoires corrompus en cas de perte de puissance.
psusi
3

ZFS, qui est proche mais pas exactement un système de fichiers journalisé, garantit par sa conception contre la corruption après une panne de courant.

Peu importe si une écriture en cours est interrompue au milieu car dans ce cas, sa somme de contrôle sera certainement incorrecte donc le bloc sera ignoré. Comme le système de fichiers est copié en écriture, les données correctes précédentes (ou métadonnées) sont toujours sur le disque et seront utilisées à la place.

jlliagre
la source
2

Dans la plupart des cas, la réponse est non:

  • Comme déjà dit Mikel , la plupart des systèmes de fichiers de journalisation ne peuvent protéger que les métadonnées de fichier (informations telles que le nom d'un fichier, sa taille, ses autorisations, etc.), pas les données de fichier (le contenu du fichier). Cela se produit car la protection des données de fichiers entraîne un système de fichiers très lent (en pratique inutile).
  • Étant donné que le journal est également un type spécial de fichier stocké sur le disque dur, il peut être endommagé après une panne de courant. Ainsi, si le journal est corrompu, le système de fichiers ne peut pas terminer les transactions incomplètes qui ont eu lieu lorsque la panne de courant s'est produite.
sakisk
la source
Quels événements pourraient conduire à un journal corrompu? La seule chose à laquelle je pouvais penser était les mauvais secteurs - y a-t-il autre chose?
Nathan Osman
C'est vrai, les pannes matérielles sont le cas habituel.
sakisk