.png)
Lo que estoy tratando de hacer es que mi cliente openBSD (OpenBSD 4.9) monte automáticamente un sistema de archivos Linux NFS (Scientific Linux 6.1). Hasta el momento no estoy seguro si está configurado correctamente.
Para solucionar el problema, puedo montar nfs manualmente:
# 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
#
Así que, hasta donde yo sé, la conectividad no es un problema.
Según la página de manual, lo siguiente está configurado en /etc/amd/auto.home:
/defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp
* rhost:=192.168.15.100;rfs:=/exports
A su vez, /etc/amd/master está configurado así:
# cat /etc/amd/master
/exports amd.home
Al reiniciar, puedo ver el montaje, pero curiosamente, en lugar del nombre de host:
amd:24490 0 0 0 100% /exports
Por lo que tengo entendido, AMD actúa de forma un poco diferente a FreeBSD. Aún así, intenté ver si podía montarlo automáticamente.
No:
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
Una búsqueda en Google no ayuda demasiado: parece que el montaje automático de NFS con OpenBSD no es algo que se haga habitualmente. Otro queeste, la información es bastante escasa.
Por supuesto, siempre puedo montarlo permanentemente, pero tiendo a ser un poco anal por convención, así que no por ahora. :)
Alguna dirección sería la apreciación.
(Y oh, en caso de que se lo pregunte, probé la forma FreeBSD de usar AMD y no funcionó, aunque no me importaría una explicación de la diferencia entre cómo lo implementa FreeBSD y cómo lo implementa OpenBSD).
ACTUALIZACIÓN: Después de reescribir el archivo de mapa varias veces, llegué a comunicarme con el servidor NFS con esta configuración:
/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
Sin embargo, por alguna razón, parece que AMD solo utilizará de forma predeterminada NFS versión 2 sobre udp:
# 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
Probé varias opciones para forzarlo a intentar montarlo como nfsv3, como por ejemplo:
/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
o:
/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
Nada todavía.
Curiosamente, OpenBSD monta los valores predeterminados en la versión 3, por lo que no estoy seguro de por qué comenzaría con la versión 3 en AMD. ¿Cuáles serían las opciones correctas para pasar a automontaje?
EDITAR: Como señalé, puedo señalar a través de fstab. Como prueba, aquí está:
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
Como señalé, OpenBSD se monta primero a través de la versión 3, así que no sé por qué bajo amd, no se monta a través de la versión 3 (tcp) sino que se monta a través de la versión 2 con udp.
EDITAR: Como se sugirió, intenté las siguientes configuraciones:
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"
que regreso
# 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
Luego esto:
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"
Que devolvió esto:
# cd /net/remote
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted
Nada aún.
Respuesta1
Finalmente lo "descubrí". Lo que hice fue copiar un archivo de mapa de FreeBSD existente a /etc/amd/amd.net de la siguiente manera:
/defaults type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
* opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev
{autodir} está configurado en el directorio predeterminado utilizado por AMD (que aparentemente es /tmp_mnt, mientras que ${rhost} es el host remoto como lo especifica la clave (que busca el nombre del host en DNS o en el archivo /etc/hosts). :
192.168.15.250 qnap qnap.monzell.com
Además de eso está el directorio de host.
Luego creé un directorio en la raíz como:
/etc/amd/master:
/host amd.net
Luego creo un directorio de host en la raíz. Posteriormente, funciona como se esperaba.
$ 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
Parece que la mayor parte de la comunicación NFS debe realizarse a través del host, que se encarga del montaje remoto a través de NFSv3/TCP. Cualquier intento de realizar el montaje de forma remota a través de AMD directamente utilizará de forma predeterminada udp, versión 2.
Todavía no lo entiendo realmente, pero lo hice funcionar, lo que significa que estoy casi allí. :)
Respuesta2
con respecto a los comandos type:=program mount/unmount, el documento de información para AMD en OpenBSD menciona que el primer elemento en el argumento es el programa a ejecutar, y el segundo argumento es lo que se pasa como $0.
Así que si lo hiciera
mount:="/sbin/mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr host:/path/${key} /local/${key}"
terminé obteniendo:
uso: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o opciones] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [- x retrans] rhost:nodo de ruta
poner 'mount_nfs' allí delante de -x10 (y similar para el programa de desmontaje) resolvió el error de sintaxis, sin embargo, encontré que todo el asunto de "montar en -a punto_de_montaje y luego crear enlaces simbólicos" no se manejó automáticamente en este caso. Me debatí sobre escribir un script contenedor pero terminé con:
/tipo predeterminado:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"
en mi caso, obtengo auto.home a través de NIS, y la sintaxis que contiene es específica del montaje nfs de Linux, por lo que estoy haciendo un cronjob que realiza un yppoll en auto.home, y si el servidor tiene uno más nuevo, Lo bajé y básicamente lo ejecuto mucho a través de sed(1) y escupo un archivo auto.home.fixed que he leído. No es perfecto, pero la máquina en cuestión es solo un cliente YP, no un esclavo, por lo que nada en el archivo yp/Makefile me servirá de nada.
Respuesta3
Probablemente no necesites amd. Monto automáticamente muchos directorios NFS, nunca he necesitado amd. Con OpenBSD, no recurres a Google, sino a las páginas de manual. Consulte la página del manual de fstab(5), que tiene este ejemplo:
server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0
Respuesta4
Creo que su comando de montaje en las últimas ediciones es incorrecto. No sé mucho sobre BSD, pero intentémoslo.
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"
que regreso
# 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
Como le proporciona el resultado de uso, los parámetros son incorrectos. En este caso, falta el directorio de destino.
Entonces esto: defaults type:=nfs;fs:=${autodir} # autodir = -a parámetro de amd call = amd_mnt in rc.conf = /tmp_mnt # Tenga cuidado con 'umount' y 'unmount' a continuación. tipo remoto:=program;fs:=/mnt;\ mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" Que devolvió esto:
# cd /net/remote nfs: realpath kerberos.monzell.com:/exports/: No such file or directory ksh: cd: /net/remote - Operation not permitted
Te perdiste la -t
entrada /sbin/mount -t nfs kerberos.monzell.com:/exports/
.
Creo que debería funcionar sin parámetros de programa, es decir, sin utilizar el comando de montaje directamente. Pero ahora no lo hago...