.png)
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 -t
entrada /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...