O NFS e o SMB oferecem suporte a arquivos esparsos?

18

Esta pergunta foi feita anteriormente no estouro de pilha, mas as pessoas boas recomendaram que eu tentasse a comunidade por aqui.

Estou pesquisando sobre arquivos esparsos em relação a vários sistemas de arquivos e estou tentando encontrar algo concreto que indique que os arquivos esparsos são suportados pelo Network File Systems (NFS) ou pelo Server Message Block (SMB).

Entendo que o SMB é amplamente usado no Windows e que, de acordo com esta entrada , um servidor SMB pode oferecer suporte a arquivos esparsos, mesmo que o sistema de arquivos subjacente não. No entanto, se eu estiver certo, o sistema de arquivos que não suporta arquivos esparsos preencheria os 'buracos' com zeros e isso pode levar a um problema de desempenho.

Com relação ao NFS, não consegui descobrir nada sobre o uso do NFS que suporta arquivos esparsos.

Portanto, minhas perguntas são,

Os arquivos esparsos são suportados no NFS e SMB?

Winhung
fonte

Respostas:

12

NFS: possui suporte parcial para arquivos esparsos. Basicamente, ele suporta a criação de um arquivo esparso, mas, ao ler, o arquivo é expandido para incluir zeros. Isso significa que, embora você possa criar um arquivo esparso via NFS, ao ler o mesmo arquivo, os dados da rede em trânsito incluirão quaisquer zeros encontrados no arquivo original. Um teste simples mostra esse comportamento:

cd /mnt/nfs
truncate test.img -s 1G
ls -lh test.img

-rw-r - r--. 1 root root 1.0G 26 de outubro 11:29 test.img

du -hs test.img

0 test.img

Como você pode ver, o arquivo test.img tem um tamanho de 0 bytes no disco. No entanto, lendo-o usando dd if=test.img of=/dev/null bs=1M iflag=directshows

1024 + 0 registros em
1024 + 0 registros
1073741824 bytes (1,1 GB) copiados, 10.2269 s, 105 MB / s

É claro que, ao transferir o arquivo esparso, ele é expandido para incluir todos os zeros.

O NFSv4.2 será expandido incluindo tratamento especial para transferência de arquivos esparsos pela rede. Em outras palavras, com o NFSv4.2, o acima ddserá concluído quase que instantaneamente.

SMB: possui o mesmo comportamento do NFS , pelo menos nos meus ambientes de teste, usando um servidor Samba v3.6.x com CIFS v1 e um cliente Linux usando mount.cifs. Talvez no Windows ele se comporte de maneira diferente ...

shodanshok
fonte
O NFS pode suportar arquivos esparsos se o sistema de arquivos subjacente do servidor NFS não suportar arquivos esparsos?
Andrew Henle
2
@shodanshok: seu teste é inválido. Executar os mesmos comandos em um sistema de arquivos que faz apoio arquivos esparsos produz o mesmo resultado. ddlê bloco por bloco e, se o sistema de arquivos subjacente suporta arquivos esparsos ou não, os buracos são transformados em zeros pelo sistema operacional. Experimente no ext4 e você verá os mesmos números.
abligh
@AndrewHenle se o FS subjacente não suportar arquivos esparsos, como o NFS pode expor um suporte inexistente? De qualquer forma, atualmente é bastante difícil encontrar um sistema de arquivos sem suporte a arquivos esparsos, pois todos os sistemas de arquivos Linux (ext3 / 4, xfs, etc) recentes suportam esse recurso.
shodanshok
11
@abligh Você está errado. A execução do ddcomando em um arquivo esparso local dará resultados muito mais rápidos. Veja aqui um exemplo :, root@hubble:~# truncate -s 1G test.img root@hubble:~# dd if=test.img of=/dev/null bs=1M iflag=direct 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.10478 s, 10.2 GB/sComo você pode ver, ler um arquivo esparso locais dou O norte / velocidade de 10 GB / s
shodanshok
2
@shodanshok - Ah, entendo, você está olhando para a velocidade, não a quantia transferida. Talvez esclarecer que em sua resposta seria útil. O teste canônico para um arquivo armazenado de forma esparsa é du -svs ls -l, mas você está certo que não ajuda na transmissão pela rede; mas em ambos os casos (como straceconfirmará) ddestá lendo o arquivo inteiro, incluindo 'buracos' como zeros, a diferença é apenas onde os 'zeros' se originam (servidor ou cliente). No entanto, observe (conforme minha resposta) que o NFS 4.2 oferece suporte total a arquivos esparsos.
abligh
10

NFS

Sim, o NFS 4.2 suporta totalmente arquivos esparsos (consulte este documento canônico e esta apresentação ).

Antes do NFS 4.2, o modelo de cliente / servidor do NFS suportava arquivos esparsos no sentido de que a API suportava todas as operações de arquivo POSIX. Isso significava que a gravação de arquivos esparsos em um servidor que suportava arquivos esparsos no sistema de arquivos de backup resultou na criação de um arquivo esparso (em vez de armazenar muitos zeros). Mas a leitura do arquivo resultaria na transmissão de muitos zeros para o elemento esparso. Ou seja, a resposta é 'parcialmente'.

O NFS 4.2 adiciona a capacidade do cliente de 'ver' falhas nos arquivos e, portanto, o servidor não precisa transmitir todos esses zeros. A partir do ID:

1.4.3.  Sparse Files

Sparse files are ones which have unallocated or uninitialized data
blocks as holes in the file.  Such holes are typically transferred as
0s during I/O. READ_PLUS (see Section 15.10) allows a server to send
back to the client metadata describing the hole and DEALLOCATE (see
Section 15.4) allows the client to punch holes into a file.  In
addition, SEEK (see Section 15.11) is provided to scan for the next
hole or data from a given location.

Apesar de a especificação suportar arquivos esparsos, seria possível para um implementador lento evitar a implementação de suporte para arquivos esparsos no cliente ou no servidor.

SMB

Eu sei menos sobre SMB, mas acredito que ele também suporta arquivos esparsos, se o bit de capacidade FS relevante estiver definido. Veja aqui para mais informações.

abligh
fonte