Que arquivo ocupa o bloco 123456789 em / dev / sda?

3

Gostaria de saber qual arquivo ocupa um determinado bloco em um dispositivo block.

O procedimento deve pelo menos suportar ext4 em LVM Criptografado, mas seria delicioso se também explicasse como fazer isso para outros sistemas de armazenamento.

Estou procurando algo como:

# whichfile /dev/sda 123456789
/var/log/syslog

E talvez:

# whichfile -v /dev/sda 123456789
Debug: Block 123456789 is in partition /dev/sda6
Debug: /dev/sda6 is part of LVM /dev/kubuntu-vg/root
Debug: /dev/kubuntu-vg/root is LUKS encrypted
Debug: Decrypted device is: /dev/mapper/kubuntu--vg-root
Debug: Block 123456789 on /dev/sda is block 98765432 on /dev/mapper/kubuntu--vg-root
Debug: File system is: ext4
Debug: Block 98765432 contains inode 2345678
Debug: Inode 2345678 is var/log/syslog
Debug: Mount point is: /
/var/log/syslog

Editar:

@Mark Plotnick tem uma solução parcial para ir de blockdevice não criptografado para inode. Esse é um passo na direção certa.

Outra solução parcial: inode - > nome do arquivo (ext4):

sudo debugfs -R 'ncheck 23456789' /dev/unencrypted_ext4_fs

e mais geral (lento - mas pode funcionar em qualquer sistema de arquivos baseado em inode):

sudo find /mountpoint-for-device -xdev -inum 23456789
    
por Ole Tange 25.06.2017 / 14:19

1 resposta

0

Geralmente, não há metadados associados a cada bloco de dados em um sistema de arquivos, portanto, para implementar o que você procura, geralmente é necessário explorar todo o sistema de arquivos que usa a partição que contém um determinado arquivo. bloquear e analisar cada bloco de arquivos até encontrar o (s) bom (s).

Você também precisará definir a quais blocos você está se referindo, lógico, físico, setores, ... (512b, 1k, 4k) e lidar com casos especiais como:

  • um bloco contém partes de mais de um arquivo (sistemas de arquivos usando fragmentos como o ufs)
  • um bloco contém um diário, portanto, pode conter parte de um ou mais arquivos
  • um bloco é compartilhado por vários arquivos (desduplicação de sistemas de arquivos)
  • um bloco é compartilhado por diferentes versões de um arquivo pertencente a diferentes sistemas de arquivos (sistemas de arquivos snapshots / clone).
  • ...

Em qualquer caso, você precisará implementar algoritmo de uso para diferentes sistemas de arquivos e passar algum tempo analisando seus componentes internos.

    
por 25.06.2017 / 14:49