शून्य के साथ अप्रयुक्त स्थान (ext3, ext4)


73

शून्य के साथ अप्रयुक्त स्थान को कैसे साफ़ करें? (Ext3, ext4)

मैं कुछ होशियार से देख रहा हूँ

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

जैसे FSArchiver "उपयोग की गई जगह" की तलाश में है और अप्रयुक्त, लेकिन विपरीत साइट को अनदेखा करता है।

उद्देश्य: मैं विभाजन छवियों को संपीड़ित करना चाहता हूं, इसलिए शून्य के साथ अप्रयुक्त स्थान को भरने की अत्यधिक अनुशंसा की जाती है।

Btw। Btrfs के लिए: शून्य के साथ अप्रयुक्त स्थान (btrfs)


4
इसे देखें: Superuser.com/questions/19326/…
Mat

1
दो अलग तरह के उत्तर संभव हैं। आप क्या हासिल करने का प्रयास कर रहे हैं? या तो 1) सुरक्षा, किसी को उन डेटा को पढ़ने के लिए मना करके, या 2) पूरे विभाजन के संपीड़न का अनुकूलन या [SSD प्रदर्शन] ( en.wikipedia.org/wiki/Trim_(computing) ?
Totor

जवाबों:


77

ऐसी उपयोगिता है zerofree

इसके विवरण से:

ज़ीरोफ्री एक ext2 या ext3 फ़ाइल-सिस्टम में अनलॉक्ड, नॉन-ज़ीरड ब्लॉक पाता है और उन्हें शून्य से भरता है। यह उपयोगी है यदि डिवाइस जिस पर यह फ़ाइल-सिस्टम रहता है वह डिस्क छवि है। इस मामले में, डिस्क छवि के प्रकार के आधार पर, एक माध्यमिक उपयोगिता ज़ीरोफ्री चलाने के बाद डिस्क छवि के आकार को कम करने में सक्षम हो सकती है। ज़ीरोफ्री के लिए फ़ाइल-सिस्टम को बिना पढ़े या माउंट किए हुए रीड-ओनली होना आवश्यक है।

समान परिणाम प्राप्त करने का सामान्य तरीका (अप्रयुक्त ब्लॉकों को शून्य करना) "dd" को चलाने के लिए है कि शून्य से भरा एक फ़ाइल बनाएं जो ड्राइव पर संपूर्ण खाली स्थान लेता है, और फिर इस फ़ाइल को हटा दें। इसके कई नुकसान हैं, जो ज़ेरोफ्री को कम करता है:

  • यह धीमा है
  • यह डिस्क छवि (अस्थायी रूप से) इसकी अधिकतम सीमा तक बढ़ती है
  • यह (अस्थायी रूप से) डिस्क पर सभी खाली स्थान का उपयोग करता है, इसलिए अन्य समवर्ती लेखन क्रियाएं विफल हो सकती हैं।

Zerofree को GNU / Linux सिस्टम से चलाने के लिए लिखा गया है जिसे वर्चुअल मशीन के अंदर अतिथि OS के रूप में स्थापित किया गया है। यदि यह आपका मामला नहीं है, तो आपको लगभग निश्चित रूप से इस पैकेज की आवश्यकता नहीं है।

अद्यतन # 1

.Deb पैकेज के विवरण में अब निम्नलिखित पैराग्राफ शामिल हैं जो यह कहेंगे कि यह ext4 के साथ भी ठीक काम करेगा।

विवरण: ext2, ext3 और ext4 फ़ाइल-सिस्टम से शून्य मुक्त ब्लॉक Zerofree एक ext2, ext3 या ext4 फ़ाइल-सिस्टम में गैर-शून्य मान सामग्री के साथ असंबद्ध ब्लॉक पाता है और उन्हें शून्य से भरता है ...

अन्य उपयोग

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


1
क्या यह उपकरण का आधिकारिक पृष्ठ है intgat.tigress.co.uk/rmy/uml/index.html ? क्या आपको लगता है कि ext4 के साथ उपयोग करना सुरक्षित है?
ग्रेज़गोरज़ विर्ज़ोवेकी 14

2
@GrzegorzWierzowiecki: हाँ, यह पृष्ठ है, लेकिन डेबियन और दोस्तों के लिए यह पहले से ही रिपोज में है। मैंने डिस्क फ़ाइल छवि को सफलतापूर्वक सिकोड़ने के लिए एक वर्चुअल डिस्क पर ext4 विभाजन पर उपयोग किया था, और कोई समस्या नहीं थी।
enzotib

1
यह ddमूल प्रश्न में क्रूड पद्धति के बराबर नहीं है , क्योंकि यह माउंटेड फ़ाइल सिस्टम पर काम नहीं करता है।
jlh

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

2
सावधान रहें - मैंने zerofreeएस्ट्रालिनक्स (डेबियन आधारित) पर उपयोग करके ext4 फाइल सिस्टम खो दिया ...
हबबिटस

33

Ext2 / ext3 / ext4 पर अप्रयुक्त स्थान को साफ करने के लिए विधियों का सारांश (जैसा कि इस प्रश्न और अन्य जगहों पर उल्लेख किया गया है):

अप्रयुक्त स्थान को शून्य करना

फ़ाइल सिस्टम माउंट नहीं है

  • यदि आपकी फ़ाइल सिस्टम "डिस्क" पर है, तो यह प्रावधानित है (उदाहरण के लिए TRIM का समर्थन करने वाला एक आधुनिक SSD, VM फ़ाइल जिसका प्रारूप स्पार्सनेस आदि का समर्थन करता है) और आपका कर्नेल कहता है कि ब्लॉक डिवाइस इसे समझता है, आप e2fsck -E discard src_fsअप्रयुक्त स्थान को छोड़ने के लिए उपयोग कर सकते हैं (e2fsprogs की आवश्यकता है) १.४२.२ या उससे अधिक)।
  • अप्रयुक्त ब्लॉकों पर स्पष्ट रूप से शून्य लिखने के लिए ज़ीरोफ्री (जैसे zerofree src_fs) का उपयोग करना ।
  • उपयोग e2image -rap src_fs dest_fsमें केवल प्रतिलिपि ब्लॉकों का उपयोग करना (नया फाइल सिस्टम एक अन्यथा शून्य "डिस्क" पर होना चाहिए, इसके लिए e2fsprogs 1.42.9 या उच्चतर की आवश्यकता होती है)।

फ़ाइल सिस्टम आरोहित है

  • यदि आपकी फाइलसिस्टम "डिस्क" पर है, तो यह प्रावधानित है (उदाहरण के लिए TRIM का समर्थन करने वाला एक आधुनिक SSD, एक VM फ़ाइल जिसका प्रारूप स्पार्सनेस आदि का समर्थन करता है), आपके कर्नेल का कहना है कि ब्लॉक डिवाइस इसे समझता है और अंत में एक्सट्रीम फाइल सिस्टम ड्राइवर इसका समर्थन करता है जिसका आप उपयोग कर सकते हैं fstrim /mnt/fs/अप्रयुक्त स्थान को छोड़ने के लिए फाइलसिस्टम से पूछना।
  • उपयोग करना cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfillसिक्योर-डिलीट से इस तकनीक का उपयोग करता है)। यह विधि अक्षम है, टेड Ts'o (ext4 के लेखक) द्वारा अनुशंसित नहीं है, कुछ चीजों को शून्य नहीं कर सकता है और भविष्य के fsckएस को धीमा कर सकता है ।

फाइलसिस्टम के अनमाउंट होने से माउंट होने की तुलना में बेहतर परिणाम मिलेंगे। जब पहले से इस्तेमाल किए गए स्थान की बहुत अधिक मात्रा को zerofreeशून्य करने की आवश्यकता होती है, तो सबसे तेज़ तरीका छूट जाता है, लेकिन त्यागने की प्रक्रिया के बाद कभी-कभी थोड़ा अतिरिक्त (शून्य "डिस्क" पर कैसे लागू किया जाता है) के आधार पर उपयोग किया जा सकता है ।

छवि फ़ाइल को छोटा करना

छवि एक समर्पित VM प्रारूप में है

आपको qemu-img convert src_image dst_imageशून्य स्थान को पुनः प्राप्त करने में सक्षम करने के लिए एक उपयुक्त डिस्क छवि टूल (जैसे ) का उपयोग करने की आवश्यकता होगी और छवि का प्रतिनिधित्व करने वाली फ़ाइल को छोटा होने की अनुमति देने के लिए।

छवि एक कच्ची फ़ाइल है

निम्न तकनीकों में से एक का उपयोग फ़ाइल स्पार्स बनाने के लिए किया जा सकता है (ताकि शून्य स्थान को ऊपर ले जाना बंद हो जाए):

  • cp --sparse=always src_image dst_image
  • fallocate -d src_image (उपयोग की आवश्यकता है- linux v2.25 या उच्चतर)।

इन दिनों इन कदमों को करने और एक बार में अधिक करने के लिए पुण्य-पुण्यकर्म जैसे उपकरण का उपयोग करना आसान हो सकता है ।

 सूत्रों का कहना है


15

sfillसिक्योर-डिलीट से यह और कई अन्य संबंधित कार्य कर सकते हैं।

जैसे

sfill -l -l -z /mnt/X

अद्यतन # 1

एक स्रोत वृक्ष है जिसका उपयोग आर्कबिनक्स परियोजना द्वारा जीथब पर किया जाता है जिसमें वह स्रोत sfillहोता है जिसके लिए पैकेज सिक्योर-डिलीट में शामिल एक उपकरण है।

इसके अलावा sfillमैन पेज की एक प्रति यहां दी गई है:


वह URL अप्रचलित है। पता नहीं इसका होम पेज अब कहां है (या भले ही अभी भी एक है), लेकिन यह डेबियन और उबंटू के लिए पैक किया गया है। शायद अन्य distros भी। यदि आपको स्रोत कोड की आवश्यकता है, तो आप डेबियन अभिलेखागार में पाए जा सकते हैं यदि आप इसे कहीं और नहीं पा सकते हैं।
कैस

अप्रचलित मानवपृष्ठ URL अब तय हो गया है। लगता है कि "Digipedia" अब कोई बात नहीं है।
mwfearnley

8

यदि आपके पास e2fsprogs 1.42.9 है, तो आप e2imageपहली जगह में खाली स्थान के बिना विभाजन छवि बनाने के लिए उपयोग कर सकते हैं , इसलिए आप शून्य चरण को छोड़ सकते हैं।


मैं इन मापदंडों के बारे में ऑनलाइन कोई जानकारी आसानी से नहीं पा सकता था, लेकिन वे वास्तव में 1.42.9 रिलीज नोटों में दिए गए हैं: e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfwley

1
यह एक मूल्यवान उपकरण है! हालांकि, आपका उत्तर बेहतर होगा यदि यह भी समझाया जाए कि इसका उपयोग कैसे किया जाए। यह e2image -ar /dev/foo1 | gzip > fs.img.gz, या इसके कुछ बदलाव हैं। -fइसे माउंटेड fs पर उपयोग करने के लिए शामिल करें ।
16

0

आप उपयोग कर सकते हैं sfill। यह पतले संस्करणों के लिए एक बेहतर समाधान है।


यदि आप कैस उत्तर पर टिप्पणी करना चाहते हैं, तो तब तक प्रतीक्षा करें जब तक आपके पास ऐसा करने के लिए पर्याप्त प्रतिष्ठा न हो।
एंथन

1
मुझे लगता है कि जवाब manpages.ubuntu.com/manpages/lucid/man1/sfill.1.html का जिक्र है ... जो कम से कम जवाब देने का प्रयास है। ("ऑनलाइन" इस मामले में अर्थ है "फाइलसिस्टम घुड़सवार के साथ", "वेब पर" नहीं)।
derobert

0

यदि आप अतिरिक्त साधनों का सहारा नहीं लेना चाहते हैं तो यह विधि इससे तेज होनी चाहिए cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

इससे तेज क्यों होगा cat? (नहीं, ब्लॉक आकार का तर्क ddमदद नहीं करता है)
मार्सेल


2
हां, लेकिन यह ddतेज नहीं करता है । वास्तव में, यह शायद catतेज करता है। ब्लॉक आकार केवल सिस्टम कॉल के ओवरहेड को कम करने और सीपीयू कैश उपयोग को अनुकूलित करने के लिए महत्वपूर्ण है। सिस्केल ओवरहेड के साथ, आप कम रिटर्न वाले क्षेत्र में प्रवेश करते हैं। कैश को ऊपर से चोट लगती है, कहते हैं, 1MiB। और असली डिस्क पर काम करते समय, आप I / O वैसे भी बंधे होते हैं और बिंदु ज्यादातर मूट होता है। इसे स्वयं मानने का प्रयास करें।
मार्सेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.