NFS ve SMB seyrek dosyaları destekliyor mu?


18

Bu soru daha önce yığın taşması istendi ama orada iyi millet bunun yerine burada topluluk denemenizi tavsiye ettim.

Çeşitli dosya sistemleri ile ilgili seyrek dosyaları araştırıyorum ve seyrek dosyaların Ağ Dosya Sistemleri (NFS) veya Sunucu İleti Bloğu (SMB) tarafından desteklendiğini belirten somut bir şey bulmaya çalışıyorum.

SMB'nin Windows'da yaygın olarak kullanıldığını ve bu girişe göre , bir SMB sunucusunun temel dosya sistemi desteklemese bile seyrek dosyayı destekleyebileceğini anlıyorum . Ancak, eğer ben haklıysanız, seyrek dosyaları desteklemeyen dosya sistemi sadece 'delikleri' sıfırlarla doldurur ve bu bir performans sorununa yol açabilir.

NFS ile ilgili olarak, seyrek dosyaları destekleyen NFS kullanma hakkında hiçbir şey bulamadım.

Dolayısıyla, sorularım,

NFS ve SMB'de seyrek dosyalar destekleniyor mu?

Yanıtlar:


12

NFS: seyrek dosya için kısmi bir desteği var. Temel olarak, seyrek bir dosya oluşturmayı destekler, ancak okurken dosya sıfırları içerecek şekilde genişletilir. Bu, NFS aracılığıyla seyrek bir dosya oluşturabilmenize rağmen, aynı dosyayı okurken, aktarılan ağ verilerinin orijinal dosyada bulunan sıfırları içereceği anlamına gelir. Basit bir test şu davranışı gösterir:

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

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

du -hs test.img

0 test.img

Gördüğünüz gibi, test.img dosyasının disk boyutu 0 bayttır. Ancak, dd if=test.img of=/dev/null bs=1M iflag=directşovları kullanarak geri okuma

1024 + 0 kayıtta
1024 + 0 kayıt
1073741824 bayt (1,1 GB) kopyalandı, 10.2269 s, 105 MB / s

Seyrek dosyayı aktarırken, tüm sıfırları içerecek şekilde genişletildiği açıktır.

NFSv4.2, seyrek dosyanın ağ aktarımı için özel işlem ekleyerek genişleyecektir. Başka bir deyişle, NFSv4.2 ile yukarıdakiler ddneredeyse anında tamamlanacaktır.

KOBİ: CIFS v1 ile bir Samba v3.6.x sunucusu ve mount.cifs kullanan bir Linux istemcisi kullanarak NFS ile aynı davranışa sahip. Belki Windows altında farklı davranır ...


NFS sunucusunun temel dosya sistemi yoksa, Can NFS destek seyrek dosyaları değil seyrek dosyayı destekliyor?
Andrew Henle

2
@shodanshok: testiniz geçersiz. Bir dosya sisteminde aynı komutları yürütme yapar destek seyrek dosyaları aynı sonucu verir. ddblok satır blok okuma ve temel dosya sisteminin seyrek dosyaları destekleyip desteklemediği, delikler işletim sistemi tarafından sıfırlara dönüştürülür. Ext4 üzerinde deneyin ve aynı numaraları göreceksiniz.
abligh

@AndrewHenle, temel FS seyrek dosyayı desteklemiyorsa, NFS var olmayan bir desteği nasıl gösterebilir? Her neyse, günümüzde seyrek dosya desteği olmayan bir dosya sistemi bulmak oldukça zordur, çünkü tüm yeni (ext3 / 4, xfs, vb.) Linux dosya sistemleri bu özelliği desteklemektedir.
shodanshok

1
@abligh Yanılıyorsunuz. Yürütme ddyerel seyrek dosyanın üzerine komutu çok daha hızlı sonuçlar verecektir. Bir örnek için buraya bakın: 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/sGördüğünüz gibi, yerel bir seyrek dosyayı okumak 10 GB / s'nin
shodanshok

2
@shodanshok - Anlıyorum, aktarılan miktara değil, hıza bakıyorsunuz. Belki cevabınızda bunu açıklığa kavuşturmak yardımcı olacaktır. Seyrek bir şekilde saklanan bir dosya için kanonik test, du -svs'dir ls -l, ancak ağ üzerinden iletimde yardımcı olmayan doğrudur; ancak her iki durumda da ( straceonaylayacağı gibi) dd'delikler' de dahil olmak üzere tüm dosyayı sıfır olarak okuyor, fark sadece 'sıfırların' kaynaklandığı yer (sunucu veya istemci tarafı). Ancak NFS 4.2 ki (benim Yanıt başına gibi) dikkat etmez , tam seyrek dosyalarını desteklemektedir.
abligh

10

NFS

Evet, NFS 4.2 seyrek dosyaları tam olarak destekler ( bu standart belgeye ve bu sunuma bakın ).

NFS 4.2'den önce, NFS istemci / sunucu modeli, API'nın tüm POSIX dosya işlemlerini desteklemesi anlamında seyrek dosyaları destekledi. Bu, yedekleme dosya sisteminde seyrek dosyaları destekleyen bir sunucuya seyrek dosyalar yazmanın, çok sayıda sıfır depolamak yerine seyrek bir dosya oluşturulmasına neden olduğu anlamına geliyordu. Ancak dosyayı okumak, seyrek eleman için çok sayıda sıfırın iletilmesine neden olur. IE cevap 'kısmen' dir.

NFS 4.2, istemcinin dosyalardaki delikleri 'görmesini' ve dolayısıyla sunucunun tüm bu sıfırları iletmesi gerekliliğini ekler. Kimlikten:

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.

Spesifikasyonun seyrek dosyaları desteklemesine rağmen, tembel bir uygulayıcının istemcideki veya sunucudaki seyrek dosyalar için destek uygulamaktan kaçınması mümkün olacaktır.

SMB

SMB hakkında daha az şey biliyorum, ancak ilgili FS yetenek biti ayarlanmışsa, seyrek dosyaları da desteklediğine inanıyorum. Daha fazla bilgi için buraya bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.