OpenBSD 配置:客戶端無法使用 Berkeley Automounter (amd) 通過 NFS 進行掛載
我想要做的是讓我的 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,但我讓它工作了,這意味著我大部分時間都在那裡。:)