web-dev-qa-db-ja.com

すべてのiノードの使用方法

ファイルを作成せずに、無料のiノードを使用できますか?システム内のすべての無料iノードを使用するスクリプトを作成したいと思います。出来ますか?

6
ashok

はい、システムのすべての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ノードを消費しますか?

ここで何を取得しているのかわかりませんが、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
8
slm

このスクリプトは、/ファイルシステムで使用可能なiノードと同じ数のファイルを作成します。

while [ $(df --output=iavail / | tail -n1) -gt 0 ]; do 
    touch $((i++)); 
done

私の知る限り、ファイルやディレクトリを使用せずにiノードを取得する方法はありません。結局のところ、それが目的です。 Nodeスクリプトが終了した後もiノードは使用されたままになります。作成したファイルを削除して解放する必要があります。

9
terdon

ファイルare iノード。

ただし、どのディレクトリにもリンクされていないファイルを作成しても、iノードを使用することはできます。例えば:

zsh -c 'repeat 1000 ((repeat 1000 {exec {fd}> file; rm file}
          exec sleep 1000 >&-) | cat)'

(最終的に)1,000,000個のiノードを使い果たします。これらのiノードは、それらのsleepプロセスによって開かれたため、まだ再利用されていない削除済みファイルのものになります。

この方法で作成できるファイルの数は、生成できるプロセスの数と、プロセスごとに開くことができるファイルの最大数によって制限されます。

5