it-swarm.com.de

Finden Sie schnell heraus, welche Datei (en) zu einer bestimmten Inode-Nummer gehören

Ich kenne diesen Befehl:

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

aber es ist eine sehr langsame Suche. Ich denke, es muss einen schnelleren Weg geben, dies zu tun. Kennt jemand eine schnellere Methode?

49
Alex

Für ein ext4-Dateisystem können Sie debugfs wie im folgenden Beispiel verwenden:

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

Die Antwort ist nicht unmittelbar, scheint aber besser zu sein als find.
Die erhaltene Ausgabe kann leicht analysiert werden, um den Dateinamen zu erhalten.

35
enzotib

btrfs

man btrfs-inspect-internal sagt:

   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

Beispiel:

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

Irgendwo in der Maschine gibt es eine Liste aller INODEs.

Dieses Problem ist analog zu einem Telefonbuch. Es ist eine Liste von Namen, und die Telefonnummern können von mehr als einer Person verwendet werden. Wenn Sie nach Nummer suchen möchten, um zu sehen, wer diese Nummer teilt, wird es lange dauern, bis jemand ein Telefonbuch mit umgekehrter Suche erstellt.

Besser ist es, eine Reverse-Lookup-Datenbank zu erstellen, die wie das Reverse-Lookup-Telefonbuch organisiert ist.

Dieses Problem kann mit zwei Skripten gelöst werden (ich bin kein großer Programmierer ... Sie würden wahrscheinlich über den Code lachen, den ich schreibe).

SCRIPT1: Erstellen Sie die Reverse-Lookup-Tabelle. Führen Sie eine "Suche" für alle Dateien durch und erstellen Sie eine zweispaltige Tabelle mit INODE, FILENAME. Sortieren und kombinieren Sie die FILENAMES, die dieselbe INODE-Nummer haben, zu einem Array.

(Sie könnten einen Binärbaum erstellen und schnell schreiend auf Ihre neue Liste zugreifen).

SCRIPT2: Durchsucht Ihre neue Reverse-Liste und zieht das Array von FILENAMES heraus.

Der einzige wirkliche Nachteil ist, dass Sie dies nicht in Echtzeit tun können. INODES ändern sich immer, und wenn Sie aktuelle Informationen benötigen, müssen Sie Ihre Tabelle neu generieren.

0
Craig

Sie können sich den Befehl fsdb ansehen, der auf den meisten Unices zu finden ist und irgendwo für Linux verfügbar ist, da bin ich mir sicher. Dies ist ein leistungsstarker Befehl, mit dem Sie auf die Inode-Struktur von Dateien im Kern zugreifen können. Seien Sie also vorsichtig. Die Syntax ist auch sehr knapp.

fsdb für AIX

fsdb-Datei unter Solaris neu verknüpfen

Während Sie mit fsdb den Dateinamen des Inodes nicht erkennen können, können Sie mit im Wesentlichen direkt auf den Inode zugreifen, wenn Sie ihn angeben. " portiere "dich auf die Datei selbst (oder zumindest auf Datenblockzeiger), damit es in dieser Hinsicht schneller geht als das Finden ;-).
Ihre Frage gibt nicht an, was Sie mit der Datei tun möchten. Entschlüsseln Sie möglicherweise NFS-Dateihandles?

sc.

0
swisscheese