O arquivo é diferente quando lido do servidor NFS

5

Então eu tenho um servidor de backup que estamos usando há algum tempo, é um servidor do FreeBSD rodando o zfs e servindo-o através do NFS. A exportação é simples: /backup/vm -maproot=root -alldirs . Se relevante, isso foi configurado através do zfs:

zfs get sharenfs
backup/vm sharenfs  -maproot=root -alldirs  local

Ele está funcionando bem e até restauramos esses backups. Hoje eu descobri puramente por acidente, que arquivos lidos do compartilhamento nfs, não correspondem ao que foi escrito (e ao que está no servidor).

Para demonstrar: no servidor, temos

pg11.txt (downloaded on the server)
pg11.txt.1 (uploaded by a client over nfs)

Ambas são Alice no País das Maravilhas, baixadas daqui: link

No servidor nfs:

md5 pg11.txt*
MD5 (pg11.txt) = eff1e5d84df1d3a543d1c578192a2367
MD5 (pg11.txt.1) = eff1e5d84df1d3a543d1c578192a2367

Até aí tudo bem. Agora em um cliente:

md5sum pg11.txt*
4d79d99b8eebe364cddf5ce42949bc3e  pg11.txt
eff1e5d84df1d3a543d1c578192a2367  pg11.txt.1

O que? Lendo pg11.txt do cliente, posso encontrar facilmente linhas como:

Alice started to her feet, for it flashed across her <80>^A^@<80>^V<A0>R+^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^A^@^@^A<A4>^@^@^@^A^^@^@^@^@^@^@^@^@^@^@^@^@^B<8E>^^@^@^@^@^@^B^B^@^@^@^@f7<D9>^@^@^@^@^@^@^V^V<EE>3^@^@^@^@^@^@^BFT^B<8C<FF>^E<D9>m(T^B<8C><E7>^]<CE>[<95>T^B<8C><E7>^]<CE>[<95>^@^A^@^@^@^@^@^@^@^A^@^@<U+FEFF>Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll

Agora, em outro cliente:

md5sum pg11.txt*
eff1e5d84df1d3a543d1c578192a2367  pg11.txt
b9c4076a85a151e730b9a9077fd6023b  pg11.txt.1

2º cliente, mas acima de tcp:

md5sum  pg11.txt*
d80ce8c17092b1b759295e27a3c0af60  pg11.txt
14cde84fd05bd39845c9bb8fc0042eda  pg11.txt.1

Os clientes anteriores, onde ambos XenServer 6.2, se eu tentar um sistema Ubuntu:

md5sum pg11.txt*
eff1e5d84df1d3a543d1c578192a2367  pg11.txt
81ca4f5b9b334d00a07fcb16f444a60a  pg11.txt.1

Assim, cada cliente parece ter uma imagem diferente e geralmente não é a correta. Espero que alguém possa me dar alguma pista sobre o que está acontecendo aqui e como consertá-lo, porque estou perplexo.

Editar:

Os vários arquivos, incluindo diff, podem ser encontrados aqui: link . Parece que o início do arquivo é repetido várias (7) vezes, precedido pela mesma seqüência binária a cada vez. Também é interessante notar que a corrupção parece ser consistente para cada cliente, ou seja, cada cliente sempre vê a mesma versão corrompida, em vez de corrupção diferente em cada leitura.

Editar2:

O problema ocorre com o NFSv3 e o 4. Ele parece ocorrer apenas em clientes Linux, não em outros FreeBSDs. Os clientes testados são o XenServer 6.2 e o Ubuntu 10.04, o que significa que, se for um bug do cliente, ele abrange as versões do kernel 2.6 - 3.11. Atualmente não tenho outro servidor FreeBSD para testar.

    
por Walton Hoops 31.08.2014 / 05:19

1 resposta

3

Ok, então acontece que este é um bug com o driver bxe no FreeBSD 10.0-Release especificamente

The bxe(4) driver can cause packet corruption when TSO (TCP Segmentation Offload) feature is enabled. This feature is enabled by default and can be disabled by using a -tso parameter of ifconfig(8). It can be specified in rc.conf(5) like the following:

ifconfig_bxe0="DHCP -tso"

This bug has been fixed on FreeBSD 10.0-STABLE.

Muito obrigado ao junovitch nos fóruns do FreeBSD por descobrir isso.

    
por 09.09.2014 / 23:24