这是一个奇怪的错误,我不确定它来自哪里。这是我正在做的事情的快速总结。
我正在尝试使用 s3fs(FUSE over Amazon)将 FUSE 驱动器安装到运行 Ubuntu 10.10 的 Amazon EC2 实例。s3fs 是根据说明等从源代码编译的。我还在 /etc/fstab 中添加了一个条目,以便驱动器在启动时安装。这是/etc/fstab看起来的样子:
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
LABEL=uec-rootfs / ext4 defaults 0 0
/dev/sda2 /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
/dev/sda3 none swap sw,comment=cloudconfig 0 0
s3fs#mybucket /mnt/s3/mybucket fuse default_acl=public-read,use_cache=/tmp,allow_other 0 0
Run Code Online (Sandbox Code Playgroud)
所以好消息是这很好用。重新启动时,连接正确安装。我也可以这样做:
$ sudo umount /mnt/s3/mybucket
$ sudo mount -a
$ mountpoint /mnt/s3/mybucket
/mnt/s3/mybucket is a mountpoint
Run Code Online (Sandbox Code Playgroud)
很棒,对吧?
那么问题来了。我正在使用 Fabric 来自动化构建和管理此实例的过程。我注意到在使用 Fabric 构建 s3fs 并设置挂载过程时收到此错误消息:
mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected
Run Code Online (Sandbox Code Playgroud)
我将其隔离在问题中,并构建了一个重现问题的结构任务:
def remount_s3fs():
sudo("mount -a")
Run Code Online (Sandbox Code Playgroud)
这样做:
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] Executing task 'remount_s3fs'
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] sudo: mount -a
Run Code Online (Sandbox Code Playgroud)
[是的,我确定在运行此任务之前将其卸载。] 当我使用挂载点检查挂载时,我得到:
$ mountpoint /mnt/s3/mybucket
mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected
Done.
Run Code Online (Sandbox Code Playgroud)
但是如果我sudo mount -a在命令行上运行,它就可以工作。嗯。
这是 fab 任务的输出,这次是完全调试模式:
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] Executing task 'remount_s3fs'
[ec2-xx-xx-xx-xx.compute-1.amazonaws.com] sudo: sudo -S -p 'sudo password:' /bin/bash -l -c "mount -a"
Run Code Online (Sandbox Code Playgroud)
再次,我得到那个传输端点未连接错误。我还尝试将运行的确切命令复制并粘贴到我的 ssh 会话(即sudo -S -p 'sudo password:' /bin/bash -l -c "mount -a")中,并且工作正常。
所以……那是我的问题。有任何想法吗?
好吧,它的工作方式并不总是这样......就在我提交这个问题时,一个昏暗的灯泡在我的脑海中熄灭了,我想起了一些关于 pty 终端 Fabric 使用时不时引起问题的事情。发现这是在 Fabric 文档中run():
您可以传递 pty=False 以放弃在远程端创建伪终端,以防出现某个伪终端导致相关命令出现问题。
好吧,如果我将sudo任务中的语句修改如下:
sudo("mount -a", pty=False)
Run Code Online (Sandbox Code Playgroud)
一切正常。
| 归档时间: |
|
| 查看次数: |
3168 次 |
| 最近记录: |