ファイルを作成せずに、無料のiノードを使用できますか?システム内のすべての無料iノードを使用するスクリプトを作成したいと思います。出来ますか?
はい、システムのすべてのiノードを消費できます。これらはディスクスペースと同じように限られたリソースであり、たとえばmkfs.ext4
を実行すると事前に割り当てられます。
tune2fs -l <device>
やdf -i <path>
などのツールを使用して、割り当てられて使用されている数を確認できます。
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355850 2920950 11% /
したがって、このファイルシステムには2920950のiノードがありません。ファイルシステム上でファイル、ディレクトリ、またはリンクを作成し始めた場合、それらすべてを消費するために必要なのはそれだけです。これらすべてのiノードを小さなファイルまたはリンクで消費しても、ほぼすべてのディスクスペースを引き続き使用できることを理解してください。
ここで何を取得しているのかわかりませんが、iノードを使用できる唯一の方法は、ファイル、ディレクトリ、またはリンクを作成することです。私はそれらを消費する他の方法に精通していません。
ここでは、空のディレクトリを作成するときに1つのiノードを消費していることがわかります。
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355850 2920950 11% /
$ Sudo mkdir /somedir
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355851 2920949 11% /
Iノードを消費する最も簡単な方法は、ディレクトリのディレクトリツリーを作成することです。
$ Sudo mkdir /somedir/1
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355852 2920948 11% /
$ Sudo mkdir /somedir/2
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355853 2920947 11% /
$ Sudo mkdir /somedir/3
$ df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora-root 3276800 355854 2920946 11% /
同じファイルへのln
を使用して複数のリンクを作成することにより、iノードを消費している別の例を次に示します。
$ ln -s afile ln1
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora_greeneggs-home 26722304 1153662 25568642 5% /home
$ ln -s afile ln2
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora_greeneggs-home 26722304 1153663 25568641 5% /home
$ ln -s afile ln3
$ df -i .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/Fedora_greeneggs-home 26722304 1153664 25568640 5% /home
このスクリプトは、/
ファイルシステムで使用可能なiノードと同じ数のファイルを作成します。
while [ $(df --output=iavail / | tail -n1) -gt 0 ]; do
touch $((i++));
done
私の知る限り、ファイルやディレクトリを使用せずにiノードを取得する方法はありません。結局のところ、それが目的です。 Nodeスクリプトが終了した後もiノードは使用されたままになります。作成したファイルを削除して解放する必要があります。
ファイルare iノード。
ただし、どのディレクトリにもリンクされていないファイルを作成しても、iノードを使用することはできます。例えば:
zsh -c 'repeat 1000 ((repeat 1000 {exec {fd}> file; rm file}
exec sleep 1000 >&-) | cat)'
(最終的に)1,000,000個のiノードを使い果たします。これらのiノードは、それらのsleep
プロセスによって開かれたため、まだ再利用されていない削除済みファイルのものになります。
この方法で作成できるファイルの数は、生成できるプロセスの数と、プロセスごとに開くことができるファイルの最大数によって制限されます。