%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%20NFS%20%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88.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
#
したがって、私が知る限り、接続性は問題ではありません。
man ページによると、/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を自動マウントすることは通常行われていないようです。これ、情報はかなり少ないです。
もちろん、いつでも永続的にマウントできますが、私は慣習に少しこだわる傾向があるので、今のところはそうではありません。 :)
いくつかの方向性としては、感謝の気持ちが挙げられます。
(あ、もしあなたが不思議に思っているなら、私は amd を使用する FreeBSD の方法を試しましたが、うまくいきませんでした。ただし、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 から始まる理由がよくわかりません。automount に渡す正しいオプションは何でしょうか?
編集: 指摘したように、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/マスター:
/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 をあまり理解していませんが、動作させることはできたので、ほぼ完成しました。 :)
答え2
type:=program マウント/アンマウント コマンドに関しては、OpenBSD の amd の infodoc に、引数の最初の要素は実行するプログラムであり、2 番目の引数は $0 として渡されるものであると記載されています。
つまり、もし私が
マウント:="/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 options] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [-x retrans] rhost:path node
-x10 の前に 'mount_nfs' を入れると (アンマウント プログラムでも同様)、構文エラーは解決しましたが、この場合、「-a mount_point にマウントしてシンボリック リンクを作成する」という処理全体が自動的に処理されないことがわかりました。ラッパー スクリプトを書こうかと考えましたが、代わりに次のスクリプトを採用しました。
/defaults type:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"
私の場合、NIS 経由で auto.home を取得していますが、その構文は Linux の NFS マウントに固有のものです。そのため、auto.home で yppoll を実行する cronjob を実行し、サーバーに新しいものがある場合はそれをプルダウンして、基本的に 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 = amd の -a パラメータ call = amd_mnt in rc.conf = /tmp_mnt # 次の 'umount' と 'unmount' に注意してください。 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
あなたは-t
インを逃しました/sbin/mount -t nfs kerberos.monzell.com:/exports/
。
プログラム パラメータなしで、つまりマウント コマンドを直接使用せずに動作するはずです。しかし、私は現在、amd を使用しません...