NFS e SMB supportano file sparsi?


18

Questa domanda era stata precedentemente posta in overflow dello stack, ma le brave persone lì mi hanno consigliato di provare la community qui.

Sto cercando file sparsi per quanto riguarda i vari filesystem e sto cercando di trovare qualcosa di concreto che affermi che i file sparsi sono supportati da Network File Systems (NFS) o Server Message Block (SMB).

Comprendo che SMB è ampiamente utilizzato in Windows e che secondo questa voce , un server SMB può supportare file sparsi anche se il file system sottostante non lo fa. Tuttavia, se ho ragione, il file system che non supporta i file sparsi riempirebbe solo i "buchi" di zeri e questo potrebbe portare a un problema di prestazioni.

Per quanto riguarda NFS, non sono stato in grado di scoprire nulla sull'uso di NFS che supporta i file sparsi.

Quindi, le mie domande sono,

I file sparsi sono supportati in NFS e SMB?

Risposte:


12

NFS: ha un supporto parziale per file sparse. Fondamentalmente, supporta la creazione di un file sparse ma, durante la lettura, il file viene espanso per includere zero. Ciò significa che, mentre è possibile creare un file sparse tramite NFS, quando si legge lo stesso file, i dati della rete in transito includeranno tutti gli zero trovati sul file originale. Un semplice test mostra che il comportamento:

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

-rw-r - r--. 1 radice radice 1.0G 26 ott 11:29 test.img

du -hs test.img

0 test.img

Come puoi vedere, il file test.img ha una dimensione su disco di 0 byte. Tuttavia, rileggilo usando gli dd if=test.img of=/dev/null bs=1M iflag=directspettacoli

1024 + 0 record in
1024 + 0 record
1073741824 byte (1,1 GB) copiati, 10.2269 s, 105 MB / s

È chiaro che quando si trasferisce il file sparse, viene espanso per includere tutti gli zeri.

NFSv4.2 si espanderà includendo una gestione speciale per il trasferimento in rete di file sparsi. In altre parole, con NFSv4.2 quanto sopra ddverrà completato quasi istantaneamente.

SMB: ha lo stesso comportamento di NFS , almeno nei miei ambienti di test, usando un server Samba v3.6.x con CIFS v1 e un client Linux usando mount.cifs. Forse sotto Windows si comporta diversamente ...


NFS può supportare file sparsi se il file system sottostante del server NFS non supporta file sparsi?
Andrew Henle,

2
@shodanshok: il test non è valido. Esecuzione gli stessi comandi su un file system che fa di supporto file sparsi produce lo stesso risultato. ddlegge blocco per blocco e se il file system sottostante supporta file sparsi o meno, i buchi vengono trasformati in zeri dal sistema operativo. Provalo su ext4 e vedrai gli stessi numeri.
circa

@AndrewHenle se l'FS sottostante non supporta file sparsi, come può NFS esporre un supporto inesistente? Ad ogni modo, al giorno d'oggi è abbastanza difficile trovare un filesystem senza il supporto dei file sparsi, dato che tutti i filesystem Linux recenti (ext3 / 4, xfs, ecc.) Supportano quella caratteristica.
shodanshok,

1
@abligh Ti sbagli. L'esecuzione del ddcomando su un file sparse locale darà risultati molto più rapidi. Vedi qui per un esempio :, 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/sCome puoi vedere, la lettura di un file locale sparse fornisce una velocità I / O a nord di 10 GB / s
shodanshok,

2
@shodanshok - Oh, vedo, stai guardando la velocità, non la quantità trasferita. Forse chiarire che nella tua risposta sarebbe utile. Il test canonico per un file che viene archiviato in modo scarso è du -svs ls -l, ma hai ragione che non aiuta con la trasmissione in rete; ma in entrambi i casi (come straceconfermeremo) ddsta leggendo l'intero file, inclusi "buchi" come zero, la differenza sta solo nel punto di origine degli "zeri" (lato server o client). Tuttavia notare (come per la mia risposta) che NFS 4.2 non supporta completamente i file sparse.
circa

10

NFS

Sì, NFS 4.2 supporta completamente i file sparsi (vedere questo documento canonico e questa presentazione ).

Prima di NFS 4.2, il modello client / server NFS supportava file sparsi, nel senso che l'API supportava tutte le operazioni sui file POSIX. Ciò significa che la scrittura di file sparsi su un server che supportava i file sparsi sul file system di backup ha comportato la creazione di un file sparse (anziché la memorizzazione di molti zeri). Ma la lettura del file comporterebbe la trasmissione di molti zero per l'elemento sparse. Vale a dire la risposta è 'parzialmente'.

NFS 4.2 aggiunge la possibilità per il client di "vedere" buchi nei file, e quindi per il server di non dover trasmettere tutti quegli zero. Dall'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.

Nonostante il fatto che la specifica supporti file sparsi, sarebbe possibile per un implementatore pigro evitare di implementare il supporto per file sparsi nel client o nel server.

SMB

Conosco meno SMB, ma credo che supporti anche i file sparsi, se è impostato il relativo bit di capacità FS. Vedi qui per maggiori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.