NFS 挂载文件夹中的 Dropbox

NFS 挂载文件夹中的 Dropbox

我在 Ubuntu 机器上使用 Dropbox,Dropbox 文件夹位于通过 /etc/fstab 中的条目挂载的驱动器上。每次重启后我都会遇到一些麻烦。当我登录时,系统会显示一条消息,提示我缺少 dropbox 文件夹。但是,当我实际登录时,文件夹已经存在,因为挂载在启动过程中很快就完成了。

当我简单地退出提示,然后重新启动 Dropbox 时,一切都没有故障。

所以,我的问题是 - 我如何让 dropbox 启动器等待所有待处理的 /etc/fstab 挂载完成?

NFS 挂载与用于服务 Ubuntu 虚拟硬盘(VMWare)的服务器位于同一台服务器上,因此机器启动时没有共享的问题极不可能发生。

答案1

假设你使用https://www.dropbox.com/download?plat=lnx.x86而不是.deb 包,让 dropbox 启动器等待的一种可能方法是使用 shell 脚本。实际上,我认为您使用了 .deb 包,因为您说它“修补了文件管理器”。无论如何,无论采用哪种安装方法,下面的脚本都应该可以工作。

据我所知,mountall(8)它在 Ubuntu 中作为“upstart 作业”运行(无论它是什么)。它会一直运行,直到所有文件系统(包括 NFS)都已挂载。我们可以检查它是否正在运行或启动它。当USR1该进程收到信号后,所有 NFS 系统都已挂载。如果挂载成功,则mountall终止。此脚本必须以超级用户身份运行。

/usr/local/bin/dropbox-wait-mount

#!/bin/sh
runas={$1:-root}
mpid=`pidof mountall`
if [ -z "$mpid" ] ; then
        mountall --daemon --no-events -q
        mpid=`pidof mountall`
else
        echo mountall is running, going to notify it to mount nfs shares
fi

kill -USR1 $mpid # see /etc/init/mountall-net.conf and mountall(8)
mpid=`pidof mountall`

while [ -n "$mpid" ]; do
        echo waiting for all mounts
        sleep 30
        kill -USR1 $mpid # see /etc/init/mountall-net.conf and mountall(8)
        sleep 1
        mpid=`pidof mountall`
done

echo should be safe to run dropbox now
exec su $runas -c /home/$runas/.dropbox-dist/dropboxd

手册页建议不要依赖的功能mountall,但考虑到的性质“临时解决办法”我认为您可以使用它一段时间。

对于与 Ubuntu 启动作业的一些集成:

/etc/init/dropbox.conf

# based on ssh.conf

description     "Dropbox daemon"
env RUNAS=root # use /etc/init/dropbox.override

#start on stopped mountall-net RESULT=ok
start on remote-filesystems
stop on runlevel [!2345]

respawn
respawn limit 10 5
umask 022

# 'sshd -D' leaks stderr and confuses things in conjunction with 'console log'
console none

pre-start script
    test -x /usr/local/bin/dropbox-wait-mount || { stop; exit 0; }
end script

# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# 'exec' line here instead
exec /usr/local/bin/dropbox-wait-mount $RUNAS || { stop; exit 0; }

/etc/init/dropbox.override

env RUNAS=jaroslav

此示例应仅在所有网络文件系统都已挂载后运行,但也可以手动运行:

start dropbox #RUNAS=jaroslav

答案2

更简单的方法是使用 autofs 来为你挂载 nfs,然后按需挂载,你不必担心同步

这是我的配置

$ grep home  /etc/auto.master 
/home2 /etc/auto.home

$ cat /etc/auto.home

dropbox -intr,nfsv4,soft NFS.intranet:/backups/dropbox

$ echo $HOME
/home2/dropbox

$ id
uid=1001(dropbox) gid=1001(dropbox) groups=1001(dropbox)

相关内容