it-swarm-eu.dev

Rychle vyhledejte, které soubory patří k určitému číslu inodu

Vím o tomto příkazu:

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

ale je to velmi pomalé vyhledávání, mám pocit, že musí existovat rychlejší způsob, jak toho dosáhnout. Zná někdo rychlejší metodu?

49
Alex

Pro souborový systém ext4 můžete použít debugfs jako v následujícím příkladu:

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

Odpověď není okamžitá, ale zdá se být lepší než find.
Získaný výstup lze snadno analyzovat a získat název souboru.

35
enzotib

btrfs

man btrfs-inspect-internal říká:

   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

Příklad:

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

Někde ve stroji je seznam všech INODE.

Tento problém je analogický telefonnímu seznamu. Jde o seznam jmen a telefonní čísla může používat více než jedna osoba. Pokud chcete vyhledat podle čísla, zjistit, kdo toto číslo sdílí, bude trvat dlouho, dokud někdo nevytvoří telefonní seznam zpětného vyhledávání.

Lepší je vytvořit databázi reverzního vyhledávání, uspořádanou jako telefonní seznam zpětného vyhledávání.

Tento problém lze vyřešit dvěma skripty (nejsem moc programátor ... pravděpodobně byste se smáli tomu kódu, který píšu).

SCRIPT1: Vytvořte tabulku zpětného vyhledávání. Udělejte „najděte“ všechny soubory a vytvořte tabulku INODE, FILENAME se dvěma sloupci. Třídit a kombinovat do pole, FILENAMES, které sdílejí stejné INODE číslo.

(můžete vytvořit binární strom a rychle přistupovat ke svému novému seznamu).

SCRIPT2: Prohledá váš nový reverzní seznam a vytáhne pole FILENAMŮ.

Jedinou skutečnou nevýhodou je, že to nemůžete udělat v reálném čase. INODES se vždy mění a pokud potřebujete aktuální informace, musíte tabulku znovu vygenerovat.

0
Craig

Mohli byste se podívat na příkaz fsdb, který byl nalezen ve většině Unices, a jsem si jistý, že je někde k dispozici pro Linux. Jedná se o výkonný příkaz, který vám umožní přístup k vnitřní struktuře inode souborů, takže buďte opatrní. Syntaxe je také velmi napjatá.

fsdb pro AIX

fsdb znovu propojit soubor na Solaris

Zatímco fsdb vám ve skutečnosti neumožní objevit název souboru inode, umožňuje přímý přístup k inodu, když jej zadáte, v podstatě " přenesením vás do samotného souboru (nebo alespoň na jeho ukazatele datových bloků), takže je v tomto ohledu rychlejší než najít ;-).
Vaše otázka neurčuje, co se souborem chcete dělat. Jste dekódování souborů NFS?

sc.

0
swisscheese