Encuentre rápidamente qué archivo (s) pertenece a un número de inodo específico


44

Sé de este comando:

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

pero es una búsqueda muy lenta, siento que tiene que haber una forma más rápida de hacerlo. ¿Alguien sabe un método más rápido?


Esta es la primera vez que veo una búsqueda usando inode. ¿Cuándo necesita buscar por inodo?
Coren

@Coren: se usa comúnmente si tiene un archivo con, por ejemplo, un "-" al frente. Puede hacer ls -li para encontrar el inodo del mismo, luego: find. -inum <inode> -exec rm -i {} \; Este es un enfoque de cinturón y brazales para garantizar que pueda eliminar el archivo. Por supuesto, también puede 'rm - -filename', o rm ./-filename, o rm "-filename".
swisscheese

2
@Coren con selinux, los mensajes de registro incluyen el inodo, pero no la ruta completa. Por lo tanto, debe buscar el inodo para encontrar el archivo al que se hace referencia. (ese es mi caso de uso de todos modos)
Patrick

1
@Coren Por ejemplo, cuando un archivo tiene múltiples enlaces duros, ha descubierto que el contenido está obsoleto y desea eliminar el archivo, pero solo ha encontrado uno de los nombres del archivo y desea eliminar los otros.
Gilles 'SO- deja de ser malvado'

2
Solo úsalo find / -inum <inode>. Es mucho más portátil que debugfsy también funciona de manera mucho más confiable (puede encontrar rutas que no pertenecen a archivos en el disco duro, como dispositivos, por ejemplo).
7heo.tk

Respuestas:


33

Para un sistema de archivos ext4, puede usar debugfscomo en el siguiente ejemplo:

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

La respuesta no es inmediata, pero parece ser mejor que find.
La salida obtenida se puede analizar fácilmente para obtener el nombre de archivo.


Probablemente debería haber especificado el tipo de sistema de archivos. No se me ocurrió que el método de hacer estas cosas sería diferente para diferentes sistemas de archivos. Estoy usando XFS, así que aunque estoy seguro de que su respuesta es correcta, no me ayudará específicamente.
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

Ejemplo:

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

0

Podría mirar el comando fsdb, que se encuentra en la mayoría de los Unices, y disponible en algún lugar para Linux, estoy seguro. Este es un comando poderoso que le permite acceder a la estructura de los inodos en el núcleo de los archivos, así que tenga cuidado. La sintaxis también es muy concisa.

fsdb para AIX

fsdb vuelve a vincular el archivo en Solaris

Si bien fsdb en realidad no le permite descubrir el nombre de archivo del inodo, sí le permite acceder directamente al inodo cuando lo especifica, en esencia "portarlo" al archivo en sí (o al menos son punteros de bloque de datos) por lo que es más rápido a ese respecto que el hallazgo ;-).
Su pregunta no especifica qué desea hacer con el archivo. ¿Acaso estás decodificando controladores de archivos NFS?

Carolina del Sur.


Bueno, no pensé que lo que iba a hacer con la información fuera relevante para mi pregunta, así que lo dejé fuera. En mi caso, era simplemente una pregunta de curiosidad; mi desfragmentación xfs_fsr escupe qué inodes desfragmenta, y uno estaba extremadamente fragmentado (más de 5000 extensiones) y tenía curiosidad de saber qué archivo era. findfunciona, es muy lento.
Alex

Estoy tratando de solucionar un problema en el que mi rhel vm realiza un fsck completo (¡20 minutos!) Cada arranque y todo lo que tengo que seguir es el número de inodo informado en / var / opt / messages como defectuoso. (Dicho esto, encontramos -inum en realidad no lo encuentran)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.