Como faço para listar os blocos de dados de um arquivo no Linux?

13

Pelo que entendi, cada arquivo em um sistema operacional Unix-like tem um número inode (que pode ser visto com "ls -i"), e cada inode é uma lista de blocos de disco que contém os dados reais de um arquivo.

Existe um comando do Linux que usa um nome de arquivo como argumento e imprime a lista de blocos de disco para os quais o inode desse arquivo aponta?

P.S. O sistema de arquivos em questão é ext3.

    
por mike 22.06.2009 / 19:59

6 respostas

17

Você pode usar a ferramenta "debugfs" para visualizar as informações do arquivo na linha de comando ou no interactivley. use:

# debugfs /dev/<spartition>
# stat /path/to/file

ou

# debugfs -R "stat /path/to/file" /dev/<partition>

por exemplo:

# debugfs -R "stat /etc/passwd"  /dev/sda5
Inode: 435914   Type: regular    Mode:  0644   Flags: 0x0
Generation: 979004472    Version: 0x00000000
User:     0   Group:     0   Size: 1577
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun  8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun  8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1
    
por 22.06.2009 / 20:28
4

Veja a sintaxe de "debugfs" e especificamente o comando "stat". Isso mostrará uma lista dos blocos de dados usados por um arquivo. Você pode passar parâmetros para "debugfs" com o argumento "-f" para chamá-lo de um script.

    
por 22.06.2009 / 20:27
4

Uma maneira simples de obter a lista de blocos (sem precisar ler a partição como nas respostas debugfs ) é usar o FIBMAP ioctl. Não conheço nenhum comando para fazer isso, mas é muito simples escrever um; uma rápida pesquisa no Google me deu um exemplo de uso do FIBMAP , que faz exatamente o que você quer . Uma vantagem é que ele funcionará em qualquer sistema de arquivos que suporte a operação bmap , não apenas ext3.

Uma alternativa mais recente (e mais eficiente) é o FIEMAP ioctl, que também pode retornar informações detalhadas sobre extensões (útil para o ext4).

    
por 22.06.2009 / 20:49
3
hdparm --fibmap /path/to/filename

Eu não vou trabalhar no zfs, mas no ext4, btrfs, (v) gordura, etc

man 8 hdparm :

--fibmap When used, this must be the only flag given. It requires a file path as a parameter, and will print out a list of the device extents (sector ranges) occupied by that file on disk. Sector numbers are given as absolute LBA numbers, referenced from sector 0 of the physical device (not the partition or filesystem). This information can then be used for a variety of purposes, such as examining the degree of fragmenation of larger files, or determining appropriate sectors to deliberately corrupt during fault-injection testing procedures.

    
por 30.11.2018 / 16:13
1

Pelo menos em algumas máquinas Linux ... "ls -s" pode fornecer o que você está procurando.

Edit: meu mal, vejo que você está procurando uma lista dos blocos em si, não uma contagem deles.

    
por 22.06.2009 / 20:09
-2

e2fsck -b 32768 / dev / hda1 eu sinto que você pode tentar isso ou se você está procurando mais docx no mesmo u pode verificar a seguir

link

    
por 22.06.2009 / 20:35