क्या NFS और SMB विरल फ़ाइलों का समर्थन करते हैं?


18

यह सवाल पहले स्टैक ओवरफ्लो में पूछा गया था, लेकिन वहां के अच्छे लोगों ने सिफारिश की है कि मैं इसके बजाय यहां समुदाय की कोशिश करता हूं।

मैं विभिन्न फाइल सिस्टम के संबंध में विरल फाइलों पर शोध कर रहा हूं और कुछ ठोस खोजने की कोशिश कर रहा हूं जिसमें कहा गया है कि स्पार्स फाइलें नेटवर्क फाइल सिस्टम (एनएफएस) या सर्वर मैसेज ब्लॉक (एसएमबी) द्वारा समर्थित हैं।

मैं समझता हूं कि विंडोज़ में SMB का व्यापक रूप से उपयोग किया जाता है और इस प्रविष्टि के अनुसार , एक SMB सर्वर विरल फ़ाइल का समर्थन कर सकता है, भले ही अंतर्निहित फ़ाइल सिस्टम न हो। हालांकि, अगर मैं सही हूं, तो फ़ाइल सिस्टम जो विरल फ़ाइलों का समर्थन नहीं करता है, वह सिर्फ 'छेद' को शून्य से भर देगा और इससे प्रदर्शन समस्या हो सकती है।

एनएफएस के संबंध में, मुझे एनएफएस सपोर्ट करने वाली स्पार्स फाइलों के उपयोग के बारे में कुछ भी पता नहीं चल पाया है।

इसलिए, मेरे सवाल हैं,

क्या NFS और SMB में विरल फाइलें समर्थित हैं?

जवाबों:


12

एनएफएस: इसमें विरल फ़ाइल के लिए आंशिक समर्थन है। मूल रूप से, यह एक विरल फ़ाइल बनाने का समर्थन करता है लेकिन, पढ़ते समय, फ़ाइल को शून्य शामिल करने के लिए विस्तारित किया जाता है। इसका मतलब यह है कि, जब आप एनएफएस के माध्यम से एक विरल फ़ाइल बना सकते हैं, तो यह पढ़ते हुए कि एक ही फ़ाइल इन-ट्रांज़िट नेटवर्क डेटा में मूल फ़ाइल पर पाया गया कोई भी शून्य शामिल होगा। एक सरल परीक्षण यह दर्शाता है कि व्यवहार:

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

-rw-r - r--। 1 रूट रूट 1.0G अक्टूबर 26 11:29 test.img

du -hs test.img

0 test.img

जैसा कि आप देख सकते हैं, test.img फ़ाइल में 0 बाइट्स का एक-डिस्क आकार है। हालांकि, dd if=test.img of=/dev/null bs=1M iflag=directशो का उपयोग करके इसे वापस पढ़ना

1024 + 0 में
1024 + 0 रिकॉर्ड
1073741824 बाइट्स (1.1 GB), 10.2269 s, 105 MB / s रिकॉर्ड किए गए

यह स्पष्ट है कि विरल फ़ाइल को स्थानांतरित करते समय, इसे सभी शून्य को शामिल करने के लिए विस्तारित किया जाता है।

NFSv4.2 विरल फ़ाइल के नेटवर्क हस्तांतरण के लिए विशेष हैंडलिंग को शामिल करके विस्तार करेगा। दूसरे शब्द में, NFSv4.2 के साथ उपरोक्त ddलगभग तुरंत पूरा हो जाएगा।

SMB: इसमें NFS के समान व्यवहार है , कम से कम मेरे परीक्षण वातावरण में, CIFS v1 के साथ एक सांबा v3.6.x सर्वर और माउंट.cif का उपयोग करके एक लिनक्स क्लाइंट का उपयोग कर रहा है। शायद विंडोज के तहत यह अलग तरह से व्यवहार करता है ...


यदि NFS सर्वर की अंतर्निहित फ़ाइल सिस्टम विरल फ़ाइल का समर्थन नहीं करता है तो क्या NFS विरल फ़ाइलों का समर्थन कर सकता है ?
एंड्रयू हेनल

