概要 †
inode枯渇の実験
背景:
ext3(ブロック)はext4(バランス木)に比べて、ファイル数が増えた場合の性能劣化が激しいらしい→実際にやってみたくなる。
とりあえず9,000,000ファイル程度を作ってみるか→3,000,000ファイル程度で止まってしまいここに至る。
実験 †
- ソース(test.sh)
barディレクトリに、空ファイル30,000を持つサブディレクトリを300個作成します。
システムに影響のないパーティションで実行してください(rootfsで実行しないでください)
試す場合は300、30,000というパラメータを適宜変更してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| -
!
|
rm -rf bar > /dev/null
mkdir bar
pushd bar
for ((i=0; i<300; i++))
{
mkdir $i
echo "[" `date +%H:%M:%S` "]Start $i..."
touch $i/{1..30000}.txt
}
popd
|
- 実験するパーティションを作成
私は仮想マシンに仮想ディスク(50GB)を追加して行いました。
1
2
3
4
5
6
7
8
|
| sudo fdisk /dev/sdb
n
p
w
sudo mkfs.ext3 /dev/sdb1
sudo mkdir /mnt/foo
sudo mount -t ext3 /dev/sdb1 /mnt/foo
|
- 実行前のinode確認
1
2
3
4
5
6
7
|
-
|
|
|
|
| df -i
|
- 実行
1
2
3
4
| -
!
-
| sudo time -p ./test.sh
|
- 実行後のinode確認
1
2
3
4
5
6
7
|
-
|
|
|
|
| df -i
|
後記 †
inodeサイズはファイルシステム作成時に、デバイスのサイズによって自動で決まります。
任意の値にする場合、例えばmkfs.ext3ならば-iオプションでバイト数/inode数の比率で指定します。
上の実験の場合、1GBあたり65536ノードという自動設定が効いていることになります。
検証時の環境 †
- Windows7 Professional SP1 x86