Fuse

遠端執行(通過 Fabric)時,為什麼 mount -a 沒有正確安裝保險絲驅動器?

  • January 11, 2019

這是一個奇怪的錯誤,我不確定它來自哪裡。這是我正在做的事情的簡要介紹。

我正在嘗試使用 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

所以好消息是這很好用。重新啟動時,連接正確安裝。我也可以這樣做:

$ sudo umount /mnt/s3/mybucket 
$ sudo mount -a
$ mountpoint /mnt/s3/mybucket 
/mnt/s3/mybucket is a mountpoint

太好了,對吧?

那麼問題來了。我正在使用 Fabric 來自動化建構和管理此實例的過程。我注意到在使用 Fabric 建構 s3fs 並設置掛載過程時收到此錯誤消息:

mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected

我將問題隔離出來並建構了一個重現問題的結構任務:

def remount_s3fs():
   sudo("mount -a")

哪個:

[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

$$ And yes, I was sure to unmount it before running this task. $$當我使用 mountpoint 檢查安裝時,我得到:

$ mountpoint /mnt/s3/mybucket
mountpoint: /mnt/s3/mybucket: Transport endpoint is not connected

Done.

但如果我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"

同樣,我得到那個傳輸端點未連接錯誤。我還嘗試將執行的確切命令複製並粘貼到我的 ssh 會話(即sudo -S -p 'sudo password:' /bin/bash -l -c "mount -a")中,它工作正常。

所以……這是我的問題。有任何想法嗎?

好吧,這不總是它是如何工作的……就像我送出這個問題一樣,一個昏暗的燈泡在我的腦海中熄滅了,我想起了一些關於 Fabric 使用的 pty 終端不時導致問題的事情。發現這是在 Fabric 文件中run()

您可以傳遞 pty=False 以放棄在遠端端創建偽終端,以防偽終端的存在導致相關命令出現問題。

好吧,如果我將sudo任務中的聲明修改如下:

sudo("mount -a", pty=False)

一切正常。

引用自:https://serverfault.com/questions/247672