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)