O NFS e o SMB suportam arquivos esparsos?

14

Esta pergunta foi feita anteriormente em estouro de pilha, mas os bons amigos recomendaram que eu experimente a comunidade aqui.

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

Eu entendo que o SMB é amplamente usado no Windows e que, de acordo com esse entrada , um servidor SMB pode suportar 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 apenas preencheria os 'buracos' com zeros e isso poderia levar a um problema de desempenho.

Com relação ao NFS, não consegui descobrir nada sobre o uso de arquivos esparsos de suporte ao NFS.

Por isso, minhas perguntas são

São suportados arquivos esparsos no NFS e SMB?

    
por winhung 26.10.2015 / 10:14

2 respostas

11

NFS: ele tem um 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, enquanto você pode criar um arquivo esparso via NFS, ao ler de volta o mesmo arquivo, os dados da rede de trânsito incluirão 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 Oct 26 11:29 test.img

du -hs test.img

0 test.img

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

1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 10.2269 s, 105 MB/s

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

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

SMB: ele tem 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 o mount.cifs. Talvez no Windows se comporte de maneira diferente ...

    
por 26.10.2015 / 11:50
7

NFS

Sim, o NFS 4.2 suporta totalmente arquivos esparsos (veja este documento canônico e < a href="http://www.snia-europe.org/objects_store/mte_amcdonald_nfsv4.1_pnfs_future_dev.pdf"> esta apresentação ).

Antes do NFS 4.2, o modelo cliente / servidor do NFS suportava arquivos esparsos no sentido de que a API suportava todas as operações do arquivo POSIX. Isso significava que escrever arquivos esparsos em um servidor que suportava arquivos esparsos no sistema de arquivos de apoio resultava 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' buracos nos arquivos e, portanto, o servidor não precisa transmitir todos esses zeros. 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 do fato 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.

    
por 26.10.2015 / 14:12