NFS et SMB prennent-ils en charge les fichiers clairsemés?

18

Cette question a déjà été posée dans le débordement de pile, mais les bonnes personnes là-bas ont recommandé d'essayer la communauté ici à la place.

Je fais des recherches sur les fichiers clairsemés en ce qui concerne divers systèmes de fichiers et j'essaie de trouver quelque chose de concret qui déclare que les fichiers clairsemés sont pris en charge par les systèmes de fichiers réseau (NFS) ou Server Message Block (SMB).

Je comprends que SMB est largement utilisé dans Windows et que selon cette entrée , un serveur SMB peut prendre en charge un fichier clairsemé même si le système de fichiers sous-jacent ne le fait pas. Cependant, si j'ai raison, le système de fichiers qui ne prend pas en charge les fichiers clairsemés ne ferait que combler les «trous» de zéros, ce qui pourrait entraîner un problème de performances.

En ce qui concerne NFS, je n'ai pas pu découvrir quoi que ce soit sur l'utilisation de fichiers clairsemés prenant en charge NFS.

Par conséquent, mes questions sont,

Les fichiers épars sont-ils pris en charge dans NFS et SMB?

winhung
la source

Réponses:

12

NFS: il a un support partiel pour les fichiers clairsemés. Fondamentalement, il prend en charge la création d'un fichier clairsemé mais, lors de la lecture, le fichier est développé pour inclure des zéros. Cela signifie que, bien que vous puissiez créer un fichier clairsemé via NFS, lors de la lecture de ce même fichier, les données du réseau en transit incluront tous les zéros trouvés dans le fichier d'origine. Un test simple montre que le comportement:

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

-rw-r - r--. 1 racine root 1.0G 26 octobre 11:29 test.img

du -hs test.img

0 test.img

Comme vous pouvez le voir, le fichier test.img a une taille sur disque de 0 octet. Cependant, la relire en utilisant des dd if=test.img of=/dev/null bs=1M iflag=directspectacles

1024 + 0 enregistrements en
1024 + 0 enregistrements en sortie
1073741824 octets (1,1 Go) copiés, 10.2269 s, 105 Mo / s

Il est clair que lors du transfert du fichier clairsemé, il est étendu pour inclure tous les zéros.

NFSv4.2 se développera en incluant une gestion spéciale pour le transfert réseau du fichier clairsemé. En d'autres termes, avec NFSv4.2, ce qui précède ddse terminera presque instantanément.

SMB: il a le même comportement que NFS , au moins dans mes environnements de test, en utilisant un serveur Samba v3.6.x avec CIFS v1 et un client Linux en utilisant mount.cifs. Peut-être que sous Windows, il se comporte différemment ...

shodanshok
la source
NFS peut-il prendre en charge des fichiers clairsemés si le système de fichiers sous-jacent du serveur NFS ne prend pas en charge les fichiers clairsemés?
Andrew Henle,
2
@shodanshok: votre test n'est pas valide. L'exécution des mêmes commandes sur un système de fichiers qui prend en charge des fichiers clairsemés donne le même résultat. ddlit bloc par bloc et si le système de fichiers sous-jacent prend en charge les fichiers clairsemés ou non, les trous sont transformés en zéros par le système d'exploitation. Essayez-le sur ext4 et vous verrez les mêmes numéros.
abligh
@AndrewHenle si le FS sous-jacent ne prend pas en charge le fichier clairsemé, comment NFS peut-il exposer un support inexistant? Quoi qu'il en soit, de nos jours, il est assez difficile de trouver un système de fichiers sans prise en charge clairsemée, car tous les systèmes de fichiers Linux récents (ext3 / 4, xfs, etc.) prennent en charge cette fonctionnalité.
shodanshok
1
@abligh Vous vous trompez. L'exécution de la ddcommande sur un fichier local clairsemé donnera des résultats beaucoup plus rapides. Voir ici pour un exemple :, 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/sComme vous pouvez le voir, la lecture d'un fichier local clairsemé donne une vitesse d'E / S au nord de 10 Go / s
shodanshok
2
@shodanshok - Oh je vois, vous regardez la vitesse, pas le montant transféré. Il serait peut-être utile de préciser cela dans votre réponse. Le test canonique pour un fichier stocké de manière clairsemée est du -svs ls -l, mais vous avez raison, cela n'aide pas à la transmission sur le réseau; mais dans les deux cas (comme cela stracesera confirmé), ddle fichier entier est lu, y compris les «trous» en tant que zéros, la différence étant uniquement d'où proviennent les «zéros» (côté serveur ou client). Cependant, notez (selon ma réponse) que NFS 4.2 prend entièrement en charge les fichiers clairsemés.
abligh
10

NFS

Oui, NFS 4.2 prend entièrement en charge les fichiers clairsemés (voir ce document canonique et cette présentation ).

Avant NFS 4.2, le modèle client / serveur NFS supportait les fichiers clairsemés dans le sens où l'API supportait toutes les opérations de fichiers POSIX. Cela signifiait que l'écriture de fichiers épars sur un serveur prenant en charge des fichiers épars sur le système de fichiers de sauvegarde entraînait la création d'un fichier épars (plutôt que de stocker de nombreux zéros). Mais la lecture du fichier entraînerait la transmission de beaucoup de zéros pour l'élément clairsemé. IE, la réponse est «partiellement».

NFS 4.2 ajoute la possibilité pour le client de «voir» les trous dans les fichiers, et donc pour le serveur de ne pas avoir à transmettre tous ces zéros. De l'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.

Malgré le fait que la spécification prend en charge les fichiers épars, il serait possible pour un implémenteur paresseux d'éviter d'implémenter la prise en charge des fichiers épars dans le client ou le serveur.

SMB

Je connais moins SMB, mais je pense qu'il prend également en charge les fichiers clairsemés, si le bit de capacité FS correspondant est défini. Voir ici pour plus d'informations.

abligh
la source