2
@shodanshok: आपका परीक्षण अमान्य है। फ़ाइल सिस्टम पर उसी कमांड को निष्पादित करना जो विरल फ़ाइलों का समर्थन करता है वही परिणाम देता है। ddब्लॉक द्वारा ब्लॉक में पढ़ता है और अंतर्निहित फ़ाइल सिस्टम विरल फ़ाइलों का समर्थन करता है या नहीं, छेद ओएस द्वारा शून्य में बदल जाते हैं। Ext4 पर इसे आज़माएँ और आपको समान संख्याएँ दिखाई देंगी।
अबूझ

@AndrewHenle यदि अंतर्निहित FS विरल फ़ाइल का समर्थन नहीं करता है, तो NFS एक गैर-मौजूद समर्थन को कैसे उजागर कर सकता है? वैसे भी, आजकल स्पार्स फाइल सपोर्ट के बिना फाइलसिस्टम खोजना काफी मुश्किल है, क्योंकि हाल ही में (एक्सट्रीम 3/4, एक्सएफएस, आदि) लिनक्स फाइल सिस्टम उस फीचर को सपोर्ट करते हैं।
षोडशशोक

1
@ बार आप गलत हैं। ddएक स्थानीय विरल फ़ाइल पर कमांड को निष्पादित करने से बहुत तेज़ परिणाम मिलेंगे। एक उदाहरण के लिए यहाँ देखें:, 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/sजैसा कि आप देख सकते हैं, एक स्थानीय विरल फ़ाइल को पढ़ने पर I / O की गति 10 GB / s से
shodanshok

2
@shodanshok - ओह, मैं देख रहा हूँ, आप गति को देख रहे हैं, राशि हस्तांतरित नहीं। शायद यह स्पष्ट करना कि आपके उत्तर में मददगार होगा। विरल तरीके से संग्रहित की जा रही फ़ाइल के लिए विहित परीक्षण du -sबनाम है ls -l, लेकिन आप सही हैं जो नेटवर्क पर संचरण में मदद नहीं करता है; लेकिन या तो मामले में (जैसा straceकि पुष्टि करेगा) ddजीरो के रूप में 'होल' सहित पूरी फाइल को पढ़ रहा है, अंतर केवल वहां है जहां 'शून्य' उत्पन्न होता है (सर्वर या क्लाइंट साइड)। हालाँकि ध्यान दें (मेरे उत्तर के अनुसार) कि एनएफएस 4.2 स्पार्स फाइलों का पूरी तरह से समर्थन करता है
15

10

एनएफएस

हां, एनएफएस 4.2 पूरी तरह से विरल फाइलों का समर्थन करता है ( इस कैनोनिकल दस्तावेज और इस प्रस्तुति को देखें )।

एनएफएस 4.2 से पहले, एनएफएस क्लाइंट / सर्वर मॉडल ने इस अर्थ में विरल फाइलों का समर्थन किया था कि एपीआई ने सभी पॉसिक्स फ़ाइल संचालन का समर्थन किया था। इसका मतलब यह था कि एक सर्वर पर विरल फाइलें लिखने से जो बैकिंग फाइल सिस्टम पर विरल फाइलों का समर्थन करता था, जिसके परिणामस्वरूप स्पार्स फाइल बनाई जाती थी (बजाय बहुत सारे जीरो स्टोर करने के)। लेकिन फ़ाइल को पढ़ने से विरल तत्व के लिए बहुत सारे शून्य का संचरण होगा। IE का उत्तर 'आंशिक रूप से' है।

एनएफएस 4.2 क्लाइंट के लिए फ़ाइलों में छेदों को 'देखने' की क्षमता को जोड़ता है, और इसलिए सर्वर के लिए उन सभी शून्य को प्रसारित नहीं करना पड़ता है। आईडी से:

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.

इस तथ्य के बावजूद कि विनिर्देश स्पार्स फ़ाइलों का समर्थन करता है, यह एक आलसी कार्यान्वयनकर्ता के लिए क्लाइंट या सर्वर में स्पार्स फ़ाइलों के लिए समर्थन को लागू करने से बचने के लिए संभव होगा।

एसएमबी

मैं एसएमबी के बारे में कम जानता हूं, लेकिन मेरा मानना ​​है कि यह विरल फाइलों का भी समर्थन करता है, अगर प्रासंगिक एफएस क्षमता बिट सेट है। अधिक जानकारी के लिए यहाँ देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.