Czy NFS i SMB obsługują pliki rzadkie?

18

To pytanie zostało wcześniej zadane w przypadku przepełnienia stosu, ale dobrzy ludzie zalecili, żebym zamiast tego spróbował społeczności tutaj.

Badam rzadkie pliki w odniesieniu do różnych systemów plików i próbuję znaleźć coś konkretnego, co stwierdza, że ​​rzadkie pliki są obsługiwane przez Network File Systems (NFS) lub Server Message Block (SMB).

Rozumiem, że SMB jest powszechnie używany w systemie Windows i zgodnie z tym wpisem serwer SMB może obsługiwać pliki rozrzedzone, nawet jeśli podstawowy system plików nie. Jednak, jeśli mam rację, system plików, który nie obsługuje plików rzadkich, po prostu wypełniłby „dziury” zerami, co może prowadzić do problemów z wydajnością.

Jeśli chodzi o NFS, nie byłem w stanie dowiedzieć się niczego o używaniu NFS obsługujących rzadkie pliki.

Dlatego moje pytania brzmią:

Czy rzadkie pliki są obsługiwane w NFS i SMB?

winhung
źródło

Odpowiedzi:

12

NFS: ma częściową obsługę rzadkich plików. Zasadniczo obsługuje tworzenie rzadkiego pliku, ale podczas czytania plik jest rozszerzany o zero. Oznacza to, że chociaż można utworzyć plik rozrzedzony przez NFS, podczas odczytywania tego samego pliku dane sieci w tranzycie będą zawierać wszelkie zera znalezione w oryginalnym pliku. Prosty test pokazuje, że zachowanie:

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

-rw-r - r--. 1 root root 1.0G 26 października 11:29 test.img

du -hs test.img

0 test.img

Jak widać, plik test.img ma rozmiar na dysku 0 bajtów. Jednak czytanie go za pomocą dd if=test.img of=/dev/null bs=1M iflag=directprogramów

1024 + 0 zapisów w
1024 + 0
zapisanych danych 1073741824 bajtów (1,1 GB) skopiowanych, 10,2269 s, 105 MB / s

Oczywiste jest, że podczas przesyłania rzadkiego pliku jest on rozszerzany o wszystkie zera.

NFSv4.2 rozszerzy się o specjalną obsługę przesyłania sieciowego rzadkich plików. Innymi słowy, w NFSv4.2 powyższe zadanie ddzostanie ukończone niemal natychmiast.

SMB: zachowuje się tak samo jak NFS , przynajmniej w moich środowiskach testowych, przy użyciu serwera Samba v3.6.x z CIFS v1 i klienta Linux przy użyciu mount.cifs. Może pod Windows zachowuje się inaczej ...

Shodanshok
źródło
Czy NFS może obsługiwać pliki rzadkie, jeśli podstawowy system plików serwera NFS nie obsługuje plików rzadkich?
Andrew Henle,
2
@shodanshok: Twój test jest nieprawidłowy. Wykonywanie tych samych komend w systemie plików, który robi wsparcia plików rzadkich daje ten sam rezultat. ddczyta blok po bloku i niezależnie od tego, czy bazowy system plików obsługuje pliki rzadkie, czy nie, dziury są zamieniane przez system operacyjny na zera. Wypróbuj na ext4, a zobaczysz te same liczby.
dniu
@AndrewHenle, jeśli bazowy FS nie obsługuje plików rozrzedzonych, w jaki sposób NFS może ujawnić nieistniejące wsparcie? W każdym razie obecnie trudno jest znaleźć system plików bez rzadkiej obsługi plików, ponieważ wszystkie najnowsze systemy plików Linux (ext3 / 4, xfs itp.) Obsługują tę funkcję.
shodanshok
1
@abligh Mylisz się. Wykonanie ddpolecenia nad lokalnym plikiem rzadkim da znacznie szybsze wyniki. Zobacz tutaj przykład :, 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/sjak widać, czytanie lokalnego pliku rzadkiego daje prędkość I / O na północ od 10 GB / s
shodanshok
2
@shodanshok - Och, rozumiem, patrzysz na prędkość, a nie na przeniesioną kwotę. Być może wyjaśnienie tego w twojej odpowiedzi byłoby pomocne. Kanoniczna test dla pliku są przechowywane w rzadki sposób jest du -skontra ls -l, ale masz rację, że nie pomaga przy transmisji przez sieć; ale w obu przypadkach (co stracepotwierdzi) ddodczytany jest cały plik, w tym „dziury” jako zera, z tą różnicą, że pochodzą od „zer” (po stronie serwera lub klienta). Jednak zauważyć (jak na moją odpowiedź), że NFS 4.2 jest w pełni obsługują plików rzadkich.
dniu
10

NFS

Tak, NFS 4.2 w pełni obsługuje rzadkie pliki (zobacz ten dokument kanoniczny i tę prezentację ).

W wersjach wcześniejszych niż NFS 4.2 model klient / serwer NFS obsługiwał rzadkie pliki w tym sensie, że interfejs API obsługiwał wszystkie operacje na plikach POSIX. Oznaczało to, że zapisanie rzadkich plików na serwerze, który obsługiwał rzadkie pliki w systemie plików kopii zapasowych, spowodowało utworzenie rzadkiego pliku (zamiast przechowywania wielu zer). Ale odczytanie pliku spowodowałoby przesłanie wielu zer dla rzadkiego elementu. IE odpowiedź brzmi „częściowo”.

NFS 4.2 dodaje możliwość, aby klient widział „dziury” w plikach, a zatem serwer nie musiał przesyłać wszystkich tych zer. Z 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.

Pomimo faktu, że specyfikacja obsługuje rzadkie pliki, leniwy implementator może uniknąć implementacji obsługi rzadkich plików na kliencie lub serwerze.

SMB

Wiem mniej o SMB, ale uważam, że obsługuje on również rzadkie pliki, jeśli ustawiony jest odpowiedni bit możliwości FS. Zobacz tutaj, aby uzyskać więcej informacji.

w płomieniach
źródło