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


10

शून्य के साथ अप्रयुक्त स्थान को कैसे साफ़ करें? (मैं btrfs फाइल सिस्टम के लिए टूल के लिए पूछ रहा हूँ )

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

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

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

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

Btw। Ext3 के लिए, ext4: शून्य के साथ अप्रयुक्त स्थान (ext3, ext4) । यहाँ मैं btrfs माँगता हूँ

"चालाक एल्गोरिथ्म" का स्पष्टीकरण: जैसा कि मैं देख रहा हूं कि "चालाक एल्गोरिथ्म" भ्रम की ओर जाता है, यहां मैंने आखिरकार इसके बारे में लाइन जोड़ने का फैसला किया। प्रिय पाठक, कृपया फाइल सिस्टम के बारे में डेटास्ट्रक्चर के रूप में सोचें। सरलीकरण उद्देश्यों के लिए, आइए हम स्व-संतुलन लाल-काले पेड़ के होल्डिंग मैप की कल्पना करें, जो कि एसोसिएशन कुंजी-> मान सरणी के रूप में उपयोग किया जाता है, जहां मान पूर्णांक होते हैं। लक्ष्य शून्य के साथ सभी नकारात्मक मूल्यों को साफ़ करना है। "स्मार्ट नहीं" एल्गोरिथ्म इस पर पुनरावृत्ति करेगा और नए मानचित्र में कुंजी जोड़े: मूल्य जोड़े (अंततः नकारात्मक को शून्य में बदलकर)। स्मार्ट एल्गोरिथ्म सिर्फ उन स्थानों का पता लगाएगा जहां नकारात्मक मूल्य संग्रहीत होते हैं और उन्हें जगह में साफ करते हैं ।


2
क्या आपने sfillसुझाव की कोशिश की ? ऐसा लगता है कि इसके लिए एक्सएक्सएक्स की आवश्यकता नहीं है।
केविन

1. मुझे पता है कि आप मौजूदा फाइलों को ज़ीरो से श्रेड के साथ भर सकते हैं, लेकिन यह शायद नहीं है, है ना? 2. आप उन छवियों को कैसे बना रहे हैं? हो सकता है कि आप वहां ट्रंकेशन कर सकें?
ज़्लातको

@kevin: यही कारण है कि मैंने मूल प्रश्न में sfill उत्तर पोस्ट किया है। मैं शायद ही कभी खुद को ext2,3,4 फाइल सिस्टम का उपयोग करता हूं, इसलिए मुझे उपयोगिताओं का पता चलता है जो केवल * बेकार परेशान होने के लिए * पर काम करते हैं।
कैस

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

सिर्फ truncatefallocate
mikeserv

जवाबों:


4

यहाँ आपके पिछले प्रश्न के उत्तर का एक संशोधित और बहुत विस्तृत विस्तार दिया गया है:

sfillsecure-deleteपैकेज से आप जो चाहें कर सकते हैं।

ज़ीरोफ्री के विपरीत (जो केवल ext2, ext3 और ext4 फाइल सिस्टम के साथ काम करता है), sfill किसी अन्य फ़ाइल सिस्टम के साथ काम करेगा।

जैसे

sfill -l -l -z /mnt/X

Sfill / सिक्योर-डिलीट होम पेज अब लुप्त हो गया लगता है, लेकिन इसे डेबियन और ubuntu के लिए पैक किया जाता है। शायद अन्य distros भी। यदि आपको सोर्स कोड की आवश्यकता है, तो आप डेबियन अभिलेखागार में पाए जा सकते हैं यदि आप इसे कहीं और नहीं पा सकते हैं।

नोट: sfill केवल एक घुड़सवार फाइल सिस्टम पर काम करता है। यदि आप VM के बजाय होस्ट सिस्टम से छवि फ़ाइलों को शून्य-भरण कर रहे हैं, तो आपको होस्ट पर fs छवि को माउंट करने की आवश्यकता होगी। यह किस तरह की छवि फ़ाइल है (उदाहरण के लिए qcow2 या कच्ची) के आधार पर सटीक विधि भिन्न होती है।

बढ़ते 'कच्चे' चित्र आसान और सीधे-आगे हैं। बस kpartxलूपबैक डिवाइस बनाने के लिए छवि फ़ाइल पर उपयोग करें और प्रत्येक विभाजन के लिए / dev / mapper / प्रविष्टियाँ फिर व्यक्तिगत रूप से माउंट की जा सकती हैं।

