Blog. Just Blog

Ручной сброс "грязного бита" на дисках FAT и NTFS

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Software | Автор: ManHunter
Ручной сброс "грязного бита" на дисках FAT и NTFS
Ручной сброс "грязного бита" на дисках FAT и NTFS

"Грязный бит" ("dirty bit") - особая пометка тома диска, обозначающая, что этот диск необходимо проверить при подключении или перезагрузке системы. Если "грязный бит" установлен, система при загрузке запускает для этого тома команду chkdsk /f, а при подключении "грязного" съемного носителя к компьютеру система предлагает его проверить на наличие ошибок. Как написано в справке, "грязный бит" может быть установлен, потому что на диске имеются незаконченные изменения, из-за того, что компьютер был выключен до того, как сделанные изменения были переданы на диск, или из-за обнаруженных повреждений тома. По идее, сразу после проверки диска этот бит должен автоматически сбрасываться, но иногда этого не происходит. В таких случаях можно отключить проверку для конкретного тома или сбросить "грязный бит" вручную.

ВНИМАНИЕ! Статья написана исключительно в познавательных целях. Все действия вы выполняете на свой страх и риск! Я не несу никакой ответственности за возможную потерю данных или повреждение вашей системы!

Проверка и установка "грязного бита"
Проверка и установка "грязного бита"

Проверить, установлена ли на диске "черная метка" можно через командную строку, введя команду "fsutil dirty query X:", где "X" - буква интересующего нас диска. С помощью этой же команды можно установить "грязный бит", параметры вызова будут немного другие: "fsutil dirty set X:". Логично предположить, что этот бит записывается куда-то на диск, осталось найти куда.

Для тестирования я взял флешку, отформатировал в NTFS, затем снял с нее посекторно образ. После этого установил "грязный бит" и снова снял образ. Затем выполнил проверку диска, которая сняла "грязный бит", и снова снял образ. После повторил процедуру еще несколько раз. Затем взял флешку другой емкости и повторил все действия. Потом пришлось написать на коленке скрипт, который сравнивал посимвольно образы с каждой флешки на предмет изменения какого-нибудь байта с 0 на 1 и наоборот, в зависимости от "чистоты" образа. Достаточно скучная процедура, на которую ушло прилично времени. В результате у меня получилась сигнатура для поиска, которая присутствовала на всех "грязных" образах.

00 03 01 01 00 00 00 00 00 80 00 00 00 18
Разница с "чистыми" образами была в одном байте:

00 03 01 00 00 00 00 00 00 80 00 00 00 18
На каждой флешке адрес сигнатуры был разный, поэтому конкретное смещение я здесь не привожу. Как оказалось, таких сигнатур может быть несколько, нас интересует та, чуть выше которой находится юникодная строка "Volume".

Теперь попробуем сделать то, ради чего затевалась вся эта статья - сбросим "грязный бит" вручную. Конечно, будем делать это не совсем вручную, а через редактор диска. Я рекомендую бесплатный и очень удобный редактор DMDE. Запускаем DMDE, выбираем нужный диск, открываем его на редактирование.

Ищем строку в редакторе
Ищем строку в редакторе

Находим по сигнатуре "грязный бит", если таких сигнатур несколько, то ориентируйтесь на строчку "Volume". Дальше надо переключиться в режим редактирования (Ctrl+E) и исправить 01 на 00.

Строка на диске
Строка на диске

Осталось сохранить изменения. Теперь, если снова вызвать команду fsutil, то она покажет, что диск "чистый". Точно таким же образом можно сбрасывать "грязный бит" не только на флешках, но и на жестких дисках.

Сохраняем изменения
Сохраняем изменения

С системой NTFS разобрались. Теперь посмотрим, как сбрасывать "грязный бит" на системах FAT32. Тут пришлось повозиться. Дело в том, что установить "грязный бит" через команду fsutil можно только на файловой системе NTFS, с FAT32 она работает только в режиме получения статуса этой метки. Пришлось записывать на флешку файлы и выдергивать ее в процессе записи до тех пор, пока система при подключении флешки не стала предлагать ее проверить на ошибки. Точно так же был снят образ диска в "грязном" состоянии и сразу после проверки. Оказалось, что на FAT32 "грязный бит" находится по фиксированному адресу 41h.

