OpenBSDconfiguration:无法使用Berkeley Automounter(amd)通过NFS装载客户端

我想要做的是让我的OpenBSD客户端(OpenBSD 4.9)自动挂载Linux NFS文件系统(Scientific Linux 6.1)。 到目前为止,我不确定它是否configuration正确。

为了让事情顺利,我能够手动挂载nfs

# mount_nfs -T -3 192.168.15.100:/exports /mnt # ls -la /mnt total 52 drwxr-xr-x 7 root wheel 4096 Oct 4 22:42 . drwxr-xr-x 16 root wheel 512 Nov 26 16:33 .. drwxrwxr-x 5 _sndio _sndio 4096 Oct 31 21:58 centos drwxr-xr-x 15 root wheel 4096 Nov 6 09:17 home drwxr-xr-x 5 root wheel 4096 Oct 31 21:27 sl drwxr-xr-x 3 root wheel 4096 Nov 19 16:02 sles drwxr-xr-x 17 503 503 4096 Nov 10 17:37 users # 

所以,据我所知,连接不是问题。

根据手册页,在/etc/amd/auto.home中configuration以下内容:

 /defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp * rhost:=192.168.15.100;rfs:=/exports 

反过来,/ etc / amd / master也是这样configuration的:

 # cat /etc/amd/master /exports amd.home 

重新启动后,我可以看到mount,但足够好奇,而不是主机名:

 amd:24490 0 0 0 100% /exports 

据我所知,amd和FreeBSD有点不同。 不过,我试着看看我能不能自动挂载。

不:

 ksh: cd: /exports/users - Resource temporarily unavailable # cd /exports/192.168.15.100/host/users ksh: cd: /exports/192.168.15.100/host/users - Resource temporarily unavailable 

在谷歌search没有太多的帮助 – 它似乎是自动挂载NFS与OpenBSD不是通常做的事情。 除此之外,信息相当稀less。

我可以,当然,永远安装是永久性的,但我倾向于在会议上有点肛门,所以暂时没有。 🙂

有些方向是欣赏。

(哦,如果你想知道的话,我尝试过使用amd的FreeBSD方法,但是还没有成功 – 尽pipe我不介意FreeBSD实现和OpenBSD如何实现它之间的区别)

更新:几次重新编写映射文件后,我实际上用这个configuration与NFS服务器进行通信:

 /defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\ sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport * ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport 

但是,出于某种原因,似乎amd将只能通过udp默认NFS版本2:

 # tcpdump dst kerberos tcpdump: listening on pcn0, link-type EN10MB tcpdump: WARNING: compensating for unaligned libpcap packets 20:38:28.558385 openbsd.monzell.com.856 > kerberos.monzell.com.sunrpc: udp 100 20:38:28.559154 openbsd.monzell.com.856 > kerberos.monzell.com.892: udp 96 20:38:30.592761 openbsd.monzell.com.856 > kerberos.monzell.com.nfsd: xid 0x22000000 (NFSv2) 40 null 20:38:33.558107 arp reply openbsd.monzell.com is-at 52:54:00:52:8f:66 

我尝试了各种强制它尝试挂载为nfsv3的选项,例如:

 /defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\ sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport * ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport 

要么:

 /defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\ sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=-3,proto=tcp,resvport * ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport 

还没有。

奇怪的是,OpenBSD的默认版本是3,所以我不确定为什么它会从amd版本3开始。 什么是正确的选项传递给automount

编辑:正如我指出的,我可以通过fstab指向。 为了certificate,这里是:

 kerberos:/exports /mnt nfs rw,nodev,nosuid,tcp,soft,intr 1 1 Filesystem 512-blocks Used Avail Capacity Mounted on /dev/wd0a 290396 89032 186848 32% / /dev/wd0k 3240316 1858940 1219364 60% /home /dev/wd0d 448956 12 426500 0% /tmp /dev/wd0f 1943196 903596 942444 49% /usr /dev/wd0g 1105820 346852 703680 33% /usr/X11R6 /dev/wd0h 4387772 256560 3911824 6% /usr/local /dev/wd0j 2137436 4 2030564 0% /usr/obj /dev/wd0i 2137436 4 2030564 0% /usr/src /dev/wd0e 498940 18676 455320 4% /var amd:26660 0 0 0 100% /net kerberos:/exports 103212280 66319088 31650312 68% /mnt 

正如我所指出的,OpenBSD首先通过版本3挂载,所以我不知道为什么在amd下,它不会通过版本3(tcp)挂载,而是通过版本2挂载udp。

编辑:build议,我尝试了以下configuration:

 defaults type:=nfs;fs:=${autodir} # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt # Be careful with 'umount' and 'unmount' in the following. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" 

那回来了

 # cd /net/remote usage: [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o options] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [-x retrans] rhost:path node ksh: cd: /net/remote - Operation not permitted 

那么这个:

 defaults type:=nfs;fs:=${autodir} # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt # Be careful with 'umount' and 'unmount' in the following. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" 

哪个返回了这个:

 # cd /net/remote nfs: realpath kerberos.monzell.com:/exports/: No such file or directory ksh: cd: /net/remote - Operation not permitted 

还没有。

最后“计算”出来。 我所做的是将现有的FreeBSD映射文件复制到/etc/amd/amd.net,如下所示:

 /defaults type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key} * opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev 

