Вопрос или проблема
У меня есть жесткий диск, на котором часто возникают потерянные файлы индекса, из-за чего невозможно удалить каталоги на нем.
Я использую Ubuntu 22, поэтому я пытаюсь запустить fsck (sudo fsck /dev/sdb2
), и все, что он делает, это возвращает успешный код состояния и выводит “fsck из util-linux 2.37.2” в терминал. Нет задержки, как будто никакой процесс на самом деле не проверяет файлы и подобное. Но проблема остается.
Затем я переключаюсь на Windows 11 (с двухзагрузочной системой, этот жесткий диск является отдельным HDD, а не загрузочным диском) и запускаю команду chkdsk, чтобы сделать то же самое (chkdsk E: /f
), и эта команда действительно проходит через множество проверок и даже исправляет проблему, удаляя все потерянные индексы. Я переключаюсь обратно на Ubuntu, и вуаля, я могу удалить нужный каталог.
Почему fsck ничего не делает в этом случае?
У Linux была долгая и непростая история, когда дело касалось проприетарных технологий Microsoft, таких как SMB, ACPI, и в данном случае файловой системы NTFS.
Чтобы поддерживать файловую систему, вы должны установить драйвер, который знает, как его использовать. В Linux есть два распространенных драйвера: старый NTFS-3g и новый NTFS3. Большинство распространенных дистрибутивов поставляются с одним из них или обоими для использования “из коробки” (у них есть некоторые разные случаи использования, так что лучше иметь оба).
NTFS-3g поддерживает как чтение, так и запись с 2007 года, но многие дистрибутивы ограничили его только операциями чтения на протяжении многих лет, и многие люди отказывались от его использования из-за опасений по поводу зрелости, и было настоятельно рекомендовано не включать операции записи на любой диск, который они ценят. Даже сегодня, когда операции записи и чтения для NTFS в основном включены по умолчанию, NTFS-3G и его поддерживающие утилиты не находятся на 100% уровне с реализацией Microsoft. На самом деле, я бы не удивился, если бы выяснилось, что проблемы, с которыми вы столкнулись с потерянными индексами, были вызваны использованием файловой системы в Linux.
NTFS3 пока не имеет свободно доступных утилит для обслуживания диска в соответствии с их Часто задаваемыми вопросами.
NTFS-3G поставляется с пакетом под названием ntfsfix, который может быть вызван через fsck
(fsck.ntfs). Однако ntfsfix
очень четко указано в его документации:
ntfsfix — это утилита, которая исправляет некоторые распространенные проблемы NTFS. ntfsfix НЕ является Linux-версией chkdsk. Она только исправляет некоторые фундаментальные несовместимости NTFS, сбрасывает файл журнала NTFS и планирует проверку целостности NTFS при первой загрузке в Windows. Вы можете запустить ntfsfix на разделе NTFS, если считаете, что он был поврежден Windows или каким-либо другим способом и не может быть смонтирован.
Таким образом, fsck
может выполнять только подмножество операций восстановления, которые использует chkdsk
при выполнении восстановления файловой системы, и, что касается вашего случая, проверка и восстановление потерянных индексов является одной из этих недостающих возможностей.
Ответ или решение
Причина, по которой fsck
не исправляет проблемы с файловой системой NTFS, в том, что он не является полноценным аналогом команды chkdsk
, которая предназначена для работы именно с NTFS. В Linux есть несколько различных драйверов для работы с NTFS, среди которых наиболее известные — это ntfs-3g
и ntfs3
.
Драйвер ntfs-3g
позволяет осуществлять как чтение, так и запись на NTFS-дисках, однако он не обеспечивает полного функционала, доступного в Windows. Несмотря на то что ntfs-3g
поддерживает операции записи на NTFS с 2007 года, реализация не достигает 100% соответствия с оригинальным Microsoft-программным обеспечением. Из-за этого могут возникать проблемы, такие как «осиротевшие индексы», о которых вы упоминаете. На момент написания большинства дистрибутивов Linux по умолчанию используют ntfs-3g
, что может приводить к несовместимостям и ошибкам файловой системы.
Команда fsck
, которую вы использовали (то есть sudo fsck /dev/sdb2
), фактически вызывает ntfsfix
, что является ограниченной версией для исправления некоторых общих проблем NTFS. Однако, как указано в документации ntfsfix
, это не полноценная замена chkdsk
. Она выполняет лишь базовые проверки и исправления, сбрасывает журнал NTFS и планирует проверку на первой загрузке в Windows. Таким образом, она не может исправить такие специфичные проблемы, как осиротевшие индексы.
Чтобы решить вашу проблему, рекомендуется:
-
Использовать
chkdsk
из Windows, как вы уже сделали, поскольку это наиболее эффективный способ исправления проблем с NTFS. Запустите в командной строке Windows командуchkdsk E: /f
, чтобы устранить ошибки файловой системы. -
Если в дальнейшем вы планируете использовать ваш NTFS-диск на Linux, убедитесь, что все данные на нем правильно синхронизированы и сохранены с использованием Windows, прежде чем приступать к работе с ним в Ubuntu.
-
Если вы все же хотите использовать
fsck
на NTFS-дисках, учтите, что вам нужно использоватьntfsfix
явно, но помните о его ограничениях. Команда будет выглядеть следующим образом:sudo ntfsfix /dev/sdb2
Таким образом, fsck
не справляется с вашей проблемой из-за различий в реализации файловых систем в Linux и Windows, и наилучший способ решения аналогичных проблем — это использование утилит, предназначенных для того, чтобы работать именно с NTFS на Windows.