यहाँ स्क्रिप्ट के एक टुकड़े से संशोधित एक आंशिक स्क्रिप्ट है जिसका उपयोग मैं नेट-बूट करने योग्य फ़्रीडोस हार्ड-डिस्क छवियों को माउंट करने के लिए करता हूं (मशीनों पर बायोस अपडेट के लिए उपयोग किया जाता है जहां फ्लैशर काम नहीं करेगा):

image="myrawimagefile.img"

# use kpartx to build /dev/mapper device nodes
KP=$(kpartx -a -v "$image")

# now mount each partition under ./hd/
for p in $(echo "$KP" | awk '/^add map/ {print $3}') ; do
  dm="/dev/mapper/$p"
  fp=$(echo "$p" | sed -r -e 's/^loop[0-9]+//')
  mkdir -p "./hd/$fp"
  mount "$dm" "./hd/$fp"
  sfill -l -l -v "./hd/$fp"
  umount "$dm"
done

# now remove the loopback device and /dev/mapper entries
kpartx -d "$image"

नोट: यह मानता है कि छवि में हर विभाजन माउंटेबल है। मेरे उपयोग के मामले में सच है (एक विभाजन के साथ एक फ्रीडोस एचडी छवि)। सच नहीं है अगर विभाजन में से एक है, कहते हैं, स्वैप स्थान। ऐसे विभाजनों का पता लगाना और dd का उपयोग करके स्वैप विभाजन को पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है :)

यह विधि या इसका एक प्रकार, LVM संस्करणों के लिए भी काम करना चाहिए।

यदि आपकी छवियां qcow हैं, तो आप पैकेज qemu-nbdसे टूल का उपयोग कर सकते हैं qemu-utils, जो नेटवर्क ब्लॉक डिवाइस के रूप में छवि फ़ाइल और इसके विभाजन प्रस्तुत करेगा - जैसे / dev / nbd0 / dev / ndb0p1 - जिसका उपयोग इसी तरह से किया जा सकता है / ऊपर देव / मैपर उपकरण।

यह संभवत: आसान और कम परेशानी (लेकिन अधिक समय लेने वाली) है qemu-imgजिसका उपयोग qcow से कच्चे में बदलने के लिए किया जाता है, ऊपर दी गई विधि के लिए विधि का उपयोग करें, और फिर संशोधित किए गए कच्चे चित्र को वापस संकुचित करने के लिए qcow2 में परिवर्तित करें। यह शायद qemu-nbd का उपयोग करने की तुलना में थोड़ी छोटी छवियों के परिणामस्वरूप होगा क्योंकि आप नई qcow2 छवि को संपीड़ित कर रहे हैं क्योंकि यह बनाया जा रहा है।


1
मेरा मतलब है, कि इसे शून्य के साथ अप्रयुक्त स्थान को भरने का "स्मार्ट" तरीका नहीं माना जाता है । यह ऐसा करने का सबसे स्पष्ट, विशिष्ट तरीका है। मैं इस तरह की चीजों के बारे में नहीं पूछ रहा हूं।
ग्रेज़गोरज़ वियरज़ोवेकी

1
कृपया एक "स्मार्ट" एल्गोरिदम का वर्णन करें जो एक विशेष फाइलसिस्टम परिवार के लिए विशिष्ट नहीं है (जैसे कि zerofill ext2 / 3/4 के लिए है)। आप एक कार्यक्रम चाहते थे जो काम कर सके। आपने यह नहीं कहा कि यह जादुई होना चाहिए।
कैस

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

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

2
@ कोस - मुझे लगता है कि आप इस तथ्य को याद कर रहे हैं कि वीएम में वर्चुअल-हार्ड-ड्राइव को कॉम्पैक्ट करने से पहले शून्य-भरना एक आवश्यक कदम है। यदि आपके पास 500 जीबी की विस्तार डिस्क है, तो 10 जीबी फ़ाइलों और 10 जीबी "खाली" स्थान (यानी हटाई गई फाइलें) के साथ, भोली "विशाल शून्य फ़ाइल" दृष्टिकोण को चलाने में एफएआर अधिक समय लगेगा, और वीएचडी को ऊपर ब्लोट करने की आवश्यकता होती है पूर्ण 500 जीबी। मैं शर्त लगा सकता हूँ कि ओपी उपयोगिता को एफएस विशिष्ट होना भी मान रहा है।
नकली नाम

3

मुक्त स्थान का उपयोग करने का सही और "स्मार्ट" तरीका उपयोग कर रहा है:

fstrim /mountpoint

माउंटेड फाइल सिस्टम पर इसका उपयोग करें।

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

हालाँकि समाधान ठीक काम करता है यदि आपकी डिस्क एक विरल फाइलसिस्टम पर एक पतला प्रावधान है और आप अप्रयुक्त स्थान को पुनर्प्राप्त करना चाहते हैं।

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