LWN 記事からの直接の回答:
mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data
Linux 2.6.26 以降でサポートされています。
この記事によると、それは可能です。最新のカーネルが必要です。
mount --bind -o ro /vital_data /untrusted_container/vital_data
Squeeze では、以前は以下でのみ機能していました:
mount --bind /src /dst
それから
mount -o remount,ro /dst
Debian Wheezy では、次のことを行う必要があります:
mount -o remount,ro,bind /dst
リソース使用中メッセージを取り除きます。
編集:Debian Jessie では、mount はスマートになろうとし、サブディレクトリをマウントします。既に bind でマウントされている場合、再帰的になり、悪いことが起こります :)
util-linux を再び「愚か」にする特別なオプションがあります。解決策は次のとおりです:
mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/
その後、 --bind $prefix/sbin を別のディレクトリにマウントできます。
マニュアルページから:
<ブロック引用>共有サブツリーの操作。Linux 2.6.15 以降、マウントとそのサブマウントを共有、プライベート、スレーブ、バインド不可としてマークすることが可能になりました。共有マウントは、そのマウントのミラーを作成する機能を提供し、ミラー内のマウントおよびマウント解除が他のミラーに伝達されるようにします。スレーブ マウントはマスターから伝搬を受け取りますが、その逆はありません。プライベート マウントには繁殖能力はありません。バインド不可能なマウントは、バインド操作によってクローンを作成できないプライベート マウントです。詳細なセマンティクスは、カーネル ソース ツリーの Documentation/filesystems/sharedsubtree.txt ファイルに記載されています。サポートされている操作は次のとおりです:
mount --make-shared mountpoint
mount --make-slave mountpoint
mount --make-private mountpoint
mount --make-unbindable mountpoint
次のコマンドを使用すると、特定のマウントポイントの下にあるすべてのマウントのタイプを再帰的に変更できます。
mount --make-rshared mountpoint
mount --make-rslave mountpoint
mount --make-rprivate mountpoint
mount --make-runbindable mountpoint
--make-* 操作が要求された場合、mount(8) は fstab(5) を読み取りません。必要な情報はすべてコマンド ラインで指定する必要があります。Linux カーネルでは、単一の mount(2) システムコールで複数の伝播フラグを変更することは許可されておらず、フラグを他のマウント オプションと混在させることはできないことに注意してください。
util-linux 2.23 以降、mount コマンドを使用すると、複数の伝播フラグを一緒に使用したり、他のマウント操作と一緒に使用したりできます。この機能は実験的です。伝搬フラグは、先行するマウント操作が成功したときに、追加の mount(2) システムコールによって適用されます。このユースケースはアトミックではないことに注意してください。 fstab(5) で伝播フラグをマウント オプション (private、slave、shared、unbindable、rprivate、rslave、rshared、runbindable) として指定できます。