
1 TB のスペースがあるサーバーがあります。容量いっぱいまで使用した後、シンボリック リンクを作成したいと思いました。別のシンボリック リンクを削除しましたが、サーバーは依然として満足せず、使用可能なスペースがないと表示されました。最後のシンボリック リンクを削除することで十分なスペースを確保したのではないですか?
シンボリックリンクを作成するのに十分なスペースがあることを認識するために、ファイルシステムにはどれくらいのスペースが必要ですか?
答え1
それは状況によります。ほとんどのファイルシステムは、データを数キロバイトのブロックで割り当てるので、シンボリックリンクは 1 つのブロックに収まると考えられます。しかし、ファイルシステムに依存するその他のファイルシステム メタデータの問題もあります。
特に ext4 (および同様のファイルシステム) の場合:
小さなファイルには、inode、データ ブロック、およびファイルを含むディレクトリ内のディレクトリ エントリ用のスペースが必要です。短いシンボリック リンクは inode 内に完全に保存される可能性があるため、データ ブロックはまったく必要ない場合もあります。(記憶が正しければ、制限は約 60 バイト程度です。)
シンボリックリンクを削除すると、inode が解放され、ディレクトリエントリによって使用されていたスペースと、使用されていたデータブロックが解放されます。ただし、新しいシンボリックリンクには不十分なケースがいくつかあります。
- 新しいシンボリックリンクが別のディレクトリに作成される場合、その新しいディレクトリには新しいディレクトリエントリ用のスペースがない可能性があり、空きデータブロックがない場合、ディレクトリを拡張できません。
- 同様に、新しいシンボリックリンクが同じディレクトリ内に作成され、名前が長くなると、ディレクトリのスペースが不足する可能性があります。
- 古いシンボリックリンクが inode 内に完全に保存できるほど短いが、新しいリンクがデータ ブロックを必要とするほど長い場合、ファイルシステム上に空きデータ ブロックがなければ新しいシンボリックリンクを作成できません。
削除されたシンボリックリンクは必ず 1 つの inode を使用し、新しいシンボリックリンクは 1 つの inode を必要とするため、inode が不足しても問題にはなりません。
答え2
新しいリンクは古いものよりも大きかったです。
ls -l
シンボリックリンクのバイト数が表示され、パスが長いほど必要なバイト数も多くなります。
これは、ターゲット ファイル/ディレクトリへのフル パスのバイト数とほぼ同じです。Debian 10 で ext4 を使用すると、「/var/www/html」へのリンクは 13 バイトになります。ファイル システムによって異なります。