Trova rapidamente quali file appartengono a un numero di inode specifico


44

Conosco questo comando:

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

ma è una ricerca molto lenta, penso che ci debba essere un modo più veloce per farlo. Qualcuno conosce un metodo più veloce?


Questa è la prima volta che vedo una ricerca usando inode. Quando devi cercare per inode?
Coren,

@Coren - è comunemente usato se hai un file con, per esempio, un "-" davanti. Puoi fare ls -li per trovarne l'inode, quindi: trova. -inum <inodo> -exec rm -i {} \; Questo è un approccio di tipo cintura e rinforzi per garantire che sia possibile rimuovere il file. Naturalmente, potresti anche 'rm - -filename', o rm ./-filename, o rm "-filename".
swisscheese

2
@Coren con selinux, i messaggi di log includono l'inode, ma non il percorso completo. Quindi devi cercare l'inode per trovare il file a cui fai riferimento. (questo è il mio caso d'uso)
Patrick

1
@Coren Ad esempio, quando un file ha più hard link, hai notato che il contenuto è obsoleto e vuoi eliminare il file, ma hai trovato solo uno dei nomi del file e vuoi eliminare gli altri.
Gilles 'SO-smetti di essere malvagio' il

2
Basta usare find / -inum <inode>. È molto più portatile di debugfse funziona in modo molto più affidabile (può trovare percorsi che non appartengono ai file sul disco rigido, come i dispositivi, ad esempio).
7heo.tk,

Risposte:


33

Per un filesystem ext4, è possibile utilizzare debugfscome nell'esempio seguente:

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

La risposta non è immediata, ma sembra essere migliore di find.
L'output ottenuto può essere facilmente analizzato per ottenere il nome file.


Probabilmente avrei dovuto specificare il tipo di filesystem. Non mi è venuto in mente che il metodo di fare queste cose sarebbe diverso per diversi filesystem. Sto usando XFS, quindi mentre sono sicuro che la tua risposta è corretta, non mi aiuterà in modo specifico.
Alex

6

btrfs

man btrfs-inspect-internal dice:

   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

Esempio:

  • sudo btrfs inspect-internal inode-resolve 15380 /home

0

Potresti guardare il comando fsdb, che si trova sulla maggior parte degli Unices, e disponibile da qualche parte per Linux, ne sono sicuro. Questo è un potente comando che ti consente di accedere alla struttura di inode dei file nel core, quindi fai attenzione. Anche la sintassi è molto concisa.

fsdb per AIX

fsdb ricollega il file su Solaris

Mentre fsdb non sarà effettivamente permetterà di scoprire il nome del node, non consentono di accedere direttamente nell'inode quando si specifica che, in sostanza "porting" di file stesso (o almeno è puntatori di blocchi di dati), quindi è più veloce in questo senso rispetto alla scoperta ;-).
La tua domanda non specifica cosa vuoi fare con il file. Stai forse decodificando i filehandle NFS?

sc.


Beh, non pensavo che quello che avrei fatto con le informazioni fosse rilevante per la mia domanda, quindi l'ho lasciato fuori. Nel mio caso, era solo una domanda di curiosità; la mia deframmentazione xfs_fsr sputa quali inode deframmenta, e uno era estremamente frammentato (oltre 5000 estensioni) ed ero solo curioso di sapere quale file fosse. findfunziona, è così lento.
Alex

Sto cercando di risolvere un problema in cui il mio rhel vm esegue un errore completo (20 minuti!) Ad ogni avvio e tutto ciò che devo fare è il numero di inode riportato in / var / opt / messages come difettoso. (Detto questo, trova -inum non l'ha effettivamente trovato)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.