Linux OS の障害対処-2
今日は、inode の枯渇についてです。
ディスク容量はあるのに、ファイルの作成ができない、なんて経験ありませんか?
私はあります。わけが分からなくて、システムが止まったままで大変な思いをしました。
お疲れさまです。
第2日目ですね。
前回は、カーネルパニックについて一例を紹介しました。
今日は、inode の枯渇についてです。
ディスク容量はあるのに、ファイルの作成ができない、なんて経験ありませんか?
私はあります。わけが分からなくて、システムが止まったままで大変な思いをしました。
df コマンドで確認しても、以下のように容量にはまだ余裕があります。
でも、ファイルを保存しようとすると、
ここで、df -i と打ってみると、
のように、inode が枯渇しています。
管理領域ですから、ファイルの大きさとは関係ありません。
実際、この状態を、以下の要領で再現しました。
CentOS-7-x86_64-Minimal-1511.isoをダウンロード
ハードディスクは4GB程度確保します。
次のスクリプトを実行します。
コピペするとファイルができますよ。
cat > inode_use.sh << "EOF"
#!/bin/bash
DIR="INODE_USE"
DIR_T="./TMP*"
if [ -d $DIR ];then
echo "remove dir $DIR"
rm -rf $DIR
echo "make dir $DIR"
mkdir $DIR
else
echo "make dir $DIR"
mkdir $DIR
fi
FILE_PRE="test_"
END=1000000
function inode_use(){
for i in $(seq 1 $END)
do
touch $FILE_PRE$i.txt
done
}
pushd $DIR
mkdir TMP{01..20}
for a in $DIR_T
do
pushd $a
inode_use
df -i
popd
done
popd
EOF
#!/bin/bash
DIR="INODE_USE"
DIR_T="./TMP*"
if [ -d $DIR ];then
echo "remove dir $DIR"
rm -rf $DIR
echo "make dir $DIR"
mkdir $DIR
else
echo "make dir $DIR"
mkdir $DIR
fi
FILE_PRE="test_"
END=1000000
function inode_use(){
for i in $(seq 1 $END)
do
touch $FILE_PRE$i.txt
done
}
pushd $DIR
mkdir TMP{01..20}
for a in $DIR_T
do
pushd $a
inode_use
df -i
popd
done
popd
EOF
これを実行すると、ディレクトリを20作成し、それぞれに1000000の空ファイルを作成していきます。
ディレクトリを移る時に、df -i を実行します。
だんだん inode が枯渇していくのがわかるという寸法です。
20ディレクトリに至ることなく、途中で inode の使用率は 100% になりました。
そして、df (disk free) で確認すると容量は残っているのに、ファイルは作成できないという状態になりました。
これに対処するにはファイルを削除することです。(直すという表現から、対処に改めました。)
運良く試験環境のため、ディレクトリ毎削除しても問題ありません。
# rm -rf ./INODE_USE
ファイル保存ができるようになりました。
お疲れさまです、第2日目の終了です。ニックネーム たいちょう でした。
次回もお楽しみに。