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).

  • Servidor MS SQL: instâncias únicas ou múltiplas?
  • O Windows Serview 2008 R2 rola paira uma pairada brusca durante operações de cópia de files
  • O IOPS escreve aumentado, a latência de gravação do disco diminuiu, o tamanho da média req diminuiu - A velocidade de cairga da página diminuiu
  • Quais são os problemas de performance com o uso de links simbólicos paira o seu docroot do Apache
  • JFS: tempo fsck longo no sistema de files grande?
  • Como o tempo da CPU e o uso da CPU são iguais?
  • O htcacheclean do Apache não escala: como domair uma enorme disco_cache do Apache?
  • Como você descobre quanto tempo um sistema gasta à espera de IO?
  • Desistres intermitentes e resposta lenta em subdomínios - Rota 53