私はこのコマンドを知っています:
find /path/to/mountpoint -inum <inode number>
しかし、これは非常に遅い検索です。これを行うには、より高速な方法が必要だと感じています。誰かがより速い方法を知っていますか?
Ext4ファイルシステムの場合、次の例のようにdebugfs
を使用できます。
$ Sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode Pathname
393094 /home/enzotib/examples.desktop
答えは即座ではありませんが、find
よりも優れているようです。
取得した出力を簡単に解析して、ファイル名を取得できます。
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
マシンのどこかに、すべてのINODEのリストがあります。
この問題は電話帳に似ています。これは名前のリストであり、電話番号は複数の人が使用する場合があります。番号で検索する場合、その番号を誰が共有しているかを確認するには、誰かが逆引き電話帳を作成しない限り、長い時間がかかります。
逆引きの電話帳のように編成された逆引きのデータベースを作成する方がよい。
この問題は2つのスクリプトで解決できます(私はそれほどプログラマではありません...私が書いたコードをおそらく笑うでしょう)。
スクリプト1:逆引き参照テーブルを作成します。すべてのファイルで「検索」を実行し、INODE、FILENAMEの2列のテーブルを作成します。同じINODE番号を共有するFILENAMESを並べ替えて配列にします。
(バイナリツリーを作成して、新しいリストにすばやくアクセスできます)。
SCRIPT2:新しいリバースリストを検索し、FILENAMESの配列を引き出します。
唯一の欠点は、これをリアルタイムで実行できないことです。 INODESは常に変化するため、最新の情報が必要な場合は、テーブルを再生成する必要があります。
ほとんどのUnicesにあり、Linuxのどこかで利用できるfsdbコマンドを確認できます。これは、ファイルのコア内のiノード構造にアクセスできる強力なコマンドなので、注意してください。構文も非常に簡潔です。
Fsdbは実際にはiノードのファイル名を検出させませんが、doesとすると、本質的に、指定したときにiノードに直接アクセスできます。ファイル自体(または少なくともデータブロックポインター)に移植するので、その点では検索よりも高速です;-)。
質問には、ファイルの処理方法が指定されていません。 NFSファイルハンドルのデコードを頻繁に行っていますか?
sc。