Il est bien connu que vous ne devez jamais fsck une partition montée. Je peux comprendre comment cela pourrait facilement conduire à la corruption si le système de fichiers est écrit dans par fsck (par exemple, l'option -a est utilisée), mais pourquoi les vérifications en lecture seule ne peuvent-elles pas être exécutées sur les disques montés ?
De:
http://linux.die.net/man/8/fsck.ext
"Notez qu'en général, il n'est pas sûr d'exécuter _e2fsck
_ sur des systèmes de fichiers montés. La seule exception est si l'option _-n
_ est spécifiée et _-c
_, _-l
_ ou _-L
_ options ne sont pas spécifiées. Cependant, même si cela est sûr, les résultats imprimés par _e2fsck
_ ne sont pas valides si le système de fichiers est monté. Si _e2fsck
_ vous demande si vous devez ou non vérifier un système de fichiers qui est monté, la seule bonne réponse est "non". Seuls les experts qui savent vraiment ce qu'ils font devraient envisager de répondre à cette question d'une autre manière. "
Le problème de base est que le vérificateur de système de fichiers ne fait (généralement) pas partie du système de fichiers. Il s'agit plutôt d'un programme distinct qui lit et écrit sur le même disque que le code du système de fichiers dans le noyau. Par conséquent, si vous exécutez fsck sur un système de fichiers actif, vous avez deux entités différentes qui lisent (et modifient potentiellement) les mêmes données (le disque), mais elles ne se coordonnent en aucune façon. Le résultat, comme d'autres l'ont souligné, est que la plupart des vérificateurs s'attendent à ce que personne d'autre ne modifie les métadonnées du système de fichiers pendant leur exécution. Ils seront confus et/ou signaleront des erreurs parasites si le système de fichiers du noyau change quelque chose que le vérificateur ne s'attend pas.
Il existe quelques systèmes de fichiers avec des contrôleurs qui sont explicitement conçus pour être exécutés "en ligne" (c'est-à-dire pendant que le système de fichiers est actif). Les versions plus récentes de FFS/UFS le font en exécutant fsck sur un instantané récent du système de fichiers (une réplique en lecture seule, ponctuelle et de copie sur écriture). S'il trouve des problèmes, tels que des incohérences dans les bit-maps d'allocation, il les corrige via un appel système, plutôt qu'en écrivant sur le disque brut. Cela lui permet de se coordonner avec le système de fichiers actif.
Le WAFL de NetApp dispose également d'un outil de vérification en ligne. Il y en a probablement d'autres.
L'exécution de fsck sur une partition montée en lecture-écriture serait idiote, même avec fsck en mode lecture seule. Le système de fichiers changera sous fsck et les données en mémoire que fsck met en cache à partir du système de fichiers deviendront invalides (et donc fsck verra une incohérence). Vous pouvez exécuter fsck sur un système de fichiers monté en lecture seule en mode lecture seule et obtenir des résultats valides. L'exécution de fsck en mode lecture/écriture sur un système de fichiers monté en lecture seule, si fsck apporte des modifications au système de fichiers au cours de son exécution, amènerait le noyau à voir les structures du système de fichiers changer de façon inattendue en dessous. Ce serait également mauvais.
Mis à part le fait que cela tuerait probablement votre débit d'E/S, si le système de fichiers est modifié pendant qu'il est fsck, il n'y a aucun moyen que fsck puisse garder une trace des changements et signaler des incohérences.
Certains systèmes de fichiers comme XFS vous permettent de vérifier la cohérence pendant que le système de fichiers est monté en lecture-écriture, avec la mise en garde que des erreurs parasites seront probablement signalées. xfs_check
recommande que le système de fichiers soit démonté ou monté en lecture seule avant d'effectuer la vérification.
Eh bien, l'objectif de fsck est de signaler les incohérences du système de fichiers, c'est-à-dire les invariants violés.
Cependant, beaucoup de ces vérifications impliquent plus d'une structure FS. Si quelqu'un modifie le FS (écriture de données), ces structures peuvent être temporairement désynchronisées. fsck verrait cela comme une incohérence, même si ce n'est pas vraiment un problème. fsck n'a aucun moyen de savoir si une incohérence est juste temporaire ou si un problème permanent doit être corrigé. Cela ne peut donc pas fonctionner (sauf si un FS est spécialement conçu pour permettre la vérification en ligne. Certains le font, mais ext3 ne fonctionne pas).
Bien, vous pouvez. fsck -n/dev/sda1 fera exactement cela, au moins sur ext3. Je viens de le tester :)