Ubuntuでfstabを使用してマウントを読み取り専用にバインドしますか?


8

1つのディレクトリ(/ src)を別の場所(/ dst)に読み取り専用として再マウントする必要があります。これは次のように行うことができます:

$ sudo mount --bind /src /dst
$ sudo mount -o remount,ro /dst

しかし、私は/etc/fstabブート時にマウントを実行するために使用したいと思い、この問題に対するさまざまな提案された解決策を見ました、例えば

/src  /dst    none  bind            0 0
/src  /dst    none  remount,bind,ro 0 0

残念ながら、私のシステムでは、ディレクトリが読み取り/書き込みでマウントされたままになります。

/src  /dst    none  bind            0 0
/dst  /dst    none  remount,bind,ro 0 0

マウントしようとするとエラーが発生します/dst

mount: /dst not mounted already, or bad option

上記のソリューションは異なるディストリビューションで動作すると思われますが、残念ながらUbuntu 10.04.4 LTS(カーネル2.6.32-41-server)では動作しません。

mountコマンドを配置する以外にこれを達成する方法はあります/etc/rc.localか?

回答:


6

古いカーネルでmount --bindは、読み書き可能なファイルシステムの読み取り専用ビューを作成できません。カーネルは、ファイルシステムの読み書きステータスを、バインドマウントによって複製されない単一の場所に格納します。新しいカーネルではこれが可能ですが、別のカーネルが必要ですmount手順。最初にバインドしてから、読み取り専用にします。これを変更するカーネルパッチがあり、一部のディストリビューション(Debianなど)はそれを適用していますが、Ubuntuは適用していません(少なくとも12.04以降)。

1つの解決策は/etc/fstabOliが説明するように、からではなくブートスクリプトから読み取り専用ビューを作成することです。

それ以外の場合は、代わりにbindfsを使用できます。これはFUSEファイルシステムです。FUSEを実行すると、間接的なレイヤーが追加されるため、少し遅くなります。また、ACLなどの拡張ファイルメタデータのサポートも失います。反対に、読み取り専用ビューには認識可能なファイルシステムタイプがあり、ファイルシステムトラバーサル(locateバックアップなど)から簡単に除外できます。

fstabエントリは次のようになります。

bindfs#/src  /dst  fuse perms=a=rX

6

このLWN記事によれば、この動作はバージョン2.6.25のカーネルに潜入しています。つまり、対象のファイルシステムがrwである場合、何かを上にバインドしても変換できませんro

2.6.26では、問題が部分的に修正されたため、(発見したとおりに)再マウントをトリガーできますが、fstab内からそれを行う方法はまだありません。


これが私がfstabで試していたものです:

/home/oli/Desktop/testmount  /mnt none bind,ro

を起動した後mount -a/mntがマウントされましたが、それでもファイルを作成できました。その後、発砲sudo mount -o remount /mnt読み取り専用になりました。

だから、はい、最もクリーンな方法は、行を 挿入するか/etc/rc.localmountallイベントで開始する非常に単純なUpstartスクリプトを記述することです(そのため、すぐに実行されます)。


また、オプションをmount --bind変更できないmountことも確認しました(のマニュアルページにも記載されていますmount)。奇妙なことに、私がリストしたソリューション(他のソースによると)は、たとえばFedora(最初のソリューション)で動作するようです。を使用するアイデアをありがとうupstart。(ところで私はあなたの最初の行の2番目の "rw"は "ro"であるべきだったと思います。)
mgd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.