2015-07-05

waqur: (Евро)
Популярный драйвер файловой системы NTFS с открытым исходным кодом, ntfs-3g, как оказалось, не поддерживает воспроизведение журнала файловой системы, $LogFile. Этот журнал бывает в двух форматах, 1.1 (NT 4.0+) и 2.0 (Windows 8+), однако не поддерживаются оба.

При монтировании ФС журнал просто проверяется на пустоту, и если он непуст, тогда fuse-драйвер выдаёт ошибку и выходит (это не касается readonly режима монтирования). Ошибку монтирования можно преодолеть, указав "-o force", тогда журнал будет просто сброшен/проигнорирован. С потерей целостности метаданных файловой системы, разумеется.

Windows 8, Windows 8.1 и готовящаяся к выпуску Windows 10 с настройками по-умолчанию при получении от пользователя команды "выключить компьютер" уходят в hibernate в состоянии logout'а (это называется fast startup или hybrid boot). Разумеется, они это делают с грязными журналами файловой системы и реестра. Сброс/игнор такого длинного журнала влечёт тяжёлые последствия, вплоть до полной незагружаемости подопытной винды, поэтому авторы ntfs-3g не придумали ничего лучше, чем просто запрещать монтирование файловой системы по условию (( обнаружен hiberfile.sys )&&( $LogFile в формате 2.0 )&&( $LogFile непуст )&&(! readonly mount )). ntfs-3g при этом что-то лопочет в консоль про "Metadata kept in Windows cache, refused to mount", но на опции "-o remove_hiberfile" и "-o force" уже не реагирует.

Форумы всяких там Уебунтоводов и Маководов примерно уже год как заполнены стенаниями по этому поводу. Но увы: насильное выкусывание соответствующей проверки из исходного кода libntfs-3g показало, что после не более чем 3-5 монтирований в таких условиях нарушается целостность хайвов реестра. Логика ошибки "Metadata kept in Windows cache, refused to mount" такова: чтобы винда при следующей загрузке не выпала в BSoD, походу вусмерть покоцав файловую систему на диске C:, надобно снести hiberfile; чтобы безопасно снести этот hiberfile и ничего вокруг не поломать, нужно сначала воспроизвести журнал файловой системы; однако воспроизводить журналы мы, увы, не умеем, а просто игнорировать их, начиная со времён Windows 8+, стало опасно; так что в сад, все в сад. Вопреки распространённому мнению, утилита ntfsfix журналы тоже не понимает и не применяет, хотя и может очистить дванольный журнал, чтобы ntfs-3g mount наконец заткнулся. Про последствия для хайвов реестра см.выше.

Пришло время наконец реализовать поддержку проигрывания $LogFile в ntfs-3g, котаны!

Кстати, Tuxera продаёт ещё и платную версию своего драйвера, работающую в режиме ядра, например для той же макоси, а также Embedded версию для встраиваемых систем. Однако, как показывает дизассемблер IDA, внутри той красивой обёртки вовсе не конфетка, а то же самое г*вно. Зато копирайтеры стараются не покладая рук: обещания ultimate reliability, always safe, fail-safe by design, 100% data consistency и так далее мы видим на главной tuxera.com и на многих страницах продуктов.

Как известно, обещать — не значит жениться. А делать поисковую оптимизацию — не значит программировать.

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Автор стиля

Развернуть

No cut tags
Page generated 2025-09-01 02:02 pm
Powered by Dreamwidth Studios