OpenBSD 設定:客戶端無法使用 Berkeley Automounter (amd) 透過 NFS 進行掛載

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

還沒有。

答案1

終於「想通」了。我所做的是將現有的 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

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

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

答案2

關於 type:=program mount/unmount 指令,OpenBSD 上 amd 的資訊文件提到參數中的第一個元素是要執行的程序,第二個參數是作為 $0 傳入的。

所以,如果我這樣做的話

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

我最終得到:

用法:-x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o 選項] [-R retrycnt] [-r readsize] [-t 時間] [-w writesize] [- x retrans] rhost:路徑節點

將“mount_nfs”放在 -x10 前面(與卸載程序類似)解決了我的語法錯誤,但是我發現整個“安裝到 -a mount_point 然後創建符號鏈接”的事情在此並沒有自動處理案件。我曾考慮編寫一個包裝腳本,但最終還是選擇了:

/預設類型:=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 中的任何內容都不會對我有任何好處。

答案3

你可能不需要 amd.我自動掛載了很多 NFS 目錄,我從來不需要 amd。使用 OpenBSD,您不需要求助於 Google,您可以求助於手冊頁。請參閱 fstab(5) 手冊頁,其中包含以下範例:

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

答案4

我認為您上次編輯的安裝命令是錯誤的。對 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 argument of amd call = amd_mnt in rc.conf = /tmp_mnt # 注意下面的 'umount' 和 'unmount'。遠端類型:=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

你錯過了-tin /sbin/mount -t nfs kerberos.monzell.com:/exports/.

我認為它應該在沒有程式參數的情況下工作,即不直接使用 mount 命令。但我現在不是...

相關內容