Bonjour,
j’ai sur un serveur un disque avec une partition NTFS. Ce disque provient d’une autre machine avec un chipset IDE différent, et comme j’ai voulu bêtement booter dessus une fois pour voir si le windows était toujours opérationnel, il m’a fait un classique et joli BSOD “INACCESSIBLE_BOOT_DEVICE”…
Bon, en soi, ce n’est pas un problême, mais en plantant, il a laissé la partition NTFS dans un état “unclean”. Alors j’arrive à le monter avec ntfs-3g en -o force, mais ce n’est pas satisfaisant.
Je sais donc que ce disque n’a pas vraiment d’incohérence et je voudrais juste désactiver ce flag “unclean”.
Quel outil utiliser (pour info ntfsfix de ntfsprogs ne suffit pas) ?
Hum, pour ce que j’en sais ntfsfix justement fait l’inverse de ce que tu veux: il répare en partie les incohérences et ajuste le drapeau de tel manière que au boute suivant, XP vérifie le disque soit pile poil l’inverse de ce que tu veux. En regardant le code, tu t’aperçois qu’il est assez simple:
[code][…]
/**
-
set_dirty_flag
*/
static int set_dirty_flag(ntfs_volume *vol)
{
le16 flags;if (NVolWasDirty(vol)) return 0; ntfs_log_info("Setting required flags on partition... "); /* * Set chkdsk flag, i.e. mark the partition dirty so chkdsk will run * and fix it for us. */ flags = vol->flags | VOLUME_IS_DIRTY; if (OLD_ntfs_volume_set_flags(vol, flags)) { ntfs_log_info(FAILED); ntfs_log_error("Error setting volume flags.\n"); return -1; } vol->flags = flags; NVolSetWasDirty(vol); ntfs_log_info(OK); return 0;
}
[…]
[/code]
et la structure est décrite dans [code]typedef enum {
VOLUME_IS_DIRTY = const_cpu_to_le16(0x0001),
VOLUME_RESIZE_LOG_FILE = const_cpu_to_le16(0x0002),
VOLUME_UPGRADE_ON_MOUNT = const_cpu_to_le16(0x0004),
VOLUME_MOUNTED_ON_NT4 = const_cpu_to_le16(0x0008),
VOLUME_DELETE_USN_UNDERWAY = const_cpu_to_le16(0x0010),
VOLUME_REPAIR_OBJECT_ID = const_cpu_to_le16(0x0020),
VOLUME_CHKDSK_UNDERWAY = const_cpu_to_le16(0x4000),
VOLUME_MODIFIED_BY_CHKDSK = const_cpu_to_le16(0x8000),
VOLUME_FLAGS_MASK = const_cpu_to_le16(0xc03f),
} attribute((packed)) VOLUME_FLAGS;
[/code] du fichier include/ntfs/layout.h
Il te suffit donc de mettre le bazar à 0. Donc soit tu modifies le code de ntfsfix et tu lances le bazar sur ton volume -ce que je ferais), soit tu passes un peu de temps pouvoir où est ce fameux mot et tu le modifies à la main, soit tu te fais un petit logiciel pour fixer les drapeaux comme tu veux.
Je vais essayer d’ajouter une option de ligne de commande à ntfsfix, je crois, pour permettre de changer le comportement par défaut de ntfsfix et de cleaner le flag.