如果 fstab 中的 Windows 网络驱动器出现故障,系统将在关机时挂起

如果 fstab 中的 Windows 网络驱动器出现故障,系统将在关机时挂起

大约一个月前,我在 fstab 中添加了一个 Windows 网络驱动器(使用 WiFi 访问):

//Server/Location/foo/bar /media/myNetworkDrive/ cifs auto,iocharset=utf8,uid=umang,credentials=/root/.cifscredentials,file_mode=0775,dir_mode=0775 0 0

运行良好,只是系统需要一分钟才能关机。我尝试了发布在帮助维基, 这团队维基以及这个博客其中一个可以成功关机几次,但之后系统又需要一分钟才能再次关机。

编辑:我想要一个在职的解决这个问题。目前,我有一个脚本可以卸载(超级用户权限需要密码)然后关闭计算机,但我希望能够以通常的方式关闭计算机,并使其尽可能快地关闭。

答案1

这是一个众所周知的错误: https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/211631?comments=all

这是一个值得庆幸的罕见但仍然令人尴尬的、影响巨大的、存在两年多的漏洞,它对 Ubuntu 的光彩产生了负面影响。

它应该只会影响 WIFI 连接,但我没有在您的问题中看到任何有关此问题的详细信息。如果您通过有线连接遇到此问题,那么这里肯定有其他原因。

在网络管理器修复之前(它会过快地关闭 wifi 连接 - 在任何初始化脚本被触发之前),我能找到的唯一可行的解​​决方法是使用 AutoFS。

转述自http://www.howtoforge.com/accessing_windows_or_samba_shares_using_autofs

sudo apt-get install autofs

创建 /etc/auto.cifs,文件内容如下:

#!/bin/bash
# $Id$
# This file must be executable to work! chmod 755!
key="$1"
# Note: create a cred file for each windows/Samba-Server in your network
#       which requires password authentification.  The file should contain
#       exactly two lines:
#          username=user
#          password=*****
#       Please don't use blank spaces to separate the equal sign from the
#       user account name or password.
credfile="/etc/auto.smb.$key"
# Note: Use cifs instead of smbfs:
mountopts="-fstype=cifs,file_mode=0644,dir_mode=0755,uid=user,gid=users"
smbclientopts=""
for P in /bin /sbin /usr/bin /usr/sbin
do
        if [ -x $P/smbclient ]
        then
                SMBCLIENT=$P/smbclient
                break
        fi
done
[ -x $SMBCLIENT ] || exit 1
if [ -e "$credfile" ]
then
        mountopts=$mountopts",credentials=$credfile"
        smbclientopts="-A "$credfile
else
        smbclientopts="-N"
fi
$SMBCLIENT $smbclientopts -gL $key 2>/dev/null \
   | awk -v key="$key" -v opts="$mountopts" -F'|' -- '
        BEGIN   { ORS=""; first=1 }
    /Disk/  { if (first) { print opts; first=0 };
          gsub(/ /, "\\ ", $2);
          sub(/\$/, "\\$", $2);
          print " \\\n\t /" $2, "://" key "/" $2 }
        END     { if (!first) print "\n"; else exit 1 }
        '

(编辑 mountops 行以反映您的真实用户名)

使其可执行sudo chmod 755 /etc/auto.cifs

然后将这一行添加到你的 /etc/auto.master 的底部:

/smb /etc/auto.cifs --timeout=60 --ghost

最后,使用此行重新启动 autofs(当然,重新启动也可以):

sudo service autofs restart

然后你就可以打开 nautilus 到 /smb/server/share (或ls -l /smb/Server/Share

关机、挂起、休眠都应该是无缝的。

如果您使用密码连接到共享,则必须在 /etc/ 中为连接到的每个服务器添加另一个文件,并指定用户名和密码。执行“man autofs”以获取更多详细信息,但要点如下:

对于要连接的每个受密码保护的共享,您需要一个凭据文件。 在您的例子中,您的服务器称为“服务器”,因此使用 创建相关文件gksudo gedit /etc/auto.smb.Server。 然后将其放入该文件中:

username=myusername
password=mypassword

(显然根据需要编辑字段)。

然后您需要确保该文件只有具有 的 root 权限才能读取sudo chmod 600 /etc/auto.smb.Server

然后按照上述方法重新启动 autofs 并尝试浏览 /smb/Server - 您应该会看到您的共享列表。

如果您使用 IP 地址连接,则需要对 /etc/auto.smb.192.168.1.10 或其他地址重复此过程。

答案2

您应该使用指南来了解如何制作卸载关机脚本并确保它仍处于打开状态。理论上,升级或更新可能会使它失去作用。检查您的脚本是否已安装/etc/rc0.d并且已命名S01smb_umount或类似,以便它作为首要任务运行。

否则,您最终可能会看到它正常卸载 Samba 驱动器(等待、等待),然后运行您的脚本。它什么也不做。

答案3

我在 Win2003 服务器 samba 共享上遇到了同样的问题,以下是本指南解决了这个问题。

相关内容