使用 autofs 挂载 CIFS 共享

使用 autofs 挂载 CIFS 共享

我有一个运行 RHEL 5.5 的系统,我正在尝试使用 在服务器上安装 Windows 共享autofs。(由于启动时网络尚未准备好,我不想使用fstab。)我可以手动安装共享,但autofs就是无法安装它们。

以下是我正在处理的文件:

在结束时/etc/auto.master,我有:

## Mount this test share:
/test    /etc/auto.test    --timeout=60

在 中/etc/auto.test,我有:

test    -fstype=cifs,username=testuser,domain=domain.com,password=password ://server/test

然后我重新启动该autofs服务。

但是,这不起作用。 ls目录不会返回任何结果。我已经按照网络上的所有这些指南操作,但我要么不理解它们,要么它们根本不起作用。

谢谢

答案1

应该已经有一个 /etc/auto.smb,使用它,并将以下行添加到 /etc/auto.master:

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

现在所有 cifs 共享将显示在 /cifs 下:

ls /cifs/<server>

将显示所有可用的共享。您可能希望在 /etc/auto.smb 中放入一些选项,以便使用特定模式进行挂载。我有一个 auto.smb,我在某处找到并修改了它以执行此操作:

#!/bin/bash
# $Id: auto.smb,v 1.3 2005/04/05 13:02:09 raven Exp $
# This file must be executable to work! chmod 755!

key="$1"
credfile="/etc/auto.smb.$key"

opts="-fstype=cifs,file_mode=0644,dir_mode=0755,uid=eng,gid=eng"
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
    opts=$opts",credentials=$credfile"
    smbclientopts="-A "$credfile
else
    smbclientopts="-N"
fi

$SMBCLIENT $smbclientopts -gNL $key 2>/dev/null| awk -v key="$key" -v opts="$opts" -F'|' -- '
    BEGIN   { ORS=""; first=1 }
    /Disk/  {
              if (first)
                  print opts; first=0
              dir = $2
              loc = $2
              # Enclose mount dir and location in quotes
              # Double quote "$" in location as it is special
              gsub(/\$$/, "\\$", loc);
              print " \\\n\t \"/" dir "\"", "\"://" key "/" loc "\""
            }
    END     { if (!first) print "\n"; else exit 1 }
'

这个可以满足你的要求。我自己用过。

答案2

因为我刚刚花了一上午的时间调试同一个问题。让我解释一下上面发生的事情。

自动主机管理工具

## Mount this test share:
/test    /etc/auto.test    --timeout=60

这意味着我想安装一些东西/test,详情请阅读/etc/auto.test

/etc/auto.test

test    -fstype=cifs,username=testuser,domain=domain.com,password=password ://server/test

这意味着作为 auto.master 中指定的子文件夹,请使用以下信息安装测试。(即安装将是/test/test正如 slm 正确指出的那样)。

这意味着ls /test/test将显示的内容//server/test

为了实现 /test -> //server/test 的最初目标,您需要执行以下操作:

自动主机管理工具

## Mount this test share:
/    /etc/auto.test    --timeout=60

还有一些其他注意事项。我发现以下安装选项很有用。

rw- 以读/写方式安装

noserverino- 删除有关 inode 编号支持的错误消息

credentials=[credential file]- 这允许您创建一个包含凭据的单独文件。其格式如下:

username=[windows username, domain can be included as well]
password=[windows password]

编辑--2013-06-17 13:28PM GMT-8

评论中的 slm 指出,挂载到文件系统的根目录可能会很危险。评论中的 lsd 提出了一种解决方法,即从文件系统的根目录创建一个符号链接,指向您要挂载的不同位置,并且不会与某些常见位置重叠。例如,如果您希望将 /test 作为挂载点,那么您实际上会将内容挂载到 /net/the_test_mount,然后创建一个指向 /net/the_test_mount 的符号链接 /test

答案3

我刚刚在 CentOS 5.6 机器上执行了此操作,我认为您的问题部分可能出在您的 auto.test 文件上。在当前形式下,您将创建一个 /test 挂载点,然后在其下创建一个单独的测试挂载点,即 /test/test。此外,您可能希望将 --ghost 开关添加到您的 auto.master 行,如下所示:

/test    /etc/auto.test    --timeout=60 --ghost

即使给定的共享未被主动挂载,--ghost 开关也会创建挂载点的存根。

看看这个CentOS wiki 技巧和窍门页面关于如何安装 SMB/CIFS 共享。

安装提示

  • Windows 共享 = \mysmb\share1
  • Unix 目录 = /test/dir1

想法#1

 # /etc/auto.master
/test                 /etc/auto.test --timeout=600 --ghost

# /etc/auto.test
dir1         -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/dir1
dir2         -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/dir2

想法 #2

 # /etc/auto.master
/test                 /etc/auto.test --timeout=600 --ghost

# /etc/auto.test
*            -fstype=cifs,rw,noperm,netbiosname=${HOST},credentials=/etc/creds.txt ://mysmb/test/&

答案4

如果您使用 cifs,建议也使用_netdev参数。

_netdev这是因为文件系统驻留在需要网络访问的设备上,这用于防止系统尝试挂载这些文件系统,直到主机系统上启用网络。

相关内容