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
数がdf
inodeの数と一致しないのか、inodeがそのファイルシステムのファイル以上の目的で使用されるのかわかりません。あるいは、システムは非常におおよその場合を除いて、使用されたまたは使用可能なiノードの数を追跡しません。
o2info --freeinode
ocfs2-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