Esta é uma pergunta obscura, eu sei. Estou tentando fazer alguns testes de desempenho de alguns discos em uma caixa Linux. Estou obtendo resultados inconsistentes, executando o mesmo teste no mesmo disco. Eu sei que os discos têm desempenho diferente dependendo da parte do disco que está sendo acessada. Em particular, as leituras e gravações na parte externa do disco têm uma taxa de transferência muito maior do que as leituras e gravações na parte interna do disco, devido à densidade de dados quase constante e à velocidade de rotação constante.
Gostaria de ver se minhas inconsistências podem ser atribuídas a essa variação na taxa de transferência induzida pela geometria. É possível, usando as ferramentas existentes, descobrir onde o arquivo foi colocado no disco?
Caso contrário, suponho que posso escrever algo para buscar, ler e gravar diretamente no próprio arquivo do dispositivo, ignorando (e destruindo) o sistema de arquivos, mas espero evitar isso. Atualmente, estou usando o ext4 em um kernel 3.0 (Arch Linux, se for o caso), mas também estou interessado em técnicas para outros sistemas de arquivos.
fonte
Respostas:
Você pode usar
debugfs
para isso:Altere a unidade de disco rígido / partição adequadamente e verifique se a unidade está desmontada. Você receberá uma lista com todos os blocos usados:
fonte
Você pode usar o FIBMAP ioctl , como exemplificado aqui , ou usando hdparm :
fonte
HDIO_GETGEO failed: Inappropriate ioctl for device
Este tópico pode fornecer algumas dicas sobre o algoritmo de posicionamento de arquivos ext4.
debugfs
tem umabmap
função, que parece fornecer os dados que você deseja. Você deve conseguir blocos consecutivos de um arquivo e obter os números físicos dos blocos.fonte
A pergunta é bastante antiga, mas há outra resposta que pode ser útil para quem encontra isso no Google:
filefrag
(no Debian está dentro do pacotee2fsprogs
).Tem a vantagem de funcionar também para outros sistemas de arquivos (eu o usei para UDF), que não parecem ser suportados por outras ferramentas descritas aqui.
O deslocamento apresentado na saída deve ser múltiplo do tamanho do bloco escrito na segunda linha (4096 aqui). Cuidado: os desvios lógicos podem não ser contíguos, pois um arquivo pode ter falhas (quando suportado pelo sistema de arquivos).
fonte