バインドマウント用のマウントオプション

バインドマウント用のマウントオプション

いくつかの複雑な要件のため、次の2行を入力する必要がありました/etc/fstab

/dev/xvdg1        /srv/storage  ext4  $OPTIONS1      0 2
/srv/storage/dir  /var/opt/dir  none  bind,$OPTIONS2 0 0

私の質問は次のとおりです。$ OPTIONS2のすべてのマウントオプション$ OPTIONS1を再リストする必要がありますか、それとも2番目の行(バインドマウント行)が$ OPTIONS1のオプションを継承しますか?

ちなみに、$ OPTIONS1で使用されている実際のオプションは次のとおりです。

rw,auto,async,noatime,nodiratime,barrier=0,delalloc

到着予定時刻:実際に私が使用していますが、UUID=...それは/dev/xvdg1重要ではありません。

答え1

短い答えは「おそらく」です。これは、渡すオプションと適用方法によって異なります。渡すオプションが厳密にスーパーブロックフラグである場合は、バンドルインストールの一部としてオプションを再リストする必要はありません。渡すオプションにvfsmountフラグが含まれている場合は、vfsmountフラグを再リストする必要があります。 「スーパーブロックフラグ」は基本ファイルシステムの一部であることを意味し、「vfsmountフラグ」はカーネルの一部を意味すると考えることができます(カーネルは実際にはorをすべて適用するので、これは技術的には正しくありませんが)。

これはすべてのファイルシステムに適用されるため、これを行うには、noexecまたはnodevパラメータを使用する必要があります(参照:nosuidこのスレッドカーネルメーリングリストから有用な情報を入手してください。

$ truncate -s 10M container
$ mkfs.ext4 container
$ mkdir mountpoint binded
$ sudo mount -o loop container mountpoint
$ sudo chown "$EUID" mountpoint
$ sudo mount -o bind mountpoint binded
$ cat > mountpoint/script << 'EOF'
> #!/bin/bash
> echo "This works."
> EOF
$ chmod +x mountpoint/script
$ binded/script 
This works.
$ sudo mount -o remount,noexec mountpoint
$ binded/script
This works.
$ mountpoint/script
bash: mountpoint/script: Permission denied

同じスクリプトであっても、noexecファイルシステムごとに適用されます。これはスーパーブロックフラグではなくvfsmountフラグであるためです。つまり、ファイルシステムではなくカーネルの機能です。

mountこれら 2 つのマウントポイントの出力が後に続くnoexecことがなく、どのように見えるかを確認します。

$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (relatime,data=ordered)

ただし、再マウントバインディング自体を使用すると、期待noexecどおりに機能します。

$ sudo mount -o remount,noexec binded
$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (noexec,relatime,data=ordered)

ただし、デフォルトのファイルシステムのプロパティであるオプションは通常、バインドマウントで再実行する必要はありません(そして、サポートされているオプションの多くはファイルシステムによって定義されているため、エラーが発生する可能性があります)。簡単なデモはro読み取り専用オプションですが、これは他のスーパーブロックフラグにも当てはまります。

$ sudo mount -o remount,ro mountpoint
$ > mountpoint/test
bash: mountpoint/test: Read-only file system
$ > binded/test
bash: binded/test: Read-only file system

今回はフラグが自動的に保持されます。

$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (ro,noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (ro,noexec,relatime,data=ordered)

関連情報