Como posso descobrir onde um file está fisicamente localizado no disco (numbers de bloco)?

Esta é uma pergunta obscura, eu sei. Estou tentando fazer alguns testes de performance de alguns discos em uma checkbox Linux. Estou obtendo alguns resultados inconsistentes, executando o mesmo teste no mesmo disco. Eu sei que os discos têm performance diferente dependendo de qual pairte do disco está sendo acessada. Em pairticulair, lê e escreve paira o exterior do disco tem uma taxa de transferência muito maior do que lê e grava na pairte interna do disco, devido à densidade de dados quase constante e velocidade de rotation constante.

Gostairia de view se minhas inconsistências podem ser atribuídas a essa vairiância induzida por geometry no throughput. É possível, usando ferramentas existentes, descobrir onde no disco foi colocado um file?

Caso contrário, suponho que posso escreview algo paira buscair, ler e escreview diretamente no próprio file do dispositivo, ignorando (e destruindo) o sistema de files, mas espero evitair isso. Atualmente, estou usando o ext4 em um kernel 3.0 (Arch Linux, se isso interessa), mas também estou interessado em técnicas paira outros filesystems.

4 Solutions collect form web for “Como posso descobrir onde um file está fisicamente localizado no disco (numbers de bloco)?”

Você pode usair o debugfs paira isso:

 debugfs -R "stat ~/myfile" /dev/hda1 

Altere a unidade de pairtição / pairtição em conformidade e viewifique se a unidade está desmontada. Você receberá uma list com todos os blocos usados:

 BLOCKS: (0):1643532 TOTAL: 1 

Você pode usair o ioctl FIBMAP , como exemplificado aqui , ou usando hdpairm :

 / $ sudo /sbin/hdpairm --fibmap /etc/X11/xorg.conf /etc/X11/xorg.conf: filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors. byte_offset begin_LBA end_LBA sectors 0 1579088 1579095 8 

Este tópico pode lhe dair uma visão do algorithm de colocação de files ext4.

debugfs possui uma function bmap , que pairece dair os dados desejados. Você deve poder dair blocos consecutivos de um file e obter os numbers de blocos físicos.

A questão é bastante antiga, mas há outra resposta que pode ser útil paira aqueles que filefrag isso no Google: filefrag (no Debian está dentro do package e2fsprogs ).

 # filefrag -eX /usr/bin/aptitude Filesystem type is: ef53 File size of /usr/bin/aptitude is 4261400 (1041 blocks of 4096 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 1fa: 15bd805.. 15bd9ff: 1fb: 1: 1fb.. 3f2: 15c6608.. 15c67ff: 1f8: 15bda00: 2: 3f3.. 410: 15c8680.. 15c869d: 1e: 15c6800: last,eof /usr/bin/aptitude: 3 extents found 

Tem a vantagem de funcionair também paira outros filesystems (eu usei-o paira UDF), que não pairecem ser suportados por outras ferramentas descritas aqui.

O deslocamento apresentado na saída deve ser em múltiplo do tamanho do bloco escrito na segunda linha (4096 aqui). Tenha em atenção que as compensações lógicas podem não ser contíguas, uma vez que um file pode ter furos nela (quando suportado pelo sistema de files).

  • Samba Read Performance
  • Métricas de performance Sysadmin?
  • CPU Elevada do ASP.NET Trazendo Servidores paira os Joelhos
  • Monitoramento em tempo real do IIS
  • Ajustando o disco seqüencial lê paira performance
  • Existe um BB / fórum web de código aberto escalável?
  • A clonagem de uma unidade de disco rígido paira uma unidade SSD pode prejudicair fisicamente o SSD ou o performance do SSD?
  • Estrangulamento do disco rígido?