Il y a quelque temps, il y a eu des discussions sur le fait qu'ext4 pourrait laisser des fichiers vides après un démontage impur, résumé assez bien dans cet article . Fondamentalement, en raison de l'allocation retardée, les écritures peuvent être conservées dans le cache d'écriture pendant une durée beaucoup plus longue que l'intervalle de validation par défaut du journal ext (5 secondes).
Les problèmes semblent avoir été résolus dans un correctif qui force l'allocation de blocs dans certaines situations, forçant ainsi les données sur le disque après au plus 5 secondes par défaut.
Je me demande ce qui se passe lorsqu'une application écrase des parties existantes d'un fichier, sans tronquer ou ajouter le fichier lui-même. Cela sera-t-il également forcé de disque dans les 5 secondes?
Cela semble être une situation différente de l'ajout à un fichier: lors de l'ajout, la taille du fichier change, ce qui est un changement de métadonnées; par conséquent, une validation du journal sera nécessaire dans les 5 secondes, et en raison des données = commandées, les données devront être écrites avant cela pour des raisons de sécurité (sinon des parties des fichiers supprimés d'autres utilisateurs pourraient apparaître pour le propriétaire de la pièce jointe). fichier).
Lorsque vous écrasez simplement les données du fichier, il n'y a aucune raison pour que l'écriture de données doive avoir lieu avant la validation du journal de métadonnées, car les anciennes données appartiennent au même utilisateur que le nouveau. L'écriture a-t-elle donc lieu avant la validation ou peut-elle être retardée plus longtemps que l'intervalle de validation du journal? Si oui, combien de temps?
Mise à jour: je sais que tout cela n'est pas pertinent lorsque l'on fait la bonne chose, c'est-à-dire en utilisant fsync (). (C'était la raison principale de toutes les discussions sur ext4 et la perte de données - le problème ne concernait que les applications non fsync () ing, ou pas au bon moment.) Je n'écris pas ma propre application, je demande parce que je Je ne sais pas si toutes mes applications font la bonne chose, et je veux connaître un délai approximatif pour de telles écritures "dangereuses". La raison de cette question est que mon pilote graphique provoque régulièrement des paniques du noyau, et je veux savoir si je dois m'inquiéter de plus que les 5 dernières secondes d'écriture de données.
la source
sync
(ou, de manière équivalente, lorsque le minuteur d'intervalle de validation est déclenché). Au moment où l'sync
achèvement est terminé, il n'y a absolument aucune donnée sale, métadonnées ou pages de journal. Toute modification du système de fichiers pendant le transfert de données synchrone est bloquée jusqu'à ce qu'elle se termine.commit=...
et cesync
n'est PAS équivalent? Ou est-ce que tytso impliquait que même avec unsync
il ne valide pas les pages non allouées? Je ne peux pas imaginer que ce soit le cas, car cela violerait les spécifications POSIX. Vous pourriez peut-être utiliser le script bash que j'ai fourni pour une meilleure sécurité des données: PQuelle que soit la réponse à votre question, cela n'a pas d'importance.
Le comportement exposé garanti du système de fichiers ext4 est que "les données seront sur le disque après un appel
sync
/ succèsfsync
". Donc, si vous avez une application qui vous fait poser cette question, vous devez insérer des appels de synchronisation aux points critiques où l'intégrité des données doit être assurée. Si vous êtes un utilisateur préoccupé par le même problème, vous pouvez appeler l'sync
utilitaire de ligne de commande avant de faire tout comportement dangereux susceptible de provoquer un arrêt impur.la source