シンボリックリンクは実際にディスク使用量に影響しますか?

シンボリックリンクは実際にディスク使用量に影響しますか?

私は多くのウェブサイトでLinuxでシンボリックリンク(symlink)が次のようになっていることを読んでいます。Windowsのショートカットなど、どこにでも存在できる他のファイルを参照してください。ただし、シンボリックリンクが存在するフォルダのディスク使用量を確認すると、ファイルマネージャが表示する内容と報告された内容が一致しませんdu。しかし、du -L-L, --dereference; dereference all symbolic linksマンページから)を入力すると、ファイルマネージャが報告した出力とサイズdu -Lは同じです。

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

はい:

私の/var/tmpフォルダは今空です。ファイルを作成しましょう。

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

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

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

さて、私は非常に大きなファイルと対応する/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.3kB

ついに:

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

パーティションが/var/tmp1GiBで、その中に1GiBファイルへのリンクを作成すると、ハードドライブは機能しませんか?私は168とThunar 1 GiBを出力することを知っていますが、duどちらが正しいかわかりません。

ベストアンサー1

もちろん、シンボリックリンクはスペースを占有しますが、名前とターゲット、およびその他のメタデータを格納するために必要な数バイトしか占有しません。シンボリックリンクが占めるスペースは、ターゲットが占めるスペースには依存しません(最終的にターゲットは存在する必要さえありません)。

Plainはduディスク上のディレクトリツリーが占めるスペースを報告します。du -Lレポートスペース〜するすべてのシンボリックリンクがその宛先に置き換えられると、ディレクトリツリーから取得されます。前者は有用な情報であることが多いです。たとえば、ツリーを削除した場合、これは復元するスペースであり、おおまかにツリーをバックアップするために必要なスペースです。

du表示されるディレクトリツリーは、(通常)ファイルサイズの合計よりわずかに大きいです。これは2つの理由です。まず、duファイル名とメタデータを保存するのに少しスペースが必要なディレクトリも計算されます。次に、duファイルが占めるディスク容量を計算します。これはファイルサイズと異なる場合があります。最も一般的な効果は、ファイルが整数ブロック(通常のLinuxインストールの場合は4 kB)を占めることです。したがって、1バイトのファイルはdu出力では4kBと表示されますが、圧縮されます(例:スパースファイルほとんどすべてのUNIXファイルシステムで)ディスク使用量よりも大きいファイルを作成することが可能です。

あなたが提供した数字に基づいてThunarが報告しました。シンボリックリンクに従うディレクトリツリーのファイルサイズの合計。実際、この内容は微妙な方法で表示されます。全体のサイズは570.3kBであると主張しますが、ディスク使用量は570.3kBであるとは主張しません。ユーザーインターフェイスやドキュメントでまったく明確ではないのは、Thunarがサイズを計算するときにシンボリックリンクに従うことです。

どちらが「正しい」かは主観的な問題です。duディスク使用量を報告します。 Thunarはシンボリックリンクの背後にある全体のサイズを報告します。シンボリックリンクの作成はディスク使用量にわずかな影響を与えますが、定義に従ってThunarが報告するシンボリックリンクの合計サイズは変わります。

おすすめ記事