Как читать MFT на жестком диске USB (NTFS, 1TB)?

1173
Thomas Matthews

Я ищу высокоуровневый метод для чтения записей MFT в файловой системе NTFS для внутреннего жесткого диска Seagate объемом 1 ТБ. Платформа Windows 7.

Мне нужно получить имя файла, размер блока и LBA.

Является ли эта специальная задача такой, что мне нужно написать программу для этого?

3
Существует несколько бесплатных * дисковых редакторов *, которые могут отображать эту информацию, но для этого потребуется вручную выбрать данные для сохранения. DrMoishe Pippik 8 лет назад 0
Я могу сохранить файл на другое устройство хранения, без проблем. У меня проблемы с хранением полного образа жесткого диска. Поэтому я хочу сохранить файл или файлы, использующие эти LBA, на другом диске в целях безопасности, прежде чем использовать часть восстановления Seagate Tool. Thomas Matthews 8 лет назад 0
Macrium Refkect Free, http://www.macrium.com/reflectfree.aspx, может создавать резервные копии всех разделов (и восстанавливать при необходимости). DrMoishe Pippik 8 лет назад 0

1 ответ на вопрос

5
grawity

Эта информация доступна через Defrag API. Сторонние инструменты дефрагментации могут раскрыть его. В последних системах Windows (8.1 работает, 7 не проверено) вы можете использовать fsutilдля запроса:

C: \> файл fsutil queryextents example.txt VCN: 0x0 Кластеры: 0x2 LCN: 0x18f85e 

Существует также другая подкоманда, которая выводит всю информацию для всех потоков данных в файле:

C: \> том fsutil filelayout example.exe  ********* Файл 0x01390000000008dd ********* Ссылочный номер файла: 0x01390000000008dd Атрибуты файла: 0x00000020: Архив ... Поток: :: $ FILE_NAME Атрибуты: 0x00000000: * НЕТ * Флаги: 0x0000000c: Резидент | Кластеры не выделены Размер: 80 Выделенный размер: 80 Поток: :: $ DATA  (основной поток данных) Атрибуты: 0x00000000: * НЕТ * Флаги: 0x00000000: * НЕТ * Размер: 1681920 Выделенный размер: 1683456  Экстенты: 1 Экстенты : 1: VCN: 0 Кластеры: 411 LCN: 8527618 

В выходных данных обеих команд для каждого «экстента» (непрерывного диапазона кластеров) вы получаете «номер виртуального кластера» (смещение от начала файла), количество кластеров в экстенте и «номер логического кластера» ( смещение от начала тома).

Примечание. Крошечные файлы, которые помещаются в базовую запись MFT, сохраняются («резидентные») в своей записи MFT и будут иметь нулевые экстенты. Для этого вам нужно использовать другие способы, чтобы копаться в самом MFT. (Кроме того, в некоторых случаях файл может быть разреженным и иметь только небольшую часть, выделенную на диске; остальная часть считается пустыми байтами.)

Кластеры находятся на уровне файловой системы, поэтому вам необходимо преобразовать их в сектора уровня устройства; моя система имеет 8 секторов на кластер:

C: \> fsutil fsinfo ntfsinfo c: ... Байт на сектор: 512 Байт на кластер: 4096 ...  C: \> set / a 0x18f85e * (4096/512) 13091568  C: \> set / a 0x18f85e * 4096 6702882816 

Это означает, что вы можете открыть \\.\C:с помощью HxD или другого, и найти начало файла в секторе 13091568 (или байт 6702882816).

Похожие вопросы