{autodir}被设置为amd所使用的默认目录(显然是/ tmp_mnt,而$ {rhost}是密钥指定的远程主机(它在DNS或/ etc / hosts文件中查找主机名:

 192.168.15.250 qnap qnap.monzell.com 

最重要的是主机目录。

然后我在根目录中创build了一个目录:

的/ etc / AMD /主:

 /host amd.net 

然后我创build一个根目录下的主机目录。 之后,它按预期工作。

 $ df Filesystem 512-blocks Used Avail Capacity Mounted on /dev/wd0a 290396 89088 186792 32% / /dev/wd0k 3240316 1858968 1219336 60% /home /dev/wd0d 448956 12 426500 0% /tmp /dev/wd0f 1943196 903596 942444 49% /usr /dev/wd0g 1105820 346852 703680 33% /usr/X11R6 /dev/wd0h 4387772 256560 3911824 6% /usr/local /dev/wd0j 2137436 4 2030564 0% /usr/obj /dev/wd0i 2137436 4 2030564 0% /usr/src /dev/wd0e 498940 18656 455340 4% /var amd:9747 0 0 0 100% /host qnap:/Public 1916713232 642213152 1274500080 34% /tmp_mnt/qnap/host/Public qnap:/pub 1916713232 642213152 1274500080 34% /tmp_mnt/qnap/host/pub qnap:/users 1916713232 642213152 1274500080 34% /tmp_mnt/qnap/host/users 

它看起来像NFS需要通过主机,通过NFSv3 / TCP照顾远程安装的大部分通信。 任何直接通过amd远程挂载的尝试都将默认为udp,版本2。

仍然不是很了解amd,但我知道它的工作,这意味着我主要在那里。 🙂

关于types:= program mount / unmount命令,OpenBSD上amd的infodoc提到参数中的第一个元素是要执行的程序,第二个参数是以$ 0的forms传入的。

所以哟,如果我做到了

mount:=“/ sbin / mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr host:/ path / $ {key} / local / $ {key}”

我结束了:

用法:-x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o选项] [-R重试] [-r读取] [-t超时] [-w写入] [ – x retrans] rhost:path节点

把'mount_nfs'放在-x10(和unmount prog类似)的前面,解决了我的语法错误,但是我发现整个“mount -a mount_point,然后使符号链接”的东西不会自动处理案件。 我辩论写一个包装脚本,而是结束了与:

/ defaults键入:= nfs; jspiegel rhost:= NFS_HOST; rfs:= NFS_EXPORT_PATH / $ {key}; opts:=“rw,tcp,intr”

在我的情况下,我通过NIS获取auto.home,其中的语法是特定于Linux的nfs挂载,所以我做了一个cronjob在auto.home上做yppoll,如果服务器有一个新的,我把它拉下来,基本上通过sed(1)跑了很多,并吐出一个auto.home.fixed文件,我已经阅读。 不是完美的,但有问题的机器只是一个YP客户端,而不是一个奴隶,所以yp / Makefile没有任何好处。

你可能不需要amd。 我自动安装了大量的NFS目录,我从来没有需要amd。 在OpenBSD中,你不会转向Google,而是转向手册页。 看到这个例子的fstab(5)手册页:

server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0

我的理解是,amd和fstab不需要被视为替代品,在fstab正常工作之后,amd应该放在fstabconfiguration之上。 本页说明如何使用amd自动安装CD和软盘驱动器。 它涉及到OpenBSD的老版本,但希望仍然相关。

我没有完全理解你的configuration,也没有在OpenBSD上configurationNFS,但是你似乎试图把最好放在fstab中的configuration改成amd。 首先获取它在fstab中的所有工作,然后configurationamd以使用您在fstab中完成的工作。

希望有所帮助。

我认为你最近编辑的mount命令是错误的。 对BSD不了解很多,但是让我们试一下。

 defaults type:=nfs;fs:=${autodir} # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt # Be careful with 'umount' and 'unmount' in the following. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" 

那回来了

 # cd /net/remote usage: [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o options] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [-x retrans] rhost:path node ksh: cd: /net/remote - Operation not permitted 

由于它给你使用的输出,参数是错误的。 在这种情况下,目标目录丢失。

然后这个:defaults type:= nfs; fs:= $ {autodir}#autodir = -a参数amd call = amd_mnt在rc.conf = / tmp_mnt#请注意下面的“umount”和“unmount”。 远程types:= program; fs:= / mnt; \ mount:=“/ sbin / mount nfs kerberos.monzell.com:/exports/”; \ unmount:=“/ sbin / umount / mnt”

 # cd /net/remote nfs: realpath kerberos.monzell.com:/exports/: No such file or directory ksh: cd: /net/remote - Operation not permitted 

你错过了-t in /sbin/mount -t nfs kerberos.monzell.com:/exports/

我认为它应该没有程序参数,即不使用mount命令直接。 但我现在不是…

再说一遍:在OpenBSD中,你不会转向Google,而是转向手册页。

所以,像禅师一样阅读手册页。

或者,如amd手册页所述,使用:'info amd'

手册页提到日志logging,让我们知道,如果你得到任何amd或nfs相关的消息,不要害怕与我们分享。

另外,请检查/ tmp_mnt和/ a

然而,再次从手册页:“一个奇怪的想象力是最有用的,以充分利用所有function”。