1TBのスペースを持つサーバーがあります。私はそれを埋め、次にシンボリックリンクを作成したかった。他のシンボリックリンクを削除しましたが、サーバーはまだ満足していません。余裕がないと出てきます。最後のシンボリックリンクを削除して十分なスペースを確保していませんか?
シンボリックリンクを作成するのに十分なスペースがあることをファイルシステムが認識するには、どのくらいのスペースが必要ですか?
答え1
時々違うよねほとんどのファイルシステムは、データを数キロバイトのブロックに割り当てるので、すべてのシンボリックリンクが単一のブロックに入ると想像できます。ただし、ファイルシステムによっては、ファイルシステムメタデータには他の問題があります。
特にext4(および同様のファイルシステム)の場合:
小さなファイルには、ファイルを含むディレクトリ内のディレクトリエントリにinode、データブロック、およびスペースが必要です。短いシンボリックリンクは inode 内に完全に格納できるため、データブロックがまったく必要ない場合があります。 (IIRC制限は約60バイト程度です。)
シンボリックリンクを削除すると、inodeが解放され、ディレクトリエントリとデータブロック(使用されている場合)に使用されたスペースが解放されます。場合によっては、これは新しいシンボリックリンクを生成するのに十分ではないかもしれません:
- 新しいシンボリックリンクが別のディレクトリに作成されている場合、新しいディレクトリには新しいディレクトリエントリのスペースがない可能性があり、利用可能なデータブロックがないとディレクトリを拡張できません。
- 同様に、同じディレクトリに長い名前を使用して新しいシンボリックリンクを作成すると、ディレクトリスペースが不足する可能性があります。
- 古いシンボリックリンクがinodeに完全に格納されるほど短いですが、新しいリンクがデータブロックを必要とするのに十分長く、ファイルシステムに利用可能なデータブロックがない場合、新しいシンボリックリンクを作成することはできません。
削除されたシンボリックリンクは必ず1つのアノードのみを使用し、新しいシンボリックリンクは1つのアノードのみを必要とするため、アノード不足は問題になりません。
答え2
新しいリンクは前のリンクより大きいです。
ls -l
シンボリックリンクのバイト数を表示します。パスが長いほど、より多くのバイトが必要です。
これは、ターゲットファイル/ディレクトリのほぼフルパスにあるバイト数です。 Debian 10 で ext4 を使用する場合、「/var/www/html」へのリンクは 13 バイトです。ファイルシステムによって異なります。