シンボリックリンクは実際にディスク使用量に違いをもたらしますか?


21

Linuxでは、シンボリックリンク(ソフトリンク、シンボリックリンク)は、Windowsショートカットなど、どこにでもある別のファイルを参照するポインターのようなものです。ただし、シンボリックリンクがあるフォルダーのディスク使用量を確認すると、ファイルマネージャーの表示とduレポートの表示が一致しません。ただし、du -L-L, --dereference; dereference all symbolic linksmanページから)入力するdu -Lと、ファイルマネージャーが報告する出力とサイズは同じです。

私の質問は、たとえば、別のhomeパーティションにある大きなファイルへのソフトリンクがある場合、問題はありますか?

マイ/var/tmpフォルダが平野空です。ファイルを作成しましょう:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

そして、ファイルマネージャー(この場合はThunar)が報告します

サイズ:1アイテム、合計163.0 kB

大丈夫。次に、非常に大きなファイル/tmpとシンボリックリンクを作成します。

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

今のところすべて順調です。しかし、ファイルマネージャーを開いた場合:

サイズ:2個のアイテム、合計570.3 kB

そして最後に:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

/var/tmp配置されているパーティションのサイズが1 GiBで、その中に1 GiBファイルへのリンクを作成した場合、ハードディスクは死にますか?私は知っているdu意志の出力168とThunarでは1ジブを、私は右であるかわかりません。


たとえば、あるプログラムがMibで報告しておらず、別のプログラムがMBで報告していないことを確認しますか?
HandyGandy

いいえ、それはユニットの問題ではありません。
アストロフアンル

回答:


34

シンボリックリンクにはもちろんスペースが必要ですが、名前とターゲットに加えて他のメタデータ用の数バイトを格納するために必要なスペースだけです。シンボリックリンクが使用するスペースは、ターゲットが使用するスペースに依存しません(結局、ターゲットは存在する必要さえありません)。

プレーンduは、ディスク上のディレクトリツリーによって使用されているスペースを報告します。すべてのシンボリックリンクがターゲットに置き換えられた場合に、ディレクトリツリー占めるdu -Lスペースを報告します。前者は通常、有用な情報です。たとえば、ツリーを削除した場合に回復するスペースであり、(およそ)ツリーをバックアップするために必要なスペースです。

duディレクトリツリーでは、(通常)ファイルサイズの合計より少し多く表示されます。それは2つのことによるものです。最初に、duディレクトリもカウントします。これは、ファイル名とメタデータを保存するために少しのスペースをとります。次に、duファイルが使用するディスク容量をカウントします。これは、ファイルサイズとは異なる場合があります。最も一般的な効果は、ファイルが整数ブロック(典型的なLinuxインストールでは4kB)を占有するため、1バイトのファイルがdu出力で4kBとして表示。ただし、圧縮(ほぼすべてのUNIXファイルシステムのスパースファイルによって提供されるプリミティブ形式など)により、ファイルサイズがディスク使用量よりも大きくなる可能性があります。

指定した数値から、Thunarはシンボリックリンクをたどって、ディレクトリツリー内のファイルのサイズの合計を報告しているようです。実際には微妙に言っています。ディスクの使用量が570.3 kBではなく、合計サイズが570.3 kBであると主張しています。ユーザーインターフェイスまたはドキュメントからまったく明らかではないのは、サイズを計算するときにThunarがシンボリックリンクに従うことです。

どちらが「正しい」かは主観的な問題です。duディスク使用量を報告します。Thunarはシンボリックリンクに続く合計サイズを報告します。シンボリックリンクの作成は、ディスク使用量にほとんど影響を与えませんが、定義上、Thunarが報告するtotal-size-following-symbolic-linksを変更します。


私は自分の質問を編集したので、今はかなりはっきりしていると思うが、答えてくれてありがとう。
アストロフアンル

@ Juanlu001:それに応じて回答を更新しました。要するに、duディスク使用量を表示し、Thunarは他の何かを示します。
ジル 'SO-悪であるのをやめる'

シンボリックリンクを解決するバックアップを作成する場合、違いは重要です。ツリーの下に複数のシンボリックリンクがあり、ツリーの外側の場所に解決することがわかっている場合は、それを行うことができますが、そのツリーの外側の残りの部分は重要ではありません。
メル

3

デフォルトでは、ファイルマネージャはソフトリンクが指しているファイルのサイズを取得しようとしていますがdu、ディレクトリとソフトリンク自体のサイズは提供していますが、指しているファイルのサイズは取得していません。

明確にするために、

`du`    -> size of directory + size of all the softlinks  
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.

これがあなたが尋ねていたものであるかどうかはわかりませんが、そうであれば、これがあなたの質問に対する答えになると思います。


申し訳ありませんが、私の質問には答えられませんでした。あなたが言ったことはすでにわかっています。編集したところです。
アストロフアンル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.