Configuración de OpenBSD: el cliente no puede montar a través de NFS usando Berkeley Automounter (amd)

Configuración de OpenBSD: el cliente no puede montar a través de NFS usando Berkeley Automounter (amd)

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 -tentrada /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...

información relacionada