关机时 CIFS 自动挂载共享

关机时 CIFS 自动挂载共享

运行 Ubuntu 我最近遇到了关闭计算机的问题 - 每次我关闭时它都会挂起,无论是从 GUI 还是命令行sudo shutdown -hP now

~$ uname -a
Linux mythbuntu 3.0.0-17-generic #30-Ubuntu SMP x86_64 x86_64 GNU/Linux

我的 /etc/fstab 中有一些 cifs 条目,它们被设置为自动,以便它们在启动时安装。

~$ cat /etc/fstab | grep cifs
//remoteserver/stuff    /mnt/remoteserver/stuff cifs ro,username=myuser,password=mypass,nobootwait,auto 0 0
//remoteserver/public   /mnt/remoteserver/public cifs rw,username=myuser,user,suid,noatime,nobootwait,auto 0 0

我添加了 nobootwait,但似乎没有什么区别(在另一个论坛上提出建议)

当我改变汽车为了禁止自动系统没有挂起,但我希望在启动时尝试这些挂载。

我在网上搜索了修复信息,有很多建议,但没有具体的答案。我在关机时看到的消息似乎表明无人值守升级服务在网络服务已经关闭后尝试使用 mountall,并且无法挂载网络共享。输出的最后一部分提到启动然后几乎立即停止 apache2 webserver,原因不明。我在关机时也看到过这个错误umount //proc/fs/nfsd: device is busy我的 fstab 中没有 nfs 挂载。

我是否尝试错误地使用 CIFS?有没有更好的方法来在网络上安装共享而不会受到此问题的困扰?(它适用于媒体中心类型的配置,因此一切都应该是自动的)

答案1

基于uSlackr的回答,我修改了mount_shares_locally脚本(如下)

  • 我创建了这个文件/etc/init.d/mount_shares_locally
  • 然后chmod 755 /etc/init.d/mount_shares_locally使其可执行
  • 我创建了一个目录sudo mkdir /var/lock/subsys/
  • noauto在每个 CIFS 共享选项中添加了这些选项,以防止它们在mountall
  • 确保sudo service mount_shares_locally restart没有错误
  • 最后将其添加到启动/关闭运行级别sudo update-rc.d mount_shares_locally defaults

#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          mount_shares_locally
# Required-Start:    $network $local_fs $remote_fs smb mysqld
# Required-Stop:     $network $local_fs $remote_fs smb
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mount Samba shares locally
### END INIT INFO

if [ -f /etc/rc.d/init.d/functions ]; then  # "/lib/lsb/init-functions" on Ubuntu
    . /etc/rc.d/init.d/functions
fi

start () {  
    echo -n "Mounting Samba shares locally:\n"

    cat /etc/fstab | grep 'cifs.*\(password\|credentials\)' | while read -r remoteServer localMount type options;
    do
        echo Mounting $remoteServer to $localMount
        mount $localMount
    done

    touch /var/lock/subsys/mount_shares_locally
    echo
    return 0
}

stop () {
    echo -n "Unmounting locally mounted Samba shares:\n"

    cat /etc/fstab | grep 'cifs.*\(password\|credentials\)' | while read -r remoteServer localMount type options;
    do
        echo Unmounting $localMount
        umount $localMount
    done

    rm -f /var/lock/subsys/mount_shares_locally

    echo
    return 0
}

restart () {
    stop
    start
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac

exit $?

我还必须向 upstart 模型添加另一个脚本,以便在启动期间(网络启动后)的正确时间调用 mount_shares_locally:

/etc/init/mount_shares_locally.conf

# mount_shares_locally - Mount any cifs shares in /etc/fstab when network comes online
#

description "Mount CIFS shares"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on (runlevel [!12345] or net-device-down IFACE=eth0)

respawn
console none

pre-start script
    mkdir -p -m0755 /var/run/mount_shares_locally
    exec /etc/init.d/mount_shares_locally start
end script

post-stop script
    mkdir -p -m0755 /var/run/mount_shares_locally
    exec /etc/init.d/mount_shares_locally stop
end script

答案2

您可以创建一个“服务”,在关机期间取消这些映射。我使用 Fedora/Amahi 服务器上的脚本来执行此操作。它需要针对 Ubuntu 进行调整,但理论上可行。

更多内容请见:http://wiki.amahi.org/index.php/Mount_Shares_Locally

相关内容