Como ler MFT no disco rígido USB (NTFS, 1TB)?

3

Estou procurando um método de alto nível para ler as entradas da MFT em um sistema de arquivos NTFS para um disco rígido interno de 1TB da Seagate. A plataforma é o Windows 7.

Eu preciso buscar o nome do arquivo, o tamanho do bloco e o LBA.

Esta é uma tarefa especializada de tal forma que eu preciso escrever um programa para fazer isso?

    
por Thomas Matthews 30.04.2015 / 18:35

1 resposta

5

Essas informações podem ser acessadas por meio do Defrag API. As ferramentas de desfragmentação de terceiros podem expô-lo. Em sistemas Windows recentes (8.1 trabalhos, 7 não testados) você pode usar fsutil para consultá-lo:

C:\>fsutil file queryextents example.txt
VCN: 0x0        Clusters: 0x2        LCN: 0x18f85e

Há também outro subcomando que despeja todas informações de todos os fluxos de dados no arquivo:

C:\>fsutil volume filelayout example.exe

********* File 0x01390000000008dd *********
File reference number   : 0x01390000000008dd
File attributes         : 0x00000020: Archive
...
Stream                  : ::$FILE_NAME
    Attributes          : 0x00000000: *NONE*
    Flags               : 0x0000000c: Resident | No clusters allocated
    Size                : 80
    Allocated Size      : 80
Stream                  : ::$DATA (the main data stream)
    Attributes          : 0x00000000: *NONE*
    Flags               : 0x00000000: *NONE*
    Size                : 1681920
    Allocated Size      : 1683456
    Extents             : 1 Extents
                        : 1: VCN: 0 Clusters: 411 LCN: 8527618

Na saída de ambos os comandos, para cada "extensão" (um intervalo contíguo de clusters), você obtém o "número de cluster virtual" (deslocamento do início do arquivo), número de clusters na extensão e o "cluster lógico" number "(deslocamento do início do volume).

Nota: Arquivos minúsculos, que ajustado no registro base da MFT , são armazenados (" residente ") em seu registro MFT e terão extensões zero. Para aqueles, você Você precisará usar outras maneiras de explorar a própria MFT. (Além disso, em alguns casos, o arquivo pode ser escasso e ter apenas uma pequena parte alocada em disco; o restante é considerado apenas como bytes nulos.)

Os clusters são de nível de sistema de arquivos, então é necessário convertê-los em setores de nível de dispositivo de bloco; meu sistema tem 8 setores por cluster:

C:\>fsutil fsinfo ntfsinfo c:
...
Bytes Per Sector  :               512
Bytes Per Cluster :               4096
...

C:\>set/a 0x18f85e * (4096 / 512)
13091568

C:\>set/a 0x18f85e * 4096
6702882816

Isso significa que você pode abrir \.\C: com HxD ou algo assim e encontrar o início do arquivo no setor 13091568 (ou byte 6702882816).

    
por 30.04.2015 / 20:58