Encontre rapidamente qual (is) arquivo (s) pertence a um número de inode específico

41

Eu conheço este comando:

find /path/to/mountpoint -inum <inode number>

mas é uma pesquisa muito lenta, eu sinto que tem que haver uma maneira mais rápida de fazer isso. Alguém conhece um método mais rápido?

    
por Alex 29.03.2012 / 10:04

4 respostas

31

Para um sistema de arquivos ext4, você pode usar debugfs como no exemplo a seguir:

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode   Pathname
393094  /home/enzotib/examples.desktop

A resposta não é imediata, mas parece ser melhor que find .
A saída obtida pode ser facilmente analisada para obter o nome do arquivo.

    
por 29.03.2012 / 16:00
4

btrfs

man btrfs-inspect-internal diz:

   inode-resolve [-v] <ino> <path>
       (needs root privileges)

       resolve paths to all files with given inode number ino in a given
       subvolume at path, ie. all hardlinks

       Options

       -v
           verbose mode, print count of returned paths and ioctl()
           return value

Exemplo:

  • sudo btrfs inspect-internal inode-resolve 15380 /home
por 18.08.2017 / 14:58
0

Você pode ver o comando fsdb, encontrado na maioria dos Unices, e disponível em algum lugar para Linux, tenho certeza. Este é um poderoso comando que lhe permite acessar a estrutura inode dos arquivos, portanto tenha cuidado. A sintaxe também é muito concisa.

fsdb para AIX

arquivo de re-link do fsdb no Solaris

Enquanto o fsdb não permite que você descubra o nome do arquivo do inode, ele faz permitir que você acesse diretamente o inode ao especificá-lo, basicamente "portando" para o arquivo em si ( ou pelo menos é ponteiros de bloco de dados) por isso é mais rápido a esse respeito que o find ;-).
Sua pergunta não especifica o que você quer fazer com o arquivo. Você está, por acaso, decodificando as limas de arquivo NFS?

sc.

    
por 29.03.2012 / 12:59
0

Em algum lugar da máquina, há uma lista de todos os INODEs.

Esse problema é análogo a um catálogo telefônico. É uma lista de nomes e os números de telefone podem ser usados por mais de uma pessoa. Se você quiser pesquisar por número, para ver quem compartilha esse número, levará um longo tempo até que alguém crie um catálogo telefônico de pesquisa inversa.

É melhor criar um banco de dados de pesquisa do reversor, organizado como o catálogo telefônico de pesquisa inversa.

Esse problema pode ser resolvido com dois scripts (eu não sou muito programador ... você provavelmente riria do código que eu escrevo).

SCRIPT1: crie a tabela de pesquisa inversa. Faça um "find" em todos os arquivos, e faça uma tabela de duas colunas de INODE, FILENAME. Classifique e combine em uma matriz os FILENAMAS que compartilham o mesmo número INODE.

(você pode criar uma árvore binária e tornar rápido o acesso à sua nova lista).

SCRIPT2: pesquisa sua nova lista reversa e extrai o array FILENAMES.

A única desvantagem real é que você não pode fazer isso em tempo real. O INODES sempre muda e, se você precisar de informações atualizadas, precisará gerar novamente sua tabela.

    
por 14.09.2013 / 03:09