Trouvez rapidement quel fichier appartient à un numéro d'inode spécifique
44
Je connais cette commande:
find /path/to/mountpoint -inum <inode number>
mais c’est une recherche très lente, j’ai le sentiment qu’il doit y avoir un moyen plus rapide de le faire. Est-ce que quelqu'un connaît une méthode plus rapide?
C'est la première fois que je vois une recherche utilisant inode. Quand avez-vous besoin de rechercher par inode?
Coren
@Coren - il est couramment utilisé si vous avez un fichier avec, par exemple, un "-" devant. Vous pouvez faire ls -li pour en trouver l’inode, puis: find. -inum <inode> -exec rm -i {} \; Il s’agit d’une approche à la ceinture et aux brassards qui vous permet de supprimer le fichier. Bien sûr, vous pouvez aussi "rm - -filename", ou rm ./-filename, ou rm "-filename".
swisscheese
2
@Coren avec selinux, les messages de journalisation incluent l'inode, mais pas le chemin complet. Il faut donc rechercher l’inode pour trouver le fichier référencé. (c'est de toute façon mon cas d'utilisation)
Patrick
1
@Coren Par exemple, lorsqu'un fichier contient plusieurs liens physiques, vous avez remarqué que le contenu est obsolète et souhaitez supprimer le fichier, mais vous n'avez trouvé qu'un seul nom de fichier et souhaitez supprimer les autres.
Gilles 'SO- arrête d'être méchant'
2
Il suffit d'utiliser find / -inum <inode>. Il est beaucoup plus portable que debugfset fonctionne aussi de manière beaucoup plus fiable (il peut trouver des chemins n’appartenant pas à des fichiers sur le disque dur, comme des périphériques, par exemple).
7hé.tk le
Réponses:
33
Pour un système de fichiers ext4, vous pouvez utiliser debugfscomme dans l'exemple suivant:
J'aurais probablement dû spécifier le type de système de fichiers. Je ne pensais pas que la méthode à suivre serait différente selon les systèmes de fichiers. J'utilise XFS. Par conséquent, bien que votre réponse soit correcte, elle ne m'aidera pas spécifiquement.
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
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 de fichiers inode du noyau, soyez donc prudent. La syntaxe est également très concise.
Bien que fsdb ne vous laisse pas réellement découvrir le nom de fichier de l’inode, il vous permet d’accéder directement à l’inode lorsque vous le spécifiez , ce qui vous permet en principe de vous «porter» vers le fichier lui-même (ou au moins ses pointeurs de bloc de données). plus rapide à cet égard que la découverte ;-).
Votre question ne précise pas ce que vous voulez faire avec le fichier. Êtes-vous peut-être en train de décoder les poignées de fichiers NFS?
Eh bien, je ne pensais pas que ce que j'allais faire avec l'information était pertinent pour ma question, alors je l'ai laissé de côté. Dans mon cas, c'était simplement une question de curiosité; ma défragmentation xfs_fsr détermine les inodes qu’elle défragmente, et l’une des deux était extrêmement fragmentée (plus de 5 000 étendues) et j’étais juste curieux de savoir de quel fichier il s’agissait. findça marche, c'est tellement lent.
Alex
J'essaie de résoudre un problème où ma machine virtuelle rhel effectue un fsck complet (20 minutes!) À chaque démarrage et tout ce que j'ai à faire est le numéro d'inode indiqué dans / var / opt / messages comme étant défectueux. (Ceci dit, find -inum ne l'a pas trouvé)
find / -inum <inode>
. Il est beaucoup plus portable quedebugfs
et fonctionne aussi de manière beaucoup plus fiable (il peut trouver des chemins n’appartenant pas à des fichiers sur le disque dur, comme des périphériques, par exemple).Réponses:
Pour un système de fichiers ext4, vous pouvez utiliser
debugfs
comme dans l'exemple suivant:La réponse n'est pas immédiate, mais semble être meilleure que
find
.Le résultat obtenu peut être facilement analysé pour obtenir le nom du fichier.
la source
btrfs
man btrfs-inspect-internal
dit:Exemple:
sudo btrfs inspect-internal inode-resolve 15380 /home
la source
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 de fichiers inode du noyau, soyez donc prudent. La syntaxe est également très concise.
fsdb pour AIX
fsdb relier le fichier sous Solaris
Bien que fsdb ne vous laisse pas réellement découvrir le nom de fichier de l’inode, il vous permet d’accéder directement à l’inode lorsque vous le spécifiez , ce qui vous permet en principe de vous «porter» vers le fichier lui-même (ou au moins ses pointeurs de bloc de données). plus rapide à cet égard que la découverte ;-).
Votre question ne précise pas ce que vous voulez faire avec le fichier. Êtes-vous peut-être en train de décoder les poignées de fichiers NFS?
Caroline du Sud.
la source
find
ça marche, c'est tellement lent.