シンボリックリンクの代わりにmount --bindを使用すると欠点がありますか?

シンボリックリンクの代わりにmount --bindを使用すると欠点がありますか?

lsシンボリックリンクには、などのシェル起動コマンドとは異なり、などmvの機能がcp機能する方法に制限がありますcd。これは、ユーザーが論理パスに基づいてディレクトリにアクセスする方法に関する情報がないためです(関連トピックを参照)。コンテンツ)郵便はがき)。このmount --bindオプションを使用すると、マウントされたディレクトリに1つのリンクではなく2つの別々の物理パスがあるため、Sambaや他のファイルサーバーとの機能強化と互換性を提供することでこの問題を解決できます。

このオプションを使用してすべてのシンボリックリンクを参照に置き換えたいのですが、mount --bindこれはfstabに150以上のポイントをマウントすることを意味します。これによって発生する可能性のあるパフォーマンスの問題や考慮すべき他の欠点はありますか?

答え1

の場合、mount --bindディレクトリツリーはディレクトリ階層の2つ以上の場所に存在します。これは多くの問題を引き起こす可能性があります。バックアップやその他のファイルのコピーでは、すべてのコピーが選択されます。ファイルシステムをコピーするように指定するのは難しくなります。結局、バインドマウントされたファイルは2回コピーされます。findgrep -rなどを使用して検索すると、locateすべてのコピーなどが巡回されます。

バンドルのインストールでは、「拡張機能と互換性」が得られません。ほとんどの場合、望ましくない動作である他のディレクトリのように見えます。たとえば、Sambaはデフォルトでシンボリックリンクをディレクトリに公開します。バインドマウントを使用しても利点はありません。一方、バインドマウントは NFS 経由でディレクトリ階層を公開するのに役立ちます。

バンドルのインストールにはパフォーマンスの問題はありません。管理上の困難を経験します。バインドマウントには、chrootからアクセス可能なディレクトリツリーを作成したり、マウントポイントによって隠されたディレクトリを公開するなどの用途があります(通常、ディレクトリ構造が再構成されている間は一時的に使用されます)。必要でない場合は使用しないでください。

ルートのみバインドインストール操作を実行できます。通常の方法では移動できず、その場所と祖先ディレクトリにロックされます。

通常、シンボリックリンクをコマンドに渡すと、コマンドがファイルで機能する場合、そのコマンドがリンク自体で機能し、ファイルの内容で機能している場合、コマンドはリンクターゲットで機能します。これはディレクトリにも当てはまります。これは一般的に正しいことです。一部のコマンドには、シンボリックリンクを異なる方法で処理するオプションがあります(たとえばls -L、、、cp -drsync -l。何をしても、バインドマウントよりもシンボリックリンクが正しいツールになる可能性が高くなります。

答え2

また@Gillesが書いた内容以前は、一部のユーティリティ可能バインドマウントされたディレクトリを別々のファイルシステムとして扱います。プログラムが同じinode番号が同じファイルを参照していると仮定できない場合(他のファイルシステムにある場合はそうではありません)、これはリンクからリンクへの移動が最適化されないようにするパフォーマンスまたは機能的な影響を与える可能性があります。ターゲットを選択し、ソースの切断などを実行します。

答え3

常に提供されていないサポート(外部ディスクなど)に依存し、そのサポートが失敗したり削除されたりしても、元のディレクトリ構造をそのまま維持したい場合は、バインドマウントを使用する必要があります。

たとえば、SDカードに/ var / tmpを保持するには、バインドマウントを使用します。一部のプログラムでは、カードが削除されても /var/tmp が有効なディレクトリであると予想されるためです。

答え4

ファイルバインドマウントの場合、シンボリックリンクよりもハードリンクに近い動作をします。これは、次のような微妙な結果をもたらす可能性があります。

# echo 1 > 1.txt
# touch 2.txt
# mount --bind 1.txt 2.txt
# cat 2.txt
1
# echo 1a > 1.txt
# cat 2.txt
1a

これまでは問題ありませんでしたが、実際にファイルを変更するプログラム(エディタ、適切に作成されたスクリプトなど)の数を検討してください。

# echo 1new > 1new.txt
# mv 1new.txt 1.txt
# cat 1.txt
1new
# cat 2.txt
1a

2.txtそれがシンボリックリンクであれば、最後の1.txtコマンドは1new期待できる出力を持ちます。

これはいくつかの微妙な問題を引き起こす可能性があります。 systemd では以下を使用します。BindReadOnlyPaths=特定のサービスがresolv.confシステムの他の部分とは異なるファイルを使用するようにすると、奇妙で​​診断が困難な方法で不安定になる可能性があります。resolvconf会議変えるサービスの背後にあるソースファイル。

関連情報