Apakah NFS dan SMB mendukung file jarang?

18

Pertanyaan ini sebelumnya diajukan dalam stack overflow tetapi orang-orang baik di sana merekomendasikan agar saya mencoba komunitas di sini.

Saya sedang meneliti file jarang sehubungan dengan berbagai filesystem dan saya mencoba untuk menemukan sesuatu yang konkret yang menyatakan bahwa file jarang didukung oleh Network File Systems (NFS) atau Server Message Block (SMB).

Saya mengerti bahwa SMB banyak digunakan di Windows dan bahwa menurut entri ini , server SMB dapat mendukung file jarang bahkan jika sistem file yang mendasarinya tidak. Namun, jika saya benar, sistem file yang tidak mendukung file jarang hanya akan mengisi 'lubang' dengan nol dan ini dapat menyebabkan masalah kinerja.

Berkenaan dengan NFS, saya belum dapat menemukan apa-apa tentang menggunakan NFS yang mendukung file jarang.

Karena itu, pertanyaan saya adalah,

Apakah file jarang didukung di NFS dan SMB?

winhung
sumber

Jawaban:

12

NFS: ini memiliki dukungan parsial untuk file jarang. Pada dasarnya, ini mendukung pembuatan file yang jarang tetapi, ketika membaca, file diperluas untuk memasukkan nol. Ini berarti bahwa, sementara Anda dapat membuat file jarang melalui NFS, saat membaca kembali file yang sama itu, data jaringan dalam perjalanan akan menyertakan angka nol apa pun yang ditemukan pada file asli. Tes sederhana menunjukkan perilaku itu:

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

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

du -hs test.img

0 test.img

Seperti yang Anda lihat, file test.img memiliki ukuran di-disk 0 byte. Namun, membacanya kembali menggunakan dd if=test.img of=/dev/null bs=1M iflag=directpertunjukkan

1024 + 0 catatan dalam
1024 + 0 mencatat
1073741824 byte (1,1 GB) disalin, 10,2269 s, 105 MB / s

Jelas bahwa ketika mentransfer file jarang, diperluas untuk memasukkan semua nol.

NFSv4.2 akan diperluas dengan memasukkan penanganan khusus untuk transfer jaringan file jarang. Dengan kata lain, dengan NFSv4.2 di atas ddakan selesai hampir seketika.

SMB: ia memiliki perilaku yang sama dengan NFS , setidaknya di lingkungan pengujian saya, menggunakan server Samba v3.6.x dengan CIFS v1 dan klien Linux menggunakan mount.cifs. Mungkin di bawah Windows berperilaku berbeda ...

shodanshok
sumber
Dapatkah NFS mendukung file jarang jika sistem file yang mendasari server NFS tidak mendukung file jarang?
Andrew Henle
2
@shodanshok: tes Anda tidak valid. Mengeksekusi perintah yang sama pada sistem file yang tidak mendukung file jarang menghasilkan hasil yang sama. ddmembaca dalam blok demi blok dan apakah sistem file yang mendasarinya mendukung file jarang atau tidak, lubang diubah menjadi nol oleh OS. Cobalah di ext4 dan Anda akan melihat angka yang sama.
Abligh
@AndrewHenle jika FS yang mendasarinya tidak mendukung file jarang, bagaimana NFS dapat mengekspos dukungan yang tidak ada? Bagaimanapun, saat ini cukup sulit untuk menemukan filesystem tanpa dukungan file yang jarang, karena semua filesystem terbaru (ext3 / 4, xfs, dll) mendukung fitur tersebut.
shodanshok
1
@ mungkin Anda salah. Menjalankan ddperintah pada file jarang lokal akan memberikan hasil yang jauh lebih cepat. Lihat di sini untuk contoh :, 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/sSeperti yang Anda lihat, membaca file jarang lokal memberikan kecepatan I / O utara 10 GB / s
shodanshok
2
@shodanshok - Oh begitu, Anda melihat kecepatan, bukan jumlah yang ditransfer. Mungkin mengklarifikasi bahwa dalam jawaban Anda akan sangat membantu. Tes kanonik untuk file yang disimpan dalam cara yang jarang adalah du -svs ls -l, tetapi Anda benar yang tidak membantu dengan transmisi melalui jaringan; tetapi dalam kedua kasus (seperti yang straceakan mengkonfirmasi) ddmembaca seluruh file, termasuk 'lubang' sebagai nol, perbedaannya hanya di mana 'nol' berasal (sisi server atau klien). Namun perhatikan (sesuai jawaban saya) bahwa NFS 4.2 tidak sepenuhnya mendukung file jarang.
Abligh
10

NFS

Ya, NFS 4.2 sepenuhnya mendukung file jarang (lihat dokumen kanonik ini dan presentasi ini ).

Sebelum NFS 4.2, model klien / server NFS mendukung file jarang dalam arti bahwa API mendukung semua operasi file POSIX. Ini berarti bahwa menulis file jarang pada server yang mendukung file jarang pada sistem file pendukung menghasilkan file jarang dibuat (daripada menyimpan banyak angka nol). Tetapi membaca file akan menghasilkan transmisi banyak nol untuk elemen jarang. Yaitu jawabannya adalah 'sebagian'.

NFS 4.2 menambahkan kemampuan bagi klien untuk 'melihat' lubang di file, dan oleh karena itu agar server tidak harus mengirimkan semua nol itu. Dari 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.

Terlepas dari kenyataan bahwa spesifikasi mendukung file jarang, akan ada kemungkinan bagi pelaksana malas untuk menghindari menerapkan dukungan untuk file jarang baik di klien atau server.

SMB

Saya kurang tahu tentang SMB, tapi saya percaya itu mendukung file jarang juga, jika bit kemampuan FS yang relevan diatur. Lihat di sini untuk info lebih lanjut.

abligh
sumber