Швидко знайдіть, який файл (и) належить певному номеру inode


44

Я знаю про цю команду:

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

але це дуже повільний пошук, я відчуваю, що повинен бути більш швидкий спосіб зробити це. Хтось знає більш швидкий метод?


Це вперше я бачу пошук за допомогою inode. Коли потрібно здійснити пошук по inode?
Корен

@Coren - зазвичай використовується, якщо у вас є файл, скажімо, "-" попереду. Ви можете зробити ls -li, щоб знайти його inode, тоді: find. -inum <inode> -exec rm -i {} \; Це підхід, пов’язаний з поясом і брекетами, щоб забезпечити можливість видалення файлу. Звичайно, ви можете також "rm - -namename", або rm ./-filename, або rm "-namename".
швейцарський

2
@Coren із selinux, повідомлення журналу містять inode, але не повний шлях. Отже, вам потрібно знайти вкладку, щоб знайти файл, на який посилаються. (це мій випадок використання у будь-якому випадку)
Патрік

1
@Coren Наприклад, коли файл має декілька жорстких посилань, ви помітили, що вміст застарілий і хочете видалити файл, але ви знайшли лише одне з назв файлу та хочете видалити інші.
Жил "ТАК - перестань бути злим"

2
Просто використовуйте find / -inum <inode>. Він набагато більш портативний, debugfsа також працює набагато надійніше (він може знайти шляхи, які не належать до файлів на жорсткому диску, наприклад пристроїв).
7heo.tk

Відповіді:


33

Для файлової системи ext4 ви можете використовувати, debugfsяк у наступному прикладі:

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

Відповідь не негайна, але, здається, краща, ніж find.
Отриманий результат можна легко проаналізувати, щоб отримати ім'я файлу.


Я, мабуть, повинен був вказати тип файлової системи. Мені не прийшло в голову, що метод таких речей буде різним для різних файлових систем. Я використовую XFS, тому, хоча я впевнений, що ваша відповідь правильна, це не допоможе мені конкретно.
Алекс

6

btrfs

man btrfs-inspect-internal каже:

   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

Приклад:

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

0

Ви можете подивитися на команду fsdb, яку можна знайти в більшості Unices, і десь доступна для Linux. Це потужна команда, що дозволяє отримати доступ до структури основних файлів inode файлів, тому будьте обережні. Синтаксис також дуже лаконічний.

fsdb для AIX

Файл повторного посилання fsdb на Solaris

Хоча FSDB НЕ буде на самому ділі дозволить вам відкрити ім'я файлу инода, це робить дозволяє отримати прямий доступ до иноді при вказівці його, по суті , «перенесення» Вам сам (або принаймні це блок даних покажчики) файл , так це швидше в цьому відношенні, ніж знахідка ;-).
У вашому запитанні не вказано, що ви хочете зробити з файлом. Чи можете ви дешифрувати файли файлів NFS?

sc.


Ну, я не вважав, що я збираюся зробити з інформацією, що має відношення до мого питання, тому я її не залишив. У моєму випадку це було лише питання цікавості; моя xfs_fsr дефрагментація виписує, які вкладення дефрагментує, і один був надзвичайно фрагментарним (понад 5000 розширень), і мені було просто цікаво, який це файл. findпрацює, це просто так повільно.
Алекс

Я намагаюся вирішити проблему, коли мій rhel vm робить повний (20 хвилин!) Fsck кожного завантаження, і все, що мені потрібно продовжувати, - це номер inode, повідомлений у / var / opt / messages як несправний. (Сказавши це, find -inum насправді не знайшов його)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.