Ubuntu fsck, похоже, ничего не делает, но chkdsk исправляет это.

Вопрос или проблема

У меня есть жесткий диск, на котором часто возникают потерянные файлы индекса, из-за чего невозможно удалить каталоги на нем.

Я использую 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. Таким образом, она не может исправить такие специфичные проблемы, как осиротевшие индексы.

Чтобы решить вашу проблему, рекомендуется:

  1. Использовать chkdsk из Windows, как вы уже сделали, поскольку это наиболее эффективный способ исправления проблем с NTFS. Запустите в командной строке Windows команду chkdsk E: /f, чтобы устранить ошибки файловой системы.

  2. Если в дальнейшем вы планируете использовать ваш NTFS-диск на Linux, убедитесь, что все данные на нем правильно синхронизированы и сохранены с использованием Windows, прежде чем приступать к работе с ним в Ubuntu.

  3. Если вы все же хотите использовать fsck на NTFS-дисках, учтите, что вам нужно использовать ntfsfix явно, но помните о его ограничениях. Команда будет выглядеть следующим образом:

    sudo ntfsfix /dev/sdb2

Таким образом, fsck не справляется с вашей проблемой из-за различий в реализации файловых систем в Linux и Windows, и наилучший способ решения аналогичных проблем — это использование утилит, предназначенных для того, чтобы работать именно с NTFS на Windows.

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

Капча загружается...