"Грязный бит" на FAT32
"Грязный бит" на FAT32

Точно так же открываем диск в редакторе, меняем значение в первом секторе по адресу 41h с 01 на 00 и сохраняем изменения. Теперь и этот диск воспринимается как "чистый".

Для Extended FAT File System (exFAT) удалось найти подробное описание на английском, где расписаны все значения полей, в том числе и "грязный бит". Не пришлось экспериментировать с прерванной записью файлов, так как fsutil с exFAT тоже не работает.

Reverse Engineering the Microsoft Extended FAT File System (exFAT)Reverse Engineering the Microsoft Extended FAT File System (exFAT)

Reverse.Engineering.the.Microsoft.Extended.FAT.File.System.exFAT.zip (1,423,612 bytes)

В отличие от предыдущих файловых систем, на exFAT "грязный бит" действительно является битом и включен в состав байта флагов тома. Для его поиска сперва надо найти VBR. Делается это все в том же редакторе DMDE поиском сигнатуры "EXFAT". От начала сектора надо отсчитать 6Ah байт, это и будет флаг тома.

"Грязный бит" на exFAT
"Грязный бит" на exFAT

За "чистоту" отвечает 2-й бит этого байта. Если он взведен, то диск считается "грязным". Просто обнулять весь байт целиком не рекомендуется, так как остальные биты в нем также имеют свое значение. Важное замечание: после ручного сброса или установки "грязного бита" на exFAT, изменения вступают в силу только после перезагрузки или после извлечения и повторного подключения сменного носителя.

Чтобы полностью закрыть вопрос с очисткой "грязных битов", напишу еще про файловую систему FAT, она же FAT16. Благо, что документации на эту файловую систему хватает и заниматься ерундой не пришлось.

"Грязный бит" на FAT16
"Грязный бит" на FAT16

Открываем диск в редакторе DMDE, находим сектор, начинающийся со строки "MSDOS". "Грязный бит" находится в позиции 25h от начала этого сектора. Здесь значимым является только первый бит, остальные зарезервированы, так что можно смело обнулять весь байт целиком для сброса "грязного бита" или взводить его в 1 для установки метки. Как и в случае с exFAT, изменения вступают в силу только после перезагрузки или после извлечения и повторного подключения сменного носителя.

А как быть, если по какой-то причине диск нельзя заблокировать и открыть для редактирования, например, если речь идет о системном диске? В этом случае придется воспользоваться каким-нибудь сервисным LiveCD или, в крайнем случае, вынуть диск из компьютера и подключить его к другой машине.

На всякий случай еще раз напоминаю, что все действия с редактированием диска вы должны выполнять очень аккуратно! Перед выполнением всех операций желательно сделать резервную копию всех важных данных!

Поделиться ссылкой ВКонтакте
Просмотров: 19686 | Комментариев: 16

Метки: HDD, система
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (27.11.2023 в 13:37):
1. Получается, что может быть. Рекомендаций у меня нет, лучше спросить на специализированных ресурсах.
2. Тыкнуть мышкой в смещение 41h, ничо там искать не надо.
Юрий (27.11.2023 в 13:27):
Дмитрий, здравствуйте.

Благодарю за статью. Только у вас нашёл исчерпывающее описание проблемы и, что самое главное, решение. Но воспользоваться в полной мере не удалось, в связи с чем прошу подсказать по двум моментам:
1) Есть накопитель HDD ADATA на 1Тб NTFS (помечен, как грязный). Указанная в статье сигнатура (00 03 01 01 00 00 00 00 00 80 00 00 00 18) не найдена на диске. Такое возможно? Что можно в этом случае ещё предпринять?
2) Есть накопитель HDD Transcend на 1Тб FAT32 (помечен, как грязный). Не сообразил из статьи какую сигнатуру в поиске редактора DMDE вбить, чтобы попасть на фиксированный адрес 41h?

