FUSEファイルシステムを使用してテストケースを設計してみてくださいsshfs
。私の考えはsshfs
、NFSに関するオリジナルの質問。しかし、私の考えは私の予想通りうまくいかなかった。
ここで何が起こっているのでしょうか?
$ mkdir /tmp/alan
$ sudo mkdir /root/mnt
$ sudo sshfs alan@localhost:/tmp/alan /root/mnt
$ mkdir /tmp/alan/mnt
$ sudo mount --bind /root/mnt/mnt /root/mnt/mnt
$ chmod a-rwx /tmp/alan
$ findmnt | grep mnt
/root/mnt alan@localhost:/tmp/alan fuse.sshfs ...
/root/mnt/mnt alan@localhost:/tmp/alan fuse.sshfs ...
$ mount -oremount,bind,ro /root/mnt/mnt
mount: /root/mnt/mnt: cannot mount (null) read-only.
$ findmnt | grep mnt
/root/mnt alan@localhost:/tmp/alan fuse.sshfs ...
ベースが消えます。
このコマンドを再実行してmount -oremount
コマンドにプレフィックスを追加すると、sudo strace -e trace=mount
システムコールが「権限の拒否」で失敗したことを示すため、その部分が期待どおりに機能しているようです。
mount("none", "/root/mnt/mnt", 0x55b13233d620, MS_MGC_VAL|MS_RDONLY|MS_REMOUNT|MS_BIND, NULL) = -1 EACCESS (Permission denied)
ベストアンサー1
そのmount -oremount
コマンドをsudo ls /root/mnt/mnt
。EACCESS
ls /tmp/alan/mnt
ディレクトリ以外のファイルが削除または交換されても、エラーが発生するため失敗しますEACCESS
。EACCESS
/tmp/alan/mnt
通常、/tmp/alan/mnt
サブマウントが削除された場合、またはディレクトリ以外のものと交換された場合、サブマウントは/root/mnt/mnt
無効になり、自動的に削除されます。この場合、カーネルがまだディレクトリに存在するかどうかをsshfs
尋ねるとき、カーネルに「権限が拒否されました」と教えてください。カーネルはこれを「該当するファイルやディレクトリがありません」などの失敗として扱います。/root/mnt/mnt
sshfs
実際にもそうかはわかりません。
ls
サブインストールも「転送エンドポイントが接続されていません」を返すENOTCONN
と消えないようです。このエラーは、親マウント FUSE プロセスを終了すると発生します。 (望むよりhttps://github.com/systemd/systemd/issues/9872)