Como descarregar a lista de inodes usados em um sistema de arquivos ext4 usando o debugfs?

1

[yan@machine ~]$ ls -di /run/media/yan/data
2 /run/media/yan/data

[yan@machine ~]$ lsblk -o NAME,FSTYPE,LABEL,TYPE,SIZE,MOUNTPOINT
NAME   FSTYPE LABEL         TYPE   SIZE MOUNTPOINT
...
sdc                         disk   1.8T 
├─sdc1 vfat   clonezilla    part   512M 
├─sdc2 ext4   live_system   part  14.7G 
├─sdc3 ext4   system_images part 244.1G 
├─sdc4 ext4   data          part 781.3G /run/media/yan/data
└─sdc5 ext4   rec           part 822.5G 

[yan@machine data]$ df -i /run/media/yan/data/
Filesystem       Inodes IUsed    IFree IUse% Mounted on
/dev/sdc4      51200000 74199 51125801    1% /run/media/yan/data

[yan@machine data]$ sudo find /run/media/yan/data | wc -l
23690

Então, parece que eu tenho muitos inodes desconectados, apesar do fsck me dizer que a partição está limpa (mesmo com -f). Eu gostaria de saber onde estão os inodes ausentes (74199-23690). Eu sei que ainda existem no disco porque consegui recuperar 50k usando o photorec.

Então eu tentei usar o debugfs, mas não consigo encontrar em nenhum lugar no manual uma maneira de despejar a lista de inodes alocados. (E a maioria das postagens online usam / ls -i para listar inodes, o que não funciona no meu caso).

Alguém sabe uma maneira de obter a lista de inodes usados de acordo com df / fsck?

Por enquanto, eu estou pensando em inutilmente bruteforce com algo ao longo das linhas de:

for i in 'seq 1 $NMAX'; do debugfs -R 'ncheck $i' | grep $i; done > inodelist

com NMAX grande o suficiente, mas certamente há uma maneira mais eficiente, não?

EDITAR:

Acho que encontrei um caminho possível. dumpe2fs lista todos os blocos e inodes gratuitos para cada bloco. A partir dele, deve ser possível deduzir os inodes usados.

Eu ainda tenho que calcular a lista de "inodes não-livres" e ver se parece (pelo menos na contagem) ser o que eu quero. Da lista, encontrei alguns inodes estranhos aparentemente conectados entre si, mas não à raiz:

debugfs:  pwd
[pwd]   INODE: 45220182  PATH: .../dir1/dir2/dir3/dir4
[root]  INODE:      2  PATH: /
debugfs:  cd ..
debugfs:  pwd
[pwd]   INODE: 44957702  PATH: .../dir4/dir1/dir2/dir3
[root]  INODE:      2  PATH: /
    
por Yann 12.11.2016 / 16:48

1 resposta

1

Eu encontrei uma maneira de obter a lista de inodes usados em um sistema de arquivos ext4. Aparentemente, os fs mantêm trilhas de inodes livres (e deduzem o número de inodes usados por diferença do número total de inodes). Os intervalos de inodes gratuitos podem ser obtidos através de dumpe2fs . Os inodes usados são o complemento dessa lista (requer um pouco de processamento para obter, eu fiz um pequeno script python para fazer isso).

    
por 23.11.2016 / 16:01