空のファイルをたくさん作成するとディスク容量が消費されますか?

空のファイルをたくさん作成するとディスク容量が消費されますか?

私たちが知っているように、空のテキストファイルのバイト数は0です。

ここに画像の説明を入力してください。

ただし、それぞれに次のものが含まれています。メタデータ、私の研究によると、それは次の場所に保存されています。インデックスノードスペースを活用する

これを考慮すると、純粋に空のテキストファイルを作成してディスクを埋めることが可能であることが論理的に見えます。そうですか?もしそうなら、1 GBのディスクを埋めるためにいくつの空のテキストファイルが必要ですか?


いくつかの確認のために実行してみましたが、df -iこれは重量ではなく使用されたinodeの割合(?)を示しているようです。

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

答え1

この出力は28786688完全なinodeを提案し、その後、ルートファイルシステム(デバイス)にファイルを作成しようとすると、次の「デバイスに残りのスペースがありません」を/dev/sda2返します。ENOSPC

説明:元の* nixファイルシステム設計では、ファイルシステムが作成されたときに最大inode数が設定されました。専用スペースが割り当てられます。データスペースが不足する前に inode が不足する可能性があり、その逆も同様です。ほとんどの一般的なネイティブLinuxファイルシステムには、ext4これらの制限があります。 ext4のinodeサイズの詳細については、mkfs.ext4のマンページを参照してください。

Linuxはこれらの制限なしに他のファイルシステムをサポートしています。では、btrfs空間が動的に割り当てられます。 「inode構造は比較的小さく、組み込みファイルデータや拡張属性データは含まれません」(外部3/4)拡張属性のためにインデックスノード内にいくつかのスペースを割り当てます。)。もちろん、メタデータ/カタログ項目を作成しすぎると、ディスク容量が不足する可能性があります。

考えてみてください。 tmpfsは動的に割り当てられたinodeの別の例です。df -i実際、これらのファイルシステムについて報告された最大inode数が何を意味するのかを知ることは困難です。表示された値には意味がありません。


XFSは動的にinodeを割り当てます。JFSも同じです。reiserfsも同じです。F2FSも同じです。持っていますが、これは例外ではなくルールです。

しかし、XFSを使用すると、inodeで使用される最大スペース比率の制限を設定できるため、既存のファイルに追加できなくなる前にinodeが不足する可能性があります。(FSの場合、デフォルトは25%です)未満のファイルシステムの場合は5%、50TBを超えるファイルシステムの場合は1%)にもかかわらず、メタデータ(inodeと範囲マップ)のスペース使用量は一般的ですdf -hピーター・コルデスこの回答に対するコメントから

答え2

空のファイルを作成するには:

  • inode、ファイルごとに1つずつ。
  • 追加のディレクトリエントリ(ファイルごとに1つずつですが集計)

使用可能な inode の数は、通常、ファイルシステムの作成時に決定され、変更できません。一部のファイルシステム(BtrfsやXFSなど)は、inodeを動的に割り当てます。これが測定されたものですdf -i。 inodeが使い果たされると、空きディスク領域があっても新しいファイルやディレクトリを作成できません。

ディレクトリエントリも利用可能なディスク容量を占有します。ディレクトリのサイズを見るとこれがわかります。これは常にブロックサイズの倍数であり、ディレクトリに多数のファイルが含まれている場合はサイズが大きくなります。ディスク容量が足りない場合は、「フル」ディレクトリ(つまり、新しいファイルを追加する場合は、新しいブロックを割り当てる必要があります)利用可能なinodeがあっても同じです。

はい。空のファイルのみを使用してディスク容量を使用できます。

答え3

純粋な論理的主張:

ファイル名がゼロ以外のバイト数で構成されています。仮想ファイルシステム(絶対最大ファイル名数を許可するように設計されています)で理論的最大圧縮を使用しても、各ファイル名はまだ1ビット以上を使用します。どこかに物理ディスクに。おそらくそれ以上の可能性がありますが、「ファイルあたり1ビット」は最小値です。

プラッタに入ることができるビット数を計算します。これは、プラッタに保存できる理論的最大ファイル数(空であるかどうか)です。

答えは「はい」です。空のファイルを追加し続けると、最終的にどのストレージを使用しても空き容量がなくなります。明らかに、このように計算された最大値よりも早く使い果たされますが、使い果たされます。

答え4

空のファイルを作成してディスクを埋めることはできません。ディスクにはまだ新しいファイルに十分なスペースがあります。しかし、そうです。ファイルシステムの限られた利用可能なinode供給がなくなる可能性があります。この時点では、新しいファイルを作成することはできません(使用されているスペースの面でディスクが実際に空になっていても同じです)。ディスクではなくファイルシステムの inode リストが完全に使用されたということです。したがって、ファイルシステムはいっぱいですが、ディスクは実際には空です。 inodeテーブルはディスク容量を使用しますが、ファイルを追加してもテーブルは増えません。まるで紙に書くと大きくならないようです。

(コメントからBaard Kopperudの回答)

関連情報