%20nicht%20%C3%BCber%20NFS%20mounten.png)
Ich versuche, meinen OpenBSD-Client (OpenBSD 4.9) dazu zu bringen, automatisch ein Linux-NFS-Dateisystem (Scientific Linux 6.1) zu mounten. Bisher bin ich mir nicht sicher, ob es richtig konfiguriert ist.
Um die Dinge aus dem Weg zu räumen, kann ich NFS manuell mounten:
# 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
#
Die Konnektivität stellt meines Wissens nach also kein Problem dar.
Gemäß der Manpage ist Folgendes in /etc/amd/auto.home konfiguriert:
/defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp
* rhost:=192.168.15.100;rfs:=/exports
/etc/amd/master ist wiederum folgendermaßen konfiguriert:
# cat /etc/amd/master
/exports amd.home
Beim Neustart wird „Mount“ angezeigt, aber merkwürdigerweise steht statt des Hostnamens:
amd:24490 0 0 0 100% /exports
So wie ich das verstehe, verhält sich amd etwas anders als FreeBSD. Trotzdem habe ich versucht, herauszufinden, ob es automatisch gemountet werden kann.
Nein:
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
Eine Suche in Google hilft nicht viel - es scheint, dass das automatische Einhängen von NFS bei OpenBSD nicht üblich ist. Anders alsDas, Informationen sind ziemlich spärlich.
Ich kann es natürlich immer dauerhaft montieren, aber ich bin ein bisschen pingelig, was Konventionen angeht, also im Moment nicht. :)
Eine mögliche Richtung wäre Wertschätzung.
(Und falls Sie sich das fragen: Ich habe versucht, AMD auf FreeBSDs Art zu verwenden, und das hat nicht funktioniert – obwohl ich nichts gegen eine Erklärung der Unterschiede zwischen der Implementierung bei FreeBSD und der bei OpenBSD hätte.)
UPDATE: Nachdem ich die Map-Datei mehrere Male neu geschrieben hatte, konnte ich mit dieser Konfiguration tatsächlich mit dem NFS-Server kommunizieren:
/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
Aus irgendeinem Grund scheint es jedoch so, dass amd standardmäßig nur NFS Version 2 über UDP verwendet:
# 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
Ich habe verschiedene Möglichkeiten ausprobiert, um die Bereitstellung als NFSD3 zu erzwingen, beispielsweise:
/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
oder:
/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
Noch immer nichts.
Interessanterweise wird bei OpenBSD standardmäßig Version 3 gemountet, daher bin ich mir nicht sicher, warum es in amd mit Version 3 startet. Welche Optionen wären für Automount die richtigen?
EDIT: Wie ich bereits erwähnt habe, kann ich über fstab verweisen. Als Beweis hier:
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
Wie ich bereits erwähnt habe, wird OpenBSD zuerst über Version 3 gemountet. Ich weiß also nicht, warum es unter AMD nicht über Version 3 (TCP) gemountet wird, sondern über Version 2 mit UDP.
BEARBEITEN: Wie vorgeschlagen habe ich die folgenden Konfigurationen versucht:
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"
Das kehrte zurück
# 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
Dann das:
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"
Das Ergebnis war:
# cd /net/remote
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted
Noch nichts.
Antwort1
Endlich habe ich es "herausgefunden". Ich habe eine vorhandene FreeBSD-Map-Datei wie folgt nach /etc/amd/amd.net kopiert:
/defaults type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
* opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev
{autodir} ist auf das von amd verwendete Standardverzeichnis eingestellt (anscheinend /tmp_mnt, während ${rhost} der Remote-Host ist, der durch den Schlüssel angegeben wird (der nach dem Hostnamen entweder im DNS oder in der Datei /etc/hosts sucht:
192.168.15.250 qnap qnap.monzell.com
Darüber befindet sich das Hostverzeichnis.
Dann habe ich im Stammverzeichnis ein Verzeichnis wie folgt erstellt:
/etc/amd/master:
/host amd.net
Dann erstelle ich ein Host-Verzeichnis unter root. Danach funktioniert es wie erwartet.
$ 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
Es sieht so aus, als ob die meiste NFS-Kommunikation über den Host laufen muss, der sich um die Remote-Mounts über NFSv3/TCP kümmert. Alle Versuche, direkt über amd remote zu mounten, werden standardmäßig über UDP, Version 2, ausgeführt.
Verstehe amd immer noch nicht wirklich, aber ich habe es zum Laufen gebracht, das heißt, ich bin fast am Ziel. :)
Antwort2
in Bezug auf die Mount-/Unmount-Befehle vom Typ „type:=program“ erwähnt das Infodoc für amd unter OpenBSD, dass das erste Element im Argument das auszuführende Programm ist und das zweite Argument das ist, was als $0 übergeben wird.
also, wenn ich das täte,
mount:="/sbin/mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr host:/Pfad/${key} /local/${key}"
am Ende bekam ich:
Verwendung: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o Optionen] [-R retrycnt] [-r Lesegröße] [-t Timeout] [-w Schreibgröße] [-x retrans] rhost:Pfadknoten
das Einfügen von „mount_nfs“ dort vor -x10 (und ähnlich für das Unmount-Programm) löste den Syntaxfehler für mich, ich stellte jedoch fest, dass die ganze Sache mit dem „Mounten auf -a Mount_Point und anschließendes Erstellen von Symlinks“ in diesem Fall nicht automatisch gehandhabt wurde. Ich überlegte, ein Wrapper-Skript zu schreiben, entschied mich aber stattdessen für:
/Standardtyp:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"
in meinem Fall erhalte ich auto.home über NIS und die Syntax darin ist spezifisch für die NFS-Einbindung von Linux, also führe ich einen Cronjob aus, der ein yppoll auf auto.home ausführt, und wenn der Server ein neueres hat, ziehe ich es herunter und lasse es im Grunde viel durch sed(1) laufen und spucke eine auto.home.fixed-Datei aus, die ich von AMD gelesen habe. Nicht perfekt, aber die betroffene Maschine ist nur ein YP-Client, kein Slave, also nützt mir nichts im yp/Makefile etwas.
Antwort3
Sie brauchen amd wahrscheinlich nicht. Ich mounte viele NFS-Verzeichnisse automatisch, ich habe amd nie gebraucht. Bei OpenBSD wenden Sie sich nicht an Google, sondern an die Manpages. Sehen Sie sich die Manpage fstab(5) an, die dieses Beispiel enthält:
server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0
Antwort4
Ich denke, Ihr Mount-Befehl in den letzten Änderungen ist falsch. Ich weiß nicht viel über BSD, aber versuchen wir es mal.
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"
Das kehrte zurück
# 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
Da die Nutzungsausgabe angezeigt wird, sind die Parameter falsch. In diesem Fall fehlt das Zielverzeichnis.
Dann dies: defaults type:=nfs;fs:=${autodir} # autodir = -a Parameter von amd call = amd_mnt in rc.conf = /tmp_mnt # Seien Sie im Folgenden vorsichtig mit „umount“ und „unmount“. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" Das hat dies zurückgegeben:
# cd /net/remote nfs: realpath kerberos.monzell.com:/exports/: No such file or directory ksh: cd: /net/remote - Operation not permitted
Du hast das -t
in verpasst /sbin/mount -t nfs kerberos.monzell.com:/exports/
.
Ich denke, es sollte ohne Programmparameter funktionieren, also ohne den Mount-Befehl direkt zu verwenden. Aber ich weiß jetzt nicht, AMD...