ファイル数が inode と一致しません。

ファイル数が inode と一致しません。

OCFS2パーティションで使用されたinodeの数は約2,800万個に達することがわかりました。 518Kファイルが入ったフォルダを移動したところ、その数が2,200万個になりました。

次のスクリプトは、約65,000個のファイル数と40個のフォルダ数を探します。

私の質問は2,200万という数字がどこから出てくるのでしょうか?これは普通ですか?

[root@bopapp1 ~]# cat /etc/issue
Oracle Linux Server release 6.5
Kernel \r on an \m

[root@bopapp1 ~]# uname -a
Linux bopapp1 3.8.13-16.2.1.el6uek.x86_64 #1 SMP Thu Nov 7 17:01:44 PST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@bopapp1 ~]# df -i
Filesystem                        Inodes    IUsed    IFree IUse% Mounted on
/dev/mapper/vg_testapp2-lv_root  3276800   765283  2511517   24% /
tmpfs                            3089556        3  3089553    1% /dev/shm
/dev/sda1                         128016       55   127961    1% /boot
/dev/mapper/vg_testapp2-lv_home  4882432     9662  4872770    1% /home
/dev/dm-4                       39321087 22543323 16777764   58% /u
/dev/dm-5                       26214055  8319457 17894598   32% /usr/oracle

[root@bopapp1 ~]# cd /u

[root@bopapp1 u]# for i in `find . -type d `; do echo `ls -a $i 2> /dev/null | wc -l` $i; done | sort -n | awk '{sum+=$1} END{print "sum=",sum}'
sum= 62950

ベストアンサー1

ここでは、通常のディスクローカルファイルシステムではなく、OCFS2クラスタファイルシステムについて話していることに気づきました。このセクションは特にOCFS2に適用されます。以下の共通ファイルシステムを参照してください。

新しい空の1GiB OCFS2ファイルシステムを作成してマウントすると、使用されたinodeの数は36378として表示されます。

100個の空のファイルを作成した後、この数が増えるのを見ることはできません。

10000個のファイルを作成したら、72730に増えたことがわかります。

これらのファイルをすべて削除しても数字は減りませんが、FSをアンインストールして再インストールすると45634に変わることがわかります。

したがって、私はこのファイルシステムに慣れていないので、なぜ返されたIUsed数がdfinodeの数と一致しないのか、inodeがそのファイルシステムのファイル以上の目的で使用されるのかわかりません。あるいは、システムは非常におおよその場合を除いて、使用されたまたは使用可能なiノードの数を追跡しません。

o2info --freeinodeocfs2-tools 1.8.2 以降で実行すると、予想に近い数値が得られます。

$ du -ax ///mnt/1 | grep -c ///
102
$ df -i /mnt/1
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/loop0     262144 45634 216510   18% /mnt/1
$ o2info --freeinode /mnt/1
Slot            Space           Free
  0             10240          10129
  1                 0              0
Total           10240          10129
$ echo $((10240-10129))
111

$ touch /mnt/1/a{1..100}
$ o2info --freeinode /mnt/1
Slot            Space           Free
  0             10240          10029
  1                 0              0
Total           10240          10029
$ o2info --freeinode /mnt/1 | awk 'END{print $2-$3}'
211

$ touch /mnt/1/b{1..20000}
$ o2info --freeinode /mnt/1
Slot            Space           Free
  0             20480            259
  1                 0              0
Total           20480            259
$ o2info --freeinode /mnt/1 | awk 'END{print $2-$3}'
20221

これで、既存のファイルシステムの場合...

ディレクトリエントリをクロールしてinodeの数に一致するエントリを見つけるには、inode番号に基づいて表示されるファイルを追跡する必要があります。

find /u -xdev -printf '%i\n' | sort -u | wc -l

du(少なくともGNU実装では)同じファイル(ハードリンク)の複数のインスタンスをスキップするので、次のことができます。

 du -xa ///u | grep -c ///

これはあなたに同じ結果を与えるでしょうfind

df -i一部のファイルシステム(インクルードext4)には、内部的に使用されているディレクトリに接続されていないいくつかの特殊なinodeがあるため、結果は数より少し小さいと予想していました。

lsof +aL1 /uまた、削除されたが一部のプロセスによってまだ開いているファイル(リストについては参考資料を参照)と、その中にマウントされている他のファイルシステムによってブロックされたファイル(例ではそうではありません)も計算されません。

`...`あなたのようにコマンドの置き換え()を使用するのは間違っています。これはデフォルトでスペースを分割し、結果の単語に対してグローブ操作を実行するパーティション+グローブ演算子を呼び出します。したがって、ファイル名にスペース、タブ、改行、または文字が含まれていない場合にのみ*意味のある?結果が得られます[

ls -a.アイテム自体は除いて、すでに計算した一部のinodeへのハードリンクであるため、計算したくないアイテムを含みます。同様に、他のハードリンクも何度も計算されます。.../u

おすすめ記事