ln -s vs mount --bind


19

ln -sまたはを使用するのに実際的な違いはありますかmount --bind

デーモンの設定を変更せずに、いくつかのフォルダーを別のパーティションに移動したいので、どのアプローチをとるべきか疑問に思います。

ln -s最小限のセットアップ(/etc/fstab変更なし)が必要なため、私は好みますが、おそらく一般的ではない理由がありますか?

回答:


25

もちろん。を実行すると、特定のファイルシステムオブジェクトを指すiノードln -sであるシンボリックリンクを作成します。このため、シンボリックリンクはファイルシステムを横断でき、ハードリンクはできません。ハードリンクには独自のiノードがありません。

でファイルシステムをマウントする場合、デバイスまたはファイルシステムの--bind2番目のマウントポイントを作成します。

シンボリックリンクをリダイレクトとして想定している場合、--bindマウントされたファイルシステムがデータへの別のゲートウェイを作成していると想定します。

シンボリックリンクとバインドマウントは、まったく異なるボールゲームです。

--bindマウントは私には少しより堅牢なようだし、それはおそらく、少し速くシンボリックリンクでの作業よりもです。一方、パフォーマンスヒットは小さいため(存在する場合)、シンボリックリンクを使用しても重大な欠点はありません。

編集:私はこれについて考えてきました、そして、パフォーマンスのヒットは私が当初考えていたより少し大きいかもしれません。多数の異なるファイルを読み取るアプリケーションがある場合、新しいファイルを開くたびに余分な読み取りが必要になります。ここでのいくつかの研究は、私の仮定が正しいことを示唆しています。そこで、IOが重いアプリケーションをそこで実行している--bind場合、symlinkソリューションの上にマウントするオプションを検討してください。

一般的ではない理由は、おそらく、シンボリックリンクがで表示されるのlsに対し、バインドマウントは/ proc / mountsまたは/ etc / mtabを見るときにのみ表示されるという事実です(mountコマンドは、パラメータなしで実行されます)。それ以外は、問題はないと思います。しかし、もしあれば興味があります。

追加:別の問題ln -sは、一部のアプリケーションでは、パスが間接参照されると、特定のアイテムが特定の場所にあると「予想」されるとアプリケーションが動かなくなる可能性があることです。


スルー説明をありがとう!小さなフォローアップの質問---rbindパラメーターは実際に何をし、どのように使用できますか?マニュアルから、パラメータはマウントされたツリーのサブマウントのマウントをサポートしているようです、これは正しいですか?また、-rbindだけで十分ですか、または--bindしてから--rebindする必要がありますか?再度、感謝します。
SyRenity

2
mount引数なしで呼び出された場合、内容印刷/etc/mtabよりわずかに異なる情報を有します/proc/mounts。(特に、/proc/mounts(へのシンボリックリンク/proc/self/mounts)は、それを読み込んでいるプロセスから見えるマウントポイントを常に表示します。)
粗さ09

1
@wzzrd- FAQ「何よりも—既存の質問と回答を編集および改善してください!」:) ..これは決してあなたの答えにわずかではありません-それは追加情報を含む小さな改善であり、投票された場合/追加された場合に追加の担当者を受け取ります:)
ウォーレン

1
@warren、気にしない、私は怒っていない:)それはあなたが私が知らない何かを追加しただけなので、少し奇妙に感じた;)
wzzrd

2
@wzzrd-つま先を踏むという意味ではありませんでした:) ..アプリ固有の問題は、使用する主な製品で遭遇したものです
ウォーレン

6

ln -sとバインドマウントの大きな違いの1つは、バインドマウントを使用して読み取り専用ファイルシステムを「変更」できることです。たとえば、にCDがマウントされ/mnt/applicationていて/mnt/application/badconfigfile.conf、正しいバージョンに置き換える場合は、次のようにします。

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

ターゲットファイルシステムを変更できないため、シンボリックリンクを使用して同じ変更に影響を与えることはできません。

これは、NFS(または何らかのクラスターファイルシステム)を介して共通のソフトウェアスイートを配布し、1つのシステムでホスト固有の変更を行いたい場合にも有効に使用できます。必要に応じて、ターゲットシステムでバインドマウントを使用して、ファイルまたはディレクトリをオーバーライドできます。


頭痛セーバー!(まれなケースですが、その特別な瞬間のために覚えておく価値があります)
ジョナサンKomar

2

ln -sとmount --bindの実際の違い#1:

vsftpdは、シンボリックリンクを介してディレクトリを参照することはできませんが、マウントされている場合は許可します。

使用しているデーモンはわかりませんが、同様に動作する可能性があります。


1

マウントへのバインドの結果として、それ自体がバインドであり、後でリバウンドされるため、すべてが物理的に接続されたままであると仮定すると、元のバインドはそのまま残ります。

つまり、AをBにバインドし、BをCにバインドし、次にDをBにバインドする場合、Cは引き続きAにバインドされます。それが必要な場合もそうでない場合もあります。CがBをフォローしたい場合は、同じターゲットを使用して再マウントします。つまりmount -o remount B C--rbind代わりに使用します。--rebindオプションはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.