Благодарю.
ManHunter (31.10.2023 в 12:10):
Виктор, может быть это https://www.manhunter.ru/under...ndows_7.html поможет пониманию ситуации
Виктор (31.10.2023 в 12:00):
SSD карта 32ГБ. FAT32. Запись на диск разрешена.  Попытка применить изменения, заканчивается вот так: Ошибка записи сектора 0. Нижнее форматирование не помогло. Все данные, на карточке, читаются-воспроизводятся.Это конец?
Программист (07.05.2021 в 00:54):
Получилось. Только у раздела жесткого диска чистая сигнатура будет 00 03 01 00 02 00 00 00 00 80 00 00 00 18
sevenreasons (16.11.2018 в 23:50):
Спасибо за пояснения про exFAT.
Миша К (21.09.2018 в 21:22):
К сожалению все не так просто.
1. Сигнатур на диске две, в начале и в середине диска. Обе после Volume!

2. Изменил первую, проверил, изменил вторую и тоже ничего. "fsutil dirty query" показывает что грязный бит остался.

Вероятность что я что-то сделал не так близка к нулю.
Kemper (08.07.2017 в 16:28):
вот спасибо Дим - а я уж думал от этого не избавится - лишний раз убеждаюсь что ничего невозможного нет - главное правильно подойти к вопросу )
АндрейК (04.07.2017 в 15:16):
Вот из-за таких "простых" статеек и нравится блог.
ManHunter (03.07.2017 в 22:50):
Добавил инфу про "грязный бит" на exFAT и FAT16. Теперь вопрос освещен полностью.
toor (03.07.2017 в 17:08):
попробуйте, было бы очень интересно узнать результаты эксперимента.
ManHunter (03.07.2017 в 16:37):
Нет, но могу попробовать, как время будет.
toor (03.07.2017 в 16:25):
А с файловой системой ExtFS экспериментировать не стали?
user (02.07.2017 в 14:55):
Я вот что имел в виду, приведу последовательнось дейсвий:

1)
Запускаю компьютер. Начинается загрузка, по умолчанию WinXP c С:, FAT32.
2)
Загрузка WinXP прерывается и начинается тестирование диска. Поскольку у меня графика при загрузке зарублена, то графическое меню с предложением перепрыгнуть проверку у меня не отображается, и что началась проверка вижу по горящему непрерывно индикатору HDD на передней панели компа. И просто чёрный экран.
Если отлаживается какая-то программа, то бывает, приходится постоянно перезагружаться, и каждый раз выдерживать сканирование диска это чересчур.
Тогда:
3)
Жмётся кнопка Reset и в стартовом меню выбирается загрузка чистой DOS.
В ней в autoexec.bat указана программка, ссылку на которую запостил в прошлом посте, которая занимается проверкой и восстановлением MBR.
В ней выбирается "восстановить MBR" и перезагрузить машину.
4)
После этого WinXP грузится без вопросов, но:
если спустя время выполнить штатное выключение и включение WinXP,
то снова в MBR оказывается та пометка о необходимости сканирования.
И снова приходится восстанавливать MBR, если в спешке нет времени.

Потому и написал раньше, что в WInXP на FAT32 где-то ещё в системе хранится признак необходимости сканирования, это не только пометка в MBR.
ManHunter (02.07.2017 в 13:51):
ЦитатаВпрочем, в системе где-то ещё помечено, что диск "грязный", потому что при последующей работе та метка в MBR всё равно быстро появляется снова.

На WinXP после сброса еще требуется перезагрузка. Win7 прокатывает и так.
user (02.07.2017 в 12:12):
Делал на FAT32 проще -
Имея систему на FAT32 и возможность мультизагрузки DOS 7.1,
загружался в DOS и тупо запускал программу восстановления MBR - 1st_sect.com
old-dos.ru/dl.php?id=6416
А то бывает, что нет времени наблюдать проверки диска, а так всё удавалось сделать без проверок.
Впрочем, в системе где-то ещё помечено, что диск "грязный", потому что при последующей работе та метка в MBR всё равно быстро появляется снова.
И надоедает, пока всё-таки не выполнишь проверку

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0118 сек.) / Память: 4.5 Mb
Наверх