Ver localização física de um arquivo / diretório em um disco rígido

4

Existe algum programa Linux que ofereça a mesma (ou algumas das) funcionalidades do Sysinternals DiskView, especialmente sendo capaz de visualizar a localização física de um arquivo em um disco rígido?

URL DiskView: link

    
por EmmaV 14.10.2014 / 00:02

1 resposta

8

Para alguns sistemas de arquivos como ext4 ou btrfs no Linux, você pode usar o filefrag para obter os deslocamentos dos segmentos de dados para o arquivo no dispositivo de bloco no qual o sistema de arquivos está ativo.

$ seq 1000 > a
$ filefrag -v a
Filesystem type is: ef53
File size of a is 3893 (1 block of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:   82784147..  82784147:      1:             eof
a: 1 extent found
$ sudo dd bs=4k skip=82784147 count=1 if=/dev/storage/home 2>&- | head
1
2
3
4
5
6
7
8
9
10

Aqui o dispositivo de bloco é um volume LVM. Esse volume pode ter volumes físicos em discos, em partições, em matrizes RAID, em arquivos, na RAM, em dispositivos de bloco de rede ... Pode ser difícil voltar a um disco ou conjunto de discos real.

No meu caso, é relativamente fácil, pois é apenas um volume lógico no topo de uma partição GPT como um trecho linear.

$ sudo dmsetup table /dev/storage/home
0 1953120256 linear 8:98 384

Então, / dev / storage / home é 384 setores dentro do dispositivo 8:98, o que acontece de ser /dev/sdg2 para mim.

$ cat /sys/block/sdg/sdg2/start
489060352

Então, sdg2 é 489060352 setores dentro de / dev / sdg (o sétimo disco deste sistema).

Para obter o deslocamento no único disco em que o arquivo está:

$ sudo dd if=/dev/sdg skip="$((489060352+384+82784147*8))" count=1 2> /dev/null | head
1
2
3
4
5
6
7
8
9
10
    
por 14.10.2014 / 00:34