[yan@machine ~]$ ls -di /run/media/yan/data
2 /run/media/yan/data
[yan@machine ~]$ lsblk -o NAME,FSTYPE,LABEL,TYPE,SIZE,MOUNTPOINT
NAME FSTYPE LABEL TYPE SIZE MOUNTPOINT
...
sdc disk 1.8T
├─sdc1 vfat clonezilla part 512M
├─sdc2 ext4 live_system part 14.7G
├─sdc3 ext4 system_images part 244.1G
├─sdc4 ext4 data part 781.3G /run/media/yan/data
└─sdc5 ext4 rec part 822.5G
[yan@machine data]$ df -i /run/media/yan/data/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdc4 51200000 74199 51125801 1% /run/media/yan/data
[yan@machine data]$ sudo find /run/media/yan/data | wc -l
23690
したがって、fsckでパーティションがきれいであることを知らせたにもかかわらず、接続されていないinodeがたくさんあるようです(-fを使用しても)。欠けているinodeがどこにあるか(74199-23690)知りたいです。 photorecを使用して50,000個のファイルを正常に修復したため、そのファイルがまだディスクにあることがわかります。
だから私はdebugfsを試しましたが、マニュアルで割り当てられたinodeのリストをダンプする方法が見つかりませんでした。 (ほとんどのオンライン投稿はinodeをリストするためにfind / ls -iを使用していましたが、私の場合は機能しませんでした。)
df / fsckに基づいて使用されたinodeのリストを取得する方法を知っている人はいますか?
現在、私は非効率的な無差別代入攻撃に次の方法を使用することを検討しています。
for i in `seq 1 $NMAX`; do debugfs -R 'ncheck $i' | grep $i; done > inodelist
NMAXも十分に大きいですが、より効率的な方法がありますか?
編集する:
可能な方法を見つけたと思います。dumpe2fs
各ブロックのすべてのブロックと利用可能な inode を一覧表示します。これにより、どのインデックスノードが使用されたかを推論することができなければなりません。
(少なくとも計算の観点から)これが私が望むものであることを確認するには、まだ「フリーではないインデックスノード」のリストを計算する必要があります。リストで明らかにそれらの間に接続されているがルートには接続されていない奇妙なインデックスノードを見つけました。
debugfs: pwd
[pwd] INODE: 45220182 PATH: .../dir1/dir2/dir3/dir4
[root] INODE: 2 PATH: /
debugfs: cd ..
debugfs: pwd
[pwd] INODE: 44957702 PATH: .../dir4/dir1/dir2/dir3
[root] INODE: 2 PATH: /
答え1
ext4ファイルシステムで使用されているinodeのリストを取得する方法を見つけました。明らかに、ファイルシステムは利用可能なinodeを追跡します(そして、inodeの総数の違いから使用されたinodeの数を推測します)。無料のinodeの範囲を得ることができますdumpe2fs
。使用されたinodeはリストを補完します(インポートには少しの処理が必要なので、これを行うために小さなPythonスクリプトを作成しました)。