web-dev-qa-db-fra.com

Trouvez rapidement quel (s) fichier (s) appartient à un numéro d'inode spécifique

Je connais cette commande:

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

mais c'est une recherche très lente, j'ai l'impression qu'il doit y avoir un moyen plus rapide de le faire. Quelqu'un connaît-il une méthode plus rapide?

49
Alex

Pour un système de fichiers ext4, vous pouvez utiliser debugfs comme dans l'exemple suivant:

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

La réponse n'est pas immédiate, mais semble être meilleure que find.
La sortie obtenue peut être facilement analysée pour obtenir le nom de fichier.

35
enzotib

btrfs

man btrfs-inspect-internal dit:

   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

Exemple:

  • Sudo btrfs inspect-internal inode-resolve 15380 /home
7
Tom Hale

Quelque part dans la machine, il y a une liste de tous les INODE.

Ce problème est analogue à un annuaire téléphonique. Il s'agit d'une liste de noms et les numéros de téléphone peuvent être utilisés par plusieurs personnes. Si vous souhaitez rechercher par numéro, pour voir qui partage ce numéro, cela va prendre beaucoup de temps à moins que quelqu'un ne crée un annuaire téléphonique à recherche inversée.

Mieux vaut créer une base de données à recherche inversée, organisée comme l'annuaire téléphonique à recherche inversée.

Ce problème peut être résolu avec deux scripts (je ne suis pas très programmeur ... vous vous moqueriez probablement du code que j'écris).

SCRIPT1: créez la table de recherche inversée. Effectuez une "recherche" sur tous les fichiers et créez un tableau à deux colonnes d'INODE, FILENAME. Triez et combinez en un tableau, les FILENAMES qui partagent le même numéro INODE.

(vous pouvez construire un arbre binaire et accéder rapidement à votre nouvelle liste).

SCRIPT2: recherche votre nouvelle liste inversée et extrait le tableau des FILENAMES.

Le seul véritable inconvénient, c'est que vous ne pouvez pas le faire en temps réel. Les INODES changent toujours et si vous avez besoin d'informations à jour, vous devrez régénérer votre table.

0
Craig

Vous pouvez regarder la commande fsdb, trouvée sur la plupart des Unices, et disponible quelque part pour Linux, j'en suis sûr. Il s'agit d'une commande puissante vous permettant d'accéder à la structure inode in-core des fichiers, alors soyez prudent. La syntaxe est également très laconique.

fsdb pour AIX

fsdb re-link file on Solaris

Bien que fsdb ne vous permette pas réellement de découvrir le nom de fichier de l'inode, il ne vous permet d'accéder directement à l'inode lorsque vous le spécifiez, en substance " le portage "vers le fichier lui-même (ou du moins ses pointeurs de bloc de données), c'est donc plus rapide à cet égard que la recherche ;-).
Votre question ne précise pas ce que vous voulez faire du fichier. Êtes-vous en train de décoder des descripteurs de fichiers NFS?

caroline du Sud.

0
swisscheese