Я знаю эти вещи о запоминающих устройствах:

  • Они разделены на две части: таблица файлов и данные файла
  • То, как эти работы продиктованы файловой системой
  • Все файловые системы имеют файловую таблицу и данные файла
  • Таблица файлов может быть изменена без изменения данных файла, и наоборот
  • Файл может быть удален из таблицы файлов для быстрого удаления без фактического удаления данных файла.

Итак, мой вопрос: когда вы изменяете файловую систему на диске (или "форматируете"), почему все данные файла должны быть потеряны? Разве компьютер не может просто запомнить таблицу файлов и заново создать ее в формате новой системы?

Я уверен, что вы столкнетесь с некоторыми проблемами с полностью заполненным диском, если новой файловой системе требуется таблица большего размера, чем старой, но кроме этого, я не понимаю, почему это невозможно сделать.

Я также знаю, что после "быстрого форматирования" (когда заменяется только таблица файлов, но новая таблица пуста), все данные файла все еще там и могут быть восстановлены с помощью криминалистических инструментов.

3 ответа3

2

Они разделены на две части: таблица файлов и данные файла

Полу-правда, на практике большинство файловых систем будет хранить некоторые метаданные в фиксированных местах и другие метаданные в виде "специальных файлов". Какие именно метаданные хранятся, где будет зависеть от файловой системы.

Часто фиксированные местоположения не все в начале, но так или иначе распределены по объему хранилища.

Итак, мой вопрос: когда вы изменяете файловую систему на диске (или "форматируете"), почему все данные файла должны быть потеряны? Разве компьютер не может просто запомнить таблицу файлов и заново создать ее в формате новой системы?

Конвертировать файловую систему на месте сложно по нескольким причинам.

  1. Расположение метаданных почти наверняка будет другим, в основном это означает, что вам нужно хранить все старые метаданные, пока не будут созданы все новые метаданные.
  2. Метаданные могут быть слишком большими для хранения в памяти. Поэтому просто читать все старые метаданные, а затем записывать все новые на основе копии в памяти, не является хорошим вариантом.
  3. Большинство файловых систем хранят важные метаданные в фиксированных местах. Это означает, что для многих преобразований инструмент не может просто создать новые метаданные "в промежутках", оставленные старыми данными / метаданными.
  4. Сами данные могут храниться по-разному, например, кластеры NTFS всегда выровнены, тогда как в FAT это не обязательно. Некоторые файловые системы могут сжимать данные.

Ни одна из этих проблем не является непреодолимой, но они означают, что написание преобразователя файловой системы является сложной задачей и что его запуск часто несет в себе немаловажный риск потери данных.

Мне известны следующие конвертеры.

  • Windows 98 и ME поставляются с конвертером, который может конвертировать из FAT16 в FAT32. В Windows 98 это хорошо видно, но в Windows ME они сделали это только из командной строки.
  • Windows 2000 и более поздние версии поставляются с конвертером, который может конвертировать из FAT16 и FAT32 в NTFS. Опять же, этот конвертер только для командной строки. Также AIUI процесс преобразования иногда приводит к кластерам 512 байт из-за проблемы выравнивания, о которой я упоминал выше.
  • Инструменты для BTRFS поставляются с программой, которая может конвертировать ext2/3/4 в BTRFS.
  • Для Linux существует инструмент под названием fstransform, readme утверждает, что он поддерживает ext2, ext3, ext4 и reiserfs. Кажется, он использует некоторые приемы с разреженными файлами, чтобы заставить драйверы файловой системы в ядре выполнять тяжелую работу, и поэтому теоретически может работать с любой файловой системой Linux, которая поддерживает определенные функции. По-видимому, существует также некоторая экспериментальная поддержка NTFS ( https://github.com/cosmos72/fstransform/issues/1 ).
1

Вы, кажется, думаете, что на устройстве хранения есть две отдельные, четко определенные области: "таблица файлов" (метаданные) и "данные файла" (данные), так что вы можете оставить область данных нетронутой, пока область метаданных стирается и воссоздается.

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

Например, у вас есть FAT32 с его областью метаданных в начале устройства хранения, плюс каталоги, смешанные с данными; NTFS, у которой IIRC имеет свою основную область метаданных (MFT) в фиксированном месте в середине устройства хранения данных; семейство ext (ext2, ext3, ext4), которое разделяет устройство хранения на "группы блоков", каждая из которых имеет свои собственные метаданные в фиксированных местах, поэтому у вас есть несколько областей метаданных, распределенных по всему устройству хранения, плюс каталоги, хранящиеся в виде специальных файлов; и btrfs, который использует древовидную структуру, в которой большинство метаданных может находиться практически где угодно.

Как видите, данные в одной файловой системе могут перекрываться с метаданными в другой файловой системе. Для преобразования из одной файловой системы в другую инструмент преобразования должен не только преобразовывать структуру каталогов, но и часть данных. Это можно сделать (см., Например, преобразование из ext3/ext4 в btrfs), но, поскольку это сложно и редко делается (большинство устройств хранения данных отформатированы один раз с одной файловой системой и продолжают использовать его до конца своей жизни), не так много стимул для его реализации (и тестирования), что несколько важно при работе с данными вашего пользователя).

0

Когда вы изменяете файловую систему на диске (или "форматируете"), почему все данные файла должны быть потеряны?

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

Если у вас есть носитель с данными на нем, вы можете легко изменить структуру файловой системы от одного к другому (например, FAT -> ext3) любым количеством способов. Это не очень часто делается конечными пользователями или в многопользовательских средах. Подход варьируется в зависимости от деталей, которые вы не предоставили. Обратите внимание, что не все ваши предположения обязательно верны.

Чтобы узнать больше о проверке файловых систем http://en.wikipedia.org/wiki/Filesystems.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .