2011-05-13 14 views
8

यदि मेरे पास एक बड़ी फ़ाइल है जिसमें कई शून्य हैं, तो मैं इसे कुशलता से एक स्पैस फ़ाइल कैसे बना सकता हूं?फ़ाइल स्पैस कैसे बनाएं?

क्या पूरी फ़ाइल को पढ़ने की एकमात्र संभावना है (सभी शून्यों सहित, जो पितृसत्तात्मक रूप से संग्रहीत हो सकते हैं) और शून्य क्षेत्रों को छोड़ने के लिए इसे एक नई फ़ाइल में फिर से लिखना है?

या क्या इसे मौजूदा फ़ाइल में बनाने की संभावना है (उदा। File.setSparse (लंबी शुरुआत, लंबा अंत))?

मैं जावा या कुछ लिनक्स कमांड में एक समाधान की तलाश में हूं, फाइल सिस्टम ext3 या इसी तरह के होगा।

+3

पहला समाधान 'cp --sparse = always' में लागू किया गया है, लेकिन यह कुशल नहीं है और फ़ाइल को कॉपी करने और बाद में आगे बढ़ने की आवश्यकता है। – rurouni

+1

http://stackoverflow.com/questions/245251/create-file-with-given-size-in-java – joe776

+0

@joe: यह स्क्रैच से एक स्पैस फ़ाइल बनाने के बारे में है, लेकिन मैं चाहता हूं कि ता एक मौजूदा फ़ाइल स्पैस करें। – rurouni

उत्तर

3

लिनक्स/यूनिक्स पर कुछ फाइल सिस्टम में मौजूदा फाइल में "छेद पंच" करने की क्षमता है। देखें:

यह बहुत पोर्टेबल नहीं है और बोर्ड भर में एक ही तरह से नहीं किया; अभी के रूप में, मेरा मानना ​​है कि जावा के आईओ पुस्तकालय इस के लिए एक इंटरफेस प्रदान नहीं करते हैं।

यदि छेद पंचिंग fcntl(F_FREESP) या किसी अन्य तंत्र के माध्यम से उपलब्ध है, तो यह प्रतिलिपि/तलाश लूप से काफी तेज होना चाहिए।

+0

क्या आप जानते हैं कि फ़ाइल में इसे लागू करने वाला टूल है क्योंकि मैं अनुभवी सी हैकर नहीं हूं। – rurouni

+0

शीर्ष गुणवत्ता का जवाब। धन्यवाद – sehe

0

इस article के अनुसार, ऐसा लगता है कि FIEMAP ioctl का उपयोग करने के अलावा वर्तमान में कोई आसान समाधान नहीं है। हालांकि, मुझे नहीं पता कि आप "स्पैस" में "गैर स्पैस" शून्य ब्लॉक कैसे बना सकते हैं।

2

मुझे लगता है कि आप पूरी फ़ाइल को पूर्व-आवंटित करने और पृष्ठों/अनुभागों के एक टेबल/बिटसेट को बनाए रखने से बेहतर होंगे।

फ़ाइल स्पैस बनाने के परिणामस्वरूप उन वर्गों को खंडित किया जा सकता है यदि उनका कभी भी उपयोग किया जाता है। शायद कुछ टीबी डिस्क स्पेस को सहेजना एक बेहद खंडित फ़ाइल के प्रदर्शन हिट के लायक नहीं है।

0

आप

केवल मेटाडाटा होने विरल फ़ाइल बनाने के लिए linux teminal पर $ truncate -s filename filesize उपयोग कर सकते हैं।

नोट - फ़ाइल का बाइट बाइट्स में है।

संबंधित मुद्दे