¿NFS y SMB admiten archivos dispersos?

18

Esta pregunta se hizo anteriormente en el desbordamiento de la pila, pero las buenas personas allí me recomendaron que pruebe la comunidad aquí.

Estoy investigando archivos dispersos con respecto a varios sistemas de archivos y estoy tratando de encontrar algo concreto que indique que los archivos dispersos son compatibles con Network File Systems (NFS) o Server Message Block (SMB).

Entiendo que SMB se usa ampliamente en Windows y que de acuerdo con esta entrada , un servidor SMB puede admitir archivos dispersos incluso si el sistema de archivos subyacente no lo hace. Sin embargo, si estoy en lo cierto, el sistema de archivos que no admite archivos dispersos simplemente llenaría los 'agujeros' con ceros y esto podría conducir a un problema de rendimiento.

Con respecto a NFS, no he podido averiguar nada sobre el uso de NFS que admite archivos dispersos.

Por lo tanto, mis preguntas son:

¿Se admiten archivos dispersos en NFS y SMB?

winhung
fuente

Respuestas:

12

NFS: tiene un soporte parcial para archivos dispersos. Básicamente, admite la creación de un archivo disperso pero, al leer, el archivo se expande para incluir ceros. Esto significa que, si bien puede crear un archivo disperso a través de NFS, al leer ese mismo archivo, los datos de la red en tránsito incluirán los ceros encontrados en el archivo original. Una prueba simple muestra ese comportamiento:

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

-rw-r - r--. 1 raíz raíz 1.0G 26 de octubre 11:29 test.img

du -hs test.img

0 test.img

Como puede ver, el archivo test.img tiene un tamaño en disco de 0 bytes. Sin embargo, volver a leerlo usando dd if=test.img of=/dev/null bs=1M iflag=directshows

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

Está claro que al transferir el archivo disperso, se expande para incluir todos los ceros.

NFSv4.2 se expandirá al incluir un manejo especial para la transferencia de red de archivos dispersos. En otras palabras, con NFSv4.2 lo anterior ddse completará casi al instante.

SMB: tiene el mismo comportamiento que NFS , al menos en mis entornos de prueba, usando un servidor Samba v3.6.x con CIFS v1 y un cliente Linux usando mount.cifs. Quizás bajo Windows se comporta de manera diferente ...

shodanshok
fuente
¿Puede NFS admitir archivos dispersos si el sistema de archivos subyacente del servidor NFS no admite archivos dispersos?
Andrew Henle
2
@shodanshok: tu prueba no es válida. La ejecución de los mismos comandos en un sistema de archivos que hace de soporte archivos dispersos se obtiene el mismo resultado. ddlee en bloque por bloque y si el sistema de archivos subyacente admite archivos dispersos o no, el sistema operativo convierte los agujeros en ceros. Pruébelo en ext4 y verá los mismos números.
Abligh
@AndrewHenle si el FS subyacente no admite un archivo disperso, ¿cómo puede NFS exponer un soporte no existente? De todos modos, hoy en día es bastante difícil encontrar un sistema de archivos sin escaso soporte de archivos, ya que todos los sistemas de archivos Linux recientes (ext3 / 4, xfs, etc.) admiten esa característica.
shodanshok
1
@abligh Estás equivocado. Ejecutar el ddcomando sobre un archivo local disperso dará resultados mucho más rápidos. Vea aquí un ejemplo :, 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 puede ver, leer un archivo local disperso le da una velocidad de E / S al norte de 10 GB / s
shodanshok
2
@shodanshok - Oh, ya veo, estás mirando la velocidad, no la cantidad transferida. Quizás aclarar que en su respuesta sería útil. La prueba canónica para un archivo que se almacena de forma dispersa es du -svs ls -l, pero tiene razón, eso no ayuda con la transmisión a través de la red; pero en cualquier caso (como straceconfirmará) ddestá leyendo todo el archivo, incluidos los 'agujeros' como ceros, la diferencia solo está donde se originan los 'ceros' (servidor o cliente). Sin embargo, tenga en cuenta (según mi respuesta) que NFS 4.2 es totalmente compatible con archivos dispersos.
Abligh
10

NFS

Sí, NFS 4.2 es totalmente compatible con archivos dispersos (consulte este documento canónico y esta presentación ).

Antes de NFS 4.2, el modelo cliente / servidor NFS soportaba archivos dispersos en el sentido de que la API soportaba todas las operaciones de archivos POSIX. Esto significaba que escribir archivos dispersos en un servidor que admitía archivos dispersos en el sistema de archivos de respaldo resultó en la creación de un archivo disperso (en lugar de almacenar muchos ceros). Pero leer el archivo daría como resultado la transmisión de muchos ceros para el elemento disperso. Es decir, la respuesta es 'parcialmente'.

NFS 4.2 agrega la capacidad para que el cliente 'vea' agujeros en los archivos y, por lo tanto, para que el servidor no tenga que transmitir todos esos ceros. De la identificación:

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.

A pesar de que la especificación admite archivos dispersos, sería posible que un implementador perezoso evite implementar la compatibilidad con archivos dispersos en el cliente o en el servidor.

SMB

Sé menos sobre SMB, pero creo que también admite archivos dispersos, si se establece el bit de capacidad FS relevante. Ver aquí para más información.

abligh
fuente