मैं VirtualBox से एक गतिशील रूप से बढ़ती VDI डिस्क को कैसे सिकोड़ सकता हूं?


35

वर्चुअल बॉक्स में विभिन्न उबंटू प्रतिष्ठानों से गतिशील रूप से बढ़ते आभासी डिस्क (वीडीआई) वास्तव में वास्तव में "बढ़ते" हैं।

वर्चुअल मशीन में फ़ाइलों को हटाने से वह स्थान खाली नहीं होता है, जो मेरी VDI फ़ाइल होस्ट हार्ड डिस्क स्थान से लिया गया था।

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

जवाबों:


34

एक गतिशील रूप से बढ़ने वाला वर्चुअल बॉक्स वर्चुअल हार्ड ड्राइव फ़ाइल इस फ़ाइल को स्थापित करने में परिभाषित अधिकतम आकार तक वर्चुअल मशीन की मांग पर बढ़ने में सक्षम है। हालाँकि यह उन फ़ाइलों का स्थान खाली नहीं करता है जिन्हें हमने अतिथि OS में डिलीट किया था।

यदि डिस्क बहुत अधिक बढ़ गई है तो हम उसे फिर से कॉम्पैक्ट कर सकते हैं, बशर्ते अप्रयुक्त स्थान शून्य से भरा हो, और ड्राइव VDI प्रारूप में हो।

Ext2 से ext 4 फाइल सिस्टम के लिए यह Ubuntu लाइन से कमांड लाइन उपयोगिता zerofree * के साथ किया जा सकता है ।ज़ीरोफ्री स्थापित करें

zerofree /dev/sdxX

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

प्रश्न में /dev/sdxXext2, ext3 या ext4 स्वरूपित विभाजन से बदलें ।

एक से अधिक विभाजन पर हमें zerofreeप्रत्येक विभाजन के लिए दोहराना होगा । ध्यान रखें कि शून्य के साथ भरने से आभासी फ़ाइल अस्थायी रूप से अधिकतम आकार तक बढ़ जाएगी।

एक बार सभी अप्रयुक्त ड्राइव की जगह शून्य से भर जाती है तो हम ड्राइव के साथ सिकुड़ते हैं

VBoxManage modifyhd <name>.vdi --compact

यह हमारी VDI फ़ाइल के फ़ाइल आकार को काफी कम कर देगा।

* एक विंडोज गेस्ट में हम अप्रयुक्त स्थान को उपयोगिता के साथ बदल सकते हैं sdelete


क्या यह अतिथि के भीतर एन्क्रिप्टेड फ़ाइल सिस्टम के लिए भी काम करेगा?
शाम

ज़रूर। यदि आप उपयोग कर रहे हैं ecryptfs, तो एन्क्रिप्टेड फाइलें डिस्क उपयोगिताओं के लिए सामान्य फ़ाइलों की तरह दिखती हैं, और यह काम करेगा। यदि आप फुल-डिस्क एन्क्रिप्शन का उपयोग कर रहे हैं, तो इसे वैसे भी एक पूर्व-स्वरूपित विभाजन के रूप में मान्यता नहीं दी जाएगी :)
क्रोनोस्पून

मैं dm- क्रिप्ट ब्लॉक डिवाइस पर ext4 विभाजन का उपयोग कर रहा हूं ... मैंने विधि की कोशिश की और मैं .vdi फ़ाइल को संघनन के रूप में छोटा नहीं देखता। मुझे लगता है कि डीएम-क्रिप्ट के तहत ब्लॉक डिवाइस पर शून्य ब्लॉक को गैर-शून्य ब्लॉक के रूप में सहेजा जाता है।
स्मिचक 13'15 को

2
@smichak: यह एन्क्रिप्शन की बात है। यह आपकी सभी ड्राइव को एन्क्रिप्ट करेगा यह भी सुनिश्चित करने के लिए कि हम फ़ाइल सीमाएं नहीं देख सकते हैं।
ताकत

3
यदि आप किसी अन्य मशीन के लिए अपने वीडीआई संलग्न करने के लिए नहीं करना चाहते हैं, तो आप वसूली मोड में बूट, और डिस्क केवल पढ़ने के लिए माउंट कर सकते हैं mount -n -o remount,ro -t ext4 /dev/sda1और उसके बाद zerofree -v /dev/sda1
हामिद नज़ारी

1

यहां मुफ्त डिस्क स्थान को शून्य करने के लिए कुछ वैकल्पिक तरीके हैं (जो सबसे अधिक समय लेने वाला हिस्सा हो सकता है)। बाद में, आपको अभी भी VBoxManage modifyhd <disk> --compactवास्तविक डिस्क फ़ाइल को कॉम्पैक्ट करने के लिए चलना होगा ।


यह कमांड डिस्क को शून्य कर सकता है जबकि यह अनमाउंट है:

apt-get install zerofree
zerofree -v /dev/sdxN


समय-समय पर आउटपुट प्रिंट करने के लिए dd प्राप्त करने का एक उदाहरण इस प्रकार है:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


यहां एक समान ddकार्यक्रम है जो स्वचालित रूप से समय-समय पर आउटपुट प्रिंट करेगा:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M

1
मैंने zerofreeएक माउंटेड फाइल सिस्टम पर उपयोग किया है, लेकिन जब इसे आसानी से माउंट किया गया था। रूट एफएस के लिए भी: sudo mount -o remount,ro /- लेकिन जीयूआई सत्र में रूट व्यस्त होगा, इसलिए यह विफल हो जाएगा। लेकिन रनलेवल 1 ( telinit 1) में यह संभव है , इसलिए आपको इसे करने के लिए लाइव सीडी से बूट करने की आवश्यकता नहीं होगी।
टॉमस गैंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.