Unterstützt NFS und SMB Sparse-Dateien?

18

Diese Frage wurde vorher im Stapelüberlauf gestellt, aber die guten Leute dort haben empfohlen, dass ich die Gemeinschaft hier stattdessen versuche.

Ich recherchiere auf Sparse-Dateien in Bezug auf verschiedene Dateisysteme und versuche, etwas Konkretes zu finden, das besagt, dass Sparse-Dateien von Network File Systems (NFS) oder Server Message Block (SMB) unterstützt werden.

Ich verstehe, dass SMB in Windows weit verbreitet ist und dass nach diesem Eintrag ein SMB-Server Sparse-Dateien unterstützen kann, auch wenn das zugrunde liegende Dateisystem dies nicht tut. Wenn ich jedoch Recht habe, würde das Dateisystem, das keine spärlichen Dateien unterstützt, die 'Löcher' nur mit Nullen füllen, und dies könnte zu einem Leistungsproblem führen.

In Bezug auf NFS konnte ich nichts über die Verwendung von NFS herausfinden, das Sparse-Dateien unterstützt.

Daher sind meine Fragen:

Werden Sparse-Dateien in NFS und SMB unterstützt?

winhung
quelle

Antworten:

12

NFS: Teilweise Unterstützung für Sparse-Dateien. Grundsätzlich wird das Erstellen einer Sparse-Datei unterstützt, aber beim Lesen wird die Datei um Nullen erweitert. Dies bedeutet, dass, während Sie eine Sparse-Datei über NFS erstellen können, beim Zurücklesen derselben Datei die Netzwerkdaten, die gerade übertragen werden, alle in der Originaldatei gefundenen Nullen enthalten. Ein einfacher Test zeigt dieses Verhalten:

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

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

du -hs test.img

0 test.img

Wie Sie sehen, hat die Datei test.img eine Festplattengröße von 0 Byte. Lesen Sie es jedoch mit dd if=test.img of=/dev/null bs=1M iflag=directShows zurück

1024 + 0 Datensätze in
1024 + 0 Datensätzen aus
1073741824 kopierten Bytes (1,1 GB), 10,2269 s, 105 MB / s

Es ist klar, dass beim Übertragen der Sparse-Datei diese um alle Nullen erweitert wird.

NFSv4.2 wird um eine spezielle Behandlung für die Netzwerkübertragung von Sparse-Dateien erweitert. Mit anderen Worten, mit NFSv4.2 wird das oben Genannte ddfast augenblicklich abgeschlossen.

SMB: Zumindest in meinen Testumgebungen verhält es sich wie NFS , wenn ein Samba v3.6.x-Server mit CIFS v1 und ein Linux-Client mit mount.cifs verwendet werden. Vielleicht verhält es sich unter Windows anders ...

Shodanshok
quelle
Kann NFS Sparse-Dateien unterstützen, wenn das zugrunde liegende Dateisystem des NFS-Servers keine Sparse-Dateien unterstützt?
Andrew Henle
2
@shodanshok: Dein Test ist ungültig. Wenn Sie dieselben Befehle auf einem Dateisystem ausführen, das Dateien mit geringer Dichte unterstützt, wird dasselbe Ergebnis erzielt. ddLiest blockweise ein und ob das zugrunde liegende Dateisystem spärliche Dateien unterstützt oder nicht, Lücken werden vom Betriebssystem in Nullen umgewandelt. Probieren Sie es auf ext4 und Sie werden die gleichen Zahlen sehen.
abligh
@AndrewHenle Wenn der zugrunde liegende FS keine Sparse-Datei unterstützt, wie kann NFS eine nicht vorhandene Unterstützung bereitstellen? Auf jeden Fall ist es heutzutage ziemlich schwierig, ein Dateisystem ohne Unterstützung für spärliche Dateien zu finden, da alle neueren (ext3 / 4, xfs usw.) Linux-Dateisysteme diese Funktion unterstützen.
Shodanshok
1
@abligh Du liegst falsch. Das Ausführen des ddBefehls über eine lokale Sparse-Datei führt zu viel schnelleren Ergebnissen. Ein Beispiel finden 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/sSie hier: Wie Sie sehen können, gibt das Lesen einer lokalen Sparse-Datei eine E / A-Geschwindigkeit nördlich von 10 GB / s an
shodanshok
2
@shodanshok - Oh, ich verstehe, du schaust auf die Geschwindigkeit, nicht auf den überwiesenen Betrag. Vielleicht wäre es hilfreich, dies in Ihrer Antwort zu klären. Der kanonische Test für eine Datei, die spärlich gespeichert ist , lautet du -svs ls -l, aber Sie haben Recht, das hilft bei der Übertragung über das Netzwerk nicht. In beiden Fällen wird (wie stracenoch bestätigt wird) dddie gesamte Datei gelesen, einschließlich der 'Löcher' als Nullen, wobei der Unterschied nur darin besteht, wo die 'Nullen' ihren Ursprung haben (Server- oder Client-Seite). Beachten Sie jedoch (wie pro meine Antwort) , dass NFS 4.2 nicht vollständig Sparse - Dateien unterstützen.
abligh
10

NFS

Ja, NFS 4.2 unterstützt Sparse-Dateien vollständig (siehe dieses kanonische Dokument und diese Präsentation ).

Vor NFS 4.2 unterstützte das NFS-Client / Server-Modell Sparse-Dateien in dem Sinne, dass die API alle POSIX-Dateivorgänge unterstützte. Dies bedeutete, dass beim Schreiben von Sparse-Dateien auf einen Server, der Sparse-Dateien im Backing-Dateisystem unterstützte, eine Sparse-Datei erstellt wurde (anstatt viele Nullen zu speichern). Das Lesen der Datei würde jedoch dazu führen, dass für das spärliche Element viele Nullen übertragen werden. IE ist die Antwort "teilweise".

NFS 4.2 bietet dem Client die Möglichkeit, Lücken in den Dateien zu erkennen, sodass der Server nicht alle diese Nullen übertragen muss. Aus der 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.

Trotz der Tatsache, dass die Spezifikation Dateien mit geringer Dichte unterstützt, könnte ein langsamer Implementierer die Implementierung der Unterstützung für Dateien mit geringer Dichte entweder auf dem Client oder auf dem Server vermeiden.

SMB

Ich weiß weniger über SMB, aber ich glaube, es unterstützt auch Sparse-Dateien, wenn das entsprechende FS-Fähigkeits-Bit gesetzt ist. Sehen Sie hier für weitere Informationen.

abligh
quelle