%20%E9%80%8F%E9%81%8E%20NFS%20%E9%80%B2%E8%A1%8C%E6%8E%9B%E8%BC%89.png)
我想做的是讓我的 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
你錯過了-t
in /sbin/mount -t nfs kerberos.monzell.com:/exports/
.
我認為它應該在沒有程式參數的情況下工作,即不直接使用 mount 命令。但我現在不是...