2011-12-01 8 views
7

私は多くのドキュメントを使いました。ハードリンクやソフトリンクのいずれかに矛盾があり、ファイルシステムのスペースを取っている人はいますか?私はこれを見つけたハードリンクの場合ハードリンクまたはソフトリンクは、ファイルシステム内の任意の領域を占有しますか?

私は私が同じdirectory.both C1にD1とハードリンク私のホームディレクトリ内のファイルC1を持っていたとB1、私は「LSをしていたときに11バイトsize.Nowを持っています-lrt "は、リストされたすべてのファイルの合計バイト数(d個の隠しファイルを除く)は64バイトです。今、私はハードリンクd1を削除し、ls -lrtを実行して60バイトを返します。ハードリンクはハード・ディスクのスペースを占めるわけではありませんが、docs.negateの多くはなぜですか?

ソフトリンクを作成して削除するのと同じ方法でチェックしたことがありますが、ソフトリンクのサイズが2バイトしかないので、削除すると全体のサイズが大幅に大きくなりますls -lrtの出力。

これはどういう意味ですか?

答えて

6

はい。両方ともディレクトリエントリを持っているので、両方ともスペースを取っています。リンクパス何とか(テキスト自体)を格納しなければならないシンボリックリンクのエントリがそうであるように

ハードリンクエントリが(実際には、「通常のエントリは、」それは[しばしば] iノードを共有する)、スペースを取ります。必要な実際のスペースは、ファイルシステムの正確な実装(例えば、ブロック/ツリーのサイズやシンボリックリンクの格納方法など)によって決定される割り当てルールやレイアウトルールによってわずかに異なります。

しかし、スペース量は最小値であり、ファイル自体のデータとの関係では、ほとんどの場合、重要ではないと考えられます。

彼らはスペース(少し)を占めるもちろん
+2

あなたの最後の文章を拡張するには... ...多くの小さなファイルがたくさんあるシステムで、利用可能なinodeが足りなくなっている場合を除きます。いくつかのファイルシステムでは、これは現実的なシナリオです。シンボリックリンクやハードリンクと組み合わせて使用​​していませんが、これを実行しました。 – 0xC0000022L

10

  • ハードリンクされたファイルは、複数のディレクトリエントリを持っています。各エントリはディレクトリ自体のスペースを占有しますが、それ以降は同じ構造を共有します。つまり、inodeとデータ領域は共有されます。しかし、私はこれがどのように説明されているのか分かりません。ディレクトリー項目は常に一定の大きさの倍数を占めるかもしれません。

  • シンボリックリンクは、同様にディレクトリエントリのためのスペースを占有し、プラスリンク特性ならびにリンクターゲット自体に関する情報を保持している1つのinode。

このような小さなサイズ(ファイル内の11バイトのデータ)では、オーバーヘッドは実際のデータより多くカウントされます。しかし、より大きなファイルでは、このわずかなバイト数のオーバーヘッドはごくわずかです。

1

ハードリンクは、ファイルシステム内のinodeへの参照です。ユーティリティによっては、これを誤って読み込むことがあります。ディスク領域を占有することはありません。

+3

いつからiノードがスペースを占めていないのですか? ... – 0xC0000022L

+3

inodeはスペースを取っていますが、私は100%同意しますが、上記のinodeへの参照はディスク全体のスペースに関してはごくわずかです。私はこれが私の答えをクリアすることを願っています。 –

+0

これは単に間違っています。このリンクは、どこかに格納する必要のある情報です。あなたのファイルシステムによっては、これはやや異なって扱われますが、保存する必要があります。 –

6

lsが間違っています!

ハードリンクファイルを複数回カウントします。 ls -lはハードリンクの数に関係なく、各エントリのブロック番号を追加するだけです。

代わりdu -Ssb .を試してみてください(使用ls -1siは、各ファイルのinode番号だけでなく、ブロックの使用状況を表示します)。これにより、正しいディスク使用量がバイト単位で得られます。 -lスイッチを使用しない限り、lsの動作が再現されます。