Openbsd

OpenBSD 配置:客戶端無法使用 Berkeley Automounter (amd) 通過 NFS 進行掛載

  • July 2, 2014

我想要做的是讓我的 openBSD 客戶端(OpenBSD 4.9)自動掛載 Linux NFS 文件系統(Scientific Linux 6.1)。到目前為止,我不確定它是否配置正確。

為了解決問題,我可以手動掛載 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 中配置了以下內容:

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

反過來, /etc/amd/master 配置如下:

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

重新啟動後,我可以看到掛載,但奇怪的是,而不是主機名:

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

在 google 中搜尋並沒有太大幫助 - 似乎通常不會使用 OpenBSD 自動掛載 NFS。除此之外資訊相當稀疏。

當然,我可以總是永久安裝,但我傾向於在慣例上有點肛門,所以現在不。:)

一些方向是欣賞。

(哦,如果您想知道,我嘗試了 FreeBSD 使用 amd 的方式,但沒有成功 - 儘管我不介意解釋 FreeBSD 如何實現與 OpenBSD 如何實現它之間的區別)

更新:多次重寫映射文件後,我得到了實際與 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 開始。傳遞給自動掛載的正確選項是什麼?

編輯:正如我所指出的,我可以通過 fstab 指向。為了證明,這裡是:

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 掛載。

編輯:按照建議,我嘗試了以下配置:

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

最重要的是主機目錄。

然後我在根目錄中創建了一個目錄:

/etc/amd/master:

/host amd.net

然後我在根目錄下創建一個主機目錄。之後,它按預期工作。

$ 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,但我讓它工作了,這意味著我大部分時間都在那裡。:)

引用自:https://serverfault.com/questions/335061