我经常使用sshfs
将远程目录树(例如myhost:~/workspace/
)安装到本地目录树(例如~/workspace-mount/
),并在本地编辑器中打开远程文件。
在我没有意识到的情况下断开连接并且远程目录树被卸载的情况并不罕见。如果我无意中将打开的文件保存在本地编辑器中,我的编辑器会默默地将文件保存到本地磁盘,并根据需要重新创建远程目录结构。这会导致混乱,因为我现在不知不觉地分叉了文件副本。
如果我丢失了坐骑,我更希望保存失败,例如权限错误。
我尝试删除 的写入权限~/workspace-mount/
,但fusermount
拒绝在没有写入权限的情况下安装它。
我能想到的最好的选择是在本地重新创建 的直接子目录myhost:~/workspace/
,然后删除对的写入权限那些,但这很难维护,并且不能防止意外分叉直接驻留在myhost:~/workspace/
.
有什么方法可以防止在卸载时意外写入本地安装点?
答案1
使用reconnect
旗帜。这将使文件系统保持挂载状态。如果断开连接,文件系统上具有挂起操作的进程将挂起,并最终因一般 I/O 错误而失败,除非重新建立连接。
根据您的设置方式,断开连接后,您实际上可能会重新连接(如果您使用 ssh 密钥),或者您的安装点可能已损坏(如果您使用密码)。如果您立即收到 I/O 错误(意味着重新连接不成功),您可能必须fusermount -u ~/workspace-mount/
在尝试再次挂载之前发出 a 。
无论如何,您和您的程序都会知道断开连接的情况。
sshfs -o reconnect myhost:~/workspace ~/workspace-mount/
为了测试一下,可以通过在服务器端杀死sftp-server来粗略地模拟断线情况。