Configuração do OpenBSD: Cliente não consegue montar via NFS usando Berkeley Automounter (AMD)

Configuração do OpenBSD: Cliente não consegue montar via NFS usando Berkeley Automounter (AMD)

O que estou tentando fazer é fazer com que meu cliente openBSD (OpenBSD 4.9) monte automaticamente um sistema de arquivos Linux NFS (Scientific Linux 6.1). Até agora, não tenho certeza se está configurado corretamente.

Para resolver as coisas, consigo montar o 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
# 

Portanto, a conectividade não é um problema, pelo que posso dizer.

De acordo com a página do manual, o seguinte está configurado em /etc/amd/auto.home:

/defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp
*         rhost:=192.168.15.100;rfs:=/exports

Por sua vez, /etc/amd/master é configurado assim:

# cat /etc/amd/master                                                                                                                                                                    
/exports amd.home

Após a reinicialização, posso ver a montagem, mas curiosamente, em vez do nome do host:

amd:24490                        0         0         0   100%    /exports

Pelo que entendi, o AMD age um pouco diferente do FreeBSD. Ainda assim, tentei ver se ele pode ser montado automaticamente.

Não:

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

Uma pesquisa no Google não ajuda muito - parece que a montagem automática do NFS com o OpenBSD não é algo que normalmente é feito. Outro que não sejaesse, as informações são bastante escassas.

Posso, é claro, sempre montar permanentemente, mas tendo a ser um pouco anal por convenção, então não por enquanto. :)

Alguma direção seria apreciação.

(E ah, caso você esteja se perguntando, eu tentei o modo FreeBSD de usar o amd e isso não funcionou - embora eu não me importasse em uma explicação da diferença entre como o FreeBSD implementa e como o OpenBSD o implementa)

ATUALIZAÇÃO: Depois de reescrever o arquivo de mapa várias vezes, cheguei ao ponto de realmente me comunicar com o servidor NFS com esta configuração:

/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

No entanto, por algum motivo, parece que o AMD usará como padrão apenas o NFS versão 2 sobre o 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

Eu tentei várias opções para forçá-lo a tentar montar como nfsv3, como:

/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

ou:

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

Curiosamente, o OpenBSD monta como padrão a versão 3, então não sei por que ele começaria com a versão 3 no AMD. Quais seriam as opções corretas para passar para montagem automática?

EDIT: Como indiquei, posso apontar via fstab. Como prova, aqui 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 observei, o OpenBSD é montado primeiro pela versão 3, então não sei por que no AMD, ele não seria montado pela versão 3 (tcp) e, em vez disso, seria montado pela versão 2 com udp.

EDIT: Conforme sugerido, tentei as seguintes configurações:

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"

Isso voltou

# 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

Então isso:

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"

O que retornou isso:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Nada ainda.

Responder1

Finalmente "descobri" isso. O que fiz foi copiar um arquivo de mapa existente do FreeBSD para /etc/amd/amd.net da seguinte maneira:

/defaults       type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
*               opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev

{autodir} é definido como o diretório padrão usado pelo amd (que aparentemente é /tmp_mnt, enquanto ${rhost} é o host remoto conforme especificado pela chave (que procura o nome do host no DNS ou no arquivo /etc/hosts :

192.168.15.250          qnap    qnap.monzell.com

Além disso está o diretório host.

Então criei um diretório na raiz como:

/etc/amd/master:

/host amd.net

Então eu crio um diretório host na raiz. Depois, funciona conforme o esperado.

$ 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 a maior parte da comunicação NFS precisa ser feita através do host, que cuida da montagem remota via NFSv3/TCP. Qualquer tentativa de montagem remota via AMD diretamente será padronizada para udp, versão 2.

Ainda não entendo realmente o AMD, mas consegui fazê-lo funcionar, o que significa que estou quase sempre lá. :)

Responder2

em relação aos comandos type:=program mount/unmount, o infodoc para amd no OpenBSD menciona que o primeiro elemento no argumento é o programa a ser executado, e o segundo argumento é o que é passado como $0.

então, ai, se eu fizesse

montagem:="/sbin/mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr host:/caminho/${chave} /local/${chave}"

acabei recebendo:

uso: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o opções] [-R retrycnt] [-r readsize] [-t tempo limite] [-w writesize] [- x retrans] rhost: caminho nó

colocar 'mount_nfs' lá na frente de -x10 (e semelhante para o programa de desmontagem) resolveu o erro de sintaxe para mim, no entanto, descobri que toda a coisa "montar em -a mount_point e depois criar links simbólicos" não foi tratada automaticamente neste caso. Eu debati em escrever um script wrapper, mas acabei optando por:

/padrões tipo:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"

no meu caso, estou obtendo o auto.home via NIS, e a sintaxe nele é específica para a montagem nfs do Linux, então estou fazendo um cronjob que faz um yppoll no auto.home, e se o servidor tiver um mais recente, eu o puxo para baixo e basicamente o executo muito sed(1) e cuspo um arquivo auto.home.fixed que eu li. não é perfeito, mas a máquina em questão é apenas um cliente YP, não um escravo, então nada no yp/Makefile vai me fazer bem.

Responder3

Você provavelmente não precisa do amd. Eu montei automaticamente muitos diretórios NFS, nunca precisei do amd. Com o OpenBSD, você não recorre ao Google, mas sim às páginas de manual. Veja a página man fstab(5), que tem este exemplo:

server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0

Responder4

Acho que seu comando mount nas últimas edições está errado. Não sei muito sobre BSD, mas vamos tentar.

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"

Isso voltou

# 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 fornece a saída de uso, os parâmetros estão errados. Neste caso, o diretório de destino está faltando.

Então isto: defaults type:=nfs;fs:=${autodir} # autodir = -a parâmetro de amd call = amd_mnt in rc.conf = /tmp_mnt # Tenha cuidado com 'umount' e 'unmount' a seguir. remote type:=program;fs:=/mnt;\ mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\ unmount:="/sbin/umount /mnt" Que retornou isto:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Você perdeu a -tentrada /sbin/mount -t nfs kerberos.monzell.com:/exports/.

Acho que deveria funcionar sem parâmetro de programa, ou seja, sem usar o comando mount diretamente. Mas eu não sei agora...

informação relacionada