सवाल वर्चुअलबॉक्स के वीडीआई फ़ाइल आकार को कैसे कॉम्पैक्ट करें?


मेरे पास वर्चुअलबॉक्स वीएम है जो एक बहुत बड़ी हार्ड डिस्क आकार (मेजबान से बड़ा) कॉन्फ़िगर किया गया है। मेरी गलती से, वीएम पर एक कार्यक्रम ने बहुत सारी लॉग फाइलें उत्पन्न कीं और वीडीआई फ़ाइल का आकार तब तक बढ़ता जा रहा है जब तक मेजबान पर कोई जगह न हो।

अब मैंने लॉग फाइलों को हटा दिया है लेकिन वीडीआई फ़ाइल का आकार उपयोग करने के बाद छोटा नहीं हो रहा है VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

वास्तव में वीडीआई फ़ाइल आकार को कॉम्पैक्ट करने का कोई तरीका है? धन्यवाद!


279
2018-01-07 03:41


मूल




जवाब:


आपको निम्नलिखित कदम उठाना है:

  1. अतिथि में डिफ्रैग चलाएं (केवल विंडोज़)
  2. मुक्त स्थान को खाली करें:

    के साथ लिनक्स अतिथि इसे चलाओ:

    dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile
    

    या:

    telinit 1
    mount -o remount,ro /dev/sda1
    zerofree -v /dev/sda1
    

    के साथ विंडोज अतिथि, डाउनलोड SDelete Sysinternals से और इसे चलाने के लिए:

    sdelete.exe c: -z
    

    (सी बदलें: वीडीआई के ड्राइव अक्षर के साथ)

  3. अतिथि वीएम बंद करें

  4. अब VBoxManage चलाएं modifymedium के साथ आदेश --compact विकल्प:

    के साथ लिनक्स होस्ट इसे चलाओ:

    vboxmanage modifymedium --compact /path/to/thedisk.vdi
    

    के साथ विंडोज होस्ट इसे चलाओ:

    VBoxManage.exe modifymedium --compact c:\path\to\thedisk.vdi
    

    के साथ मैक होस्ट इसे चलाओ:

    VBoxManage modifymedium --compact /path/to/thedisk.vdi
    

यह वीडीआई आकार को कम करता है।


469
2018-01-07 05:05



अगले व्यक्ति के लिए, मेरा आदेश इस तरह दिख रहा है: "सी: \ प्रोग्राम फ़ाइलें \ ओरेकल \ वर्चुअलबॉक्स \ VBoxManage.exe" संशोधित "सी: \ उपयोगकर्ता \ डैनियल \ वर्चुअलबॉक्स वीएम \ .... \ thedisk.vdi" - -compact - Daniel
जेरोफ्री लिनक्स यूटिलिटी मैनपेज के अनुसार (manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html), ज़ीरोफ्री से बेहतर होना चाहिए dd इस नौकरी के लिए। dd इसकी अनुशंसा नहीं की जाएगी क्योंकि "यह धीमा है", "यह डिस्क छवि (अस्थायी रूप से) अपनी अधिकतम सीमा तक बढ़ता है", "यह (अस्थायी रूप से) डिस्क पर सभी खाली स्थान का उपयोग करता है, इसलिए अन्य समवर्ती लेखन क्रियाएं विफल हो सकती हैं"। ज़रफ्री उबंटू लिनक्स के माध्यम से उपलब्ध है उपयुक्त, या आप इसे स्वयं संकलित कर सकते हैं। - Dakatine
यह मजेदार है कि का मैनपेज zerofree बताता है कि के साथ dd अन्य समवर्ती लेखन विफल हो जाएंगे, लेकिन ज़ीरोफ्री को केवल पढ़ने के लिए फाइल सिस्टम की आवश्यकता है! * ओह * - Madarco
युक्ति: दो आदेशों को एक पंक्ति पर रखें जैसे: dd ...; rm /bigfile, यदि आप प्रतीक्षा नहीं कर रहे हैं तो यह एक पूर्ण डिस्क के साथ समय को कम करेगा dd पूरा करना। - jlh
@Dakatine वर्चुअलबॉक्स 4.3.10 का उपयोग कर, डिस्क छवि फ़ाइल किया था नहीं बढ़ो इसकी अधिकतम सीमा तक। वर्चुअलबॉक्स भौतिक डिस्क पर सभी शून्य ब्लॉक लिखने को परेशान करने के लिए पर्याप्त चालाक नहीं है। - jlh


यदि स्वीकृत उत्तर में कमांड चलाते हैं तो इस तरह एक असुरक्षित त्रुटि संदेश उत्पन्न होता है

VBoxManage.exe: error: Cannot register the hard disk 'thedisk.vdi'
{aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} because a hard disk 'thedisk.vdi'
with UUID {aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} already exists

बस फ़ाइल नाम के बजाय यूयूआईडी द्वारा कमांड चलाएं:

VBoxManage.exe modifyhd {aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} --compact

35
2018-06-18 07:20





मैं विंडोज़ मेहमानों के साथ विंडोज 7 होस्ट पर हूं, यहां एक बैच फ़ाइल है जिसे मैंने एक फ़ोल्डर पेड़ में सभी वीडीआई कॉम्पैक्ट करने के लिए लिखा है

echo off
mode con:cols=140 lines=200
cls
:: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272
:: How can I reduce the size of a dynamic VDI on disk?
:: but that page says to use sdelete -s which is suboptimal. 
:: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx

:: First run the sdelete -z c: inside the VMs that zero-out all the free space
:: THEN run this batch file 

Title Compacting Free space on Virtual Machine VMs

:: http://ss64.com/nt/for_r.html
:: http://stackoverflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401

Setlocal EnableDelayedExpansion
:: http://ss64.com/nt/delayedexpansion.html ... 
:: Notice that within the for loop we use !variable! instead of %variable%.

For /R %CD% %%G IN (*.vdi) DO (
 set ohai=%%G
 set lastfive=!ohai:~-5!
:: Skip snapshots which are named {guid}.vdi
 if NOT !lastfive!==}.vdi (
 echo .
 echo Compacting %%G
 "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact )
 )

pause 
exit

मैंने टिप्पणियों में लिंक छोड़े ताकि आप (तरह) बता सकें कि यह कैसे काम करता है।

संपादित करें

खैर, उसके बाद, मैंने कोशिश की क्लोनवीडीआई उपकरण और यह बहुत कम समय में और एक क्लिक में अच्छा काम किया।


11
2018-01-09 10:25



आप इस तरह की साइट पर सोचेंगे कि डॉस के लिए कुछ प्रकार का सिंटैक्स हाइलाइटिंग होगा लेकिन नहीं। यह नोटपैड ++ में बहुत सुंदर दिखता है - CAD bloke
@CAD_bloke जिसके लिए एक पार्सिंग इंजन की आवश्यकता होगी और जब आप एसई पर पोस्ट की गई विभिन्न भाषाओं की संख्या पर विचार करेंगे तो आप एक बड़ी परियोजना को देख रहे हैं। बस सोचें कि डॉस के कितने संस्करण और बोलियां उदाहरण के लिए हैं और इससे पहले कि आप लिनक्स आदि तक पहुंच जाएं। - Caltor
बहुत अच्छा मुद्दा। विडंबना यह है है स्टैक एक्सचेंज आईओएस ऐप पर हाइलाइट किया गया। - CAD bloke
हाँ क्लोनवीडीआई व्यक्तिगत उपयोग के लिए बहुत बेहतर और तेज़ तरीका है - VarunAgw


डिस्कार्ड / टीआरआईएम का उपयोग कर विंडोज होस्ट पर डेबियन अतिथि।

यह प्रति सीधा जवाब नहीं है, क्योंकि मैं समस्या का समाधान कर रहा हूं, सवाल नहीं। समय-समय पर छवि को कॉम्पैक्ट करने के बजाय, यह समाधान मेजबान की वीएम डिस्क छवि में स्वचालित रूप से अप्रयुक्त ब्लॉक को हटाने के लिए त्याग देता है।

इस समाधान के लिए एक अतिथि फाइल सिस्टम की आवश्यकता होती है जो निरंतर टीआरआईएम का समर्थन करता है। आर्क लिनक्स विकी में एक है टीआरआईएम संचालन का समर्थन करने वाली फाइल सिस्टम की सूची

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

सिद्धांत रूप में, यह वीडीआई स्टोरेज का उपयोग कर वीबीओक्स होस्ट पर सभी लिनक्स मेहमानों के लिए काम करेगा।

मेजबान विन्यास

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

<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >

वीएम को बूट करें, और सत्यापित करें कि TRIM समर्थन सक्षम है:

sudo hdparm -I /dev/sda | grep TRIM

अतिथि विन्यास

यदि एलवीएम उपयोग में है, तो सेटिंग को हटा दें /etc/lvm/lvm.conf। (संदर्भ: डेबियन विकी, lvm.conf उदाहरण)

devices {
...
    issue_discards = 1
}

Fstab में, जोड़ें discard उन फाइल सिस्टमों का विकल्प जिन्हें आप ऑटो-डिस्कार्ड करना चाहते हैं (रेफरी: डेबियन विकी, fstab उदाहरण)

UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c   /   ext4    discard,errors=remount-ro   0   1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7   /build  ext4    discard,errors=remount-ro,noatime   0   1

फाइल सिस्टम को उनके नए विकल्प लेने के लिए याद दिलाएं।

sudo mount -o remount /
sudo mount -o remount /build

अब मुफ्त ब्लॉक को मैन्युअल रूप से ट्रिम करें fstrimfstrim घुड़सवार फाइल सिस्टम का उपयोग करता है, न कि ब्लॉक डिवाइस का समर्थन करता है। निरंतर त्यागने की बजाय fstab, यह एक साप्ताहिक क्रॉन पर किया जा सकता है। (साप्ताहिक क्रॉन को भौतिक एसएसडी के लिए अनुशंसित किया जाता है, जिसमें टीआरआईएम के लिए संदिग्ध समर्थन हो सकता है, लेकिन यह यहां प्रासंगिक नहीं है क्योंकि अंतर्निहित एसएसडी होस्ट ओएस द्वारा संभाले जाते हैं। देखें: एसएसडी ट्रिम चेतावनी)।

fstrim /
fstrim /build

इस बिंदु पर, वीएम के अंदर फाइल सिस्टम का आकार और वीएम छवियों के आकार का मूल्य बहुत करीब होना चाहिए।

के साथ परीक्षण किया गया:

  • अतिथि 1: डेबियन 8.7, कर्नेल: बैनक्स से लिनक्स 4.8 grsec, फाइल सिस्टम: ext4
  • अतिथि 2: डेबियन 9 आरसी 2, कर्नेल: लिनक्स 4.9, फाइल सिस्टम: ext4
  • होस्ट 1: वीबॉक्स 5.1.14, विन 7, छवि एफएमटी: वीडीआई
  • होस्ट 2: वीबॉक्स 5.1.14, विन 8.1, छवि एफएमटी: वीडीआई

5
2018-02-24 16:27





के लिये मैकोज़ अतिथि यह करो:

  1. अतिथि प्रणाली में खाली स्थान को खाली करें:

    diskutil secureErase freespace 0 "/Volumes/Macintosh HD"
    

    (अपने ड्राइव नाम के साथ / वॉल्यूम्स / मैकिंतोश एचडी को प्रतिस्थापित करें)

  2. अतिथि वीएम बंद करें

  3. वीडीआई डिस्क छवि आकार को कम करने के लिए इस कमांड को चलाएं

    VBoxManage modifyhd /path/to/thedisk.vdi --compact
    

    या

    VBoxManage modifymedium /path/to/thedisk.vdi --compact
    

2
2017-12-16 17:08





मैं इसे विंडोज वर्चुअलबॉक्स में वर्चुअल डेबियन पर घुड़सवार मेरी वीडीआई छवि के लिए उपयोग करता हूं। यह एक सामान्य समाधान नहीं है, लेकिन कम से कम आपको जो कुछ करना है उसका एक सारांश देना चाहिए।

डेबियन में कमांड:

root@debian:~# lsblk  # show partitions
नाम MAJ: MIN RM SIZE RO प्रकार माउंटपोइंट
एसडीबी 8:16 0 128 जी 0 डिस्क
└─sdb1 8:17 0 128 जी 0 भाग / mnt / web # यह रुचि का हिस्सा है!
एसडीए 8: 0 0 64 जी 0 डिस्क
├─sda1 8: 1 0 61,4 जी 0 भाग /
├─sda2 8: 2 0 1K 0 भाग
└─sda5 8: 5 0 2,7 जी 0 भाग
[SWAP] sr0 11: 0 1 56,3M 0 रोम
root@debian:~# service mysql stop  # terminate all operations with partition
root@debian:~# service apache2 stop  # terminate all operations with partition
root@debian:~# umount /mnt/web  # unplug partition
root@debian:~# apt-get install zerofree  # install tool for filling in zeros to empty space
root@debian:~# zerofree -v /dev/sdb1  # fill with zeros
root@debian:~# poweroff  # shut down machine

विंडोज में कमांड:

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd --compact "D:\VirtualBox VMs\web.vdi"  # convert zeros to empty space

आशा करता हूँ की ये काम करेगा :)


1
2018-02-05 11:31





मैं ओएस में टीआरआईएम समर्थन को सक्षम नहीं करना चाहता, क्योंकि प्रत्येक डेटा विलोपन VDI फ़ाइल में डेटा कॉम्पैक्टिंग को मजबूर करेगा, जिससे वीडीआई फ़ाइल क्लासिक रोटेशनल डिस्क पर होने पर अतिथि सिस्टम को अनुपयोगी बना दिया जा सकता है। मेरे लिए हाथ से कॉम्पैक्टिंग करना बेहतर है उदा। महीने में एक बार।

सामान्य कॉम्पैक्टिंग के दौरान, वीडीआई फ़ाइल सामग्री को नई फाइल में कॉपी किया जाता है। मेजबान डिस्क पर इसके लिए कुछ (कभी-कभी बड़ी) खाली जगह की आवश्यकता होती है।

मेरे पास एंड्रयू डोमाज़ेक द्वारा निर्देशित समाधान है। यह एनटीएफएस (विंडोज 10) के साथ भी बहुत अच्छी तरह से काम करता है।

यह करने के लिए:

  • नई वर्चुअल मशीन बनाएं जो GParted लाइव सीडी के साथ बूट हो (आप अपने पसंदीदा लिनक्स डिस्ट्रो का उपयोग कर सकते हैं)।
  • मशीन सेटिंग्स संपादित करें और सैटा डिस्क नियंत्रक सेट करें
  • मौजूदा वीडीआई फाइलें जोड़ें जिन्हें आप कॉम्पैक्ट करना चाहते हैं
  • टीआरआईएम समर्थन के साथ एसएसडी के रूप में दिखाई देने के लिए वीडीआई आधारित डिस्क बदलें:

VBoxManage storageattach "gpared live" --storagectl "SATA" --port 0 --discard on --nonrotational on VBoxManage storageattach "gpared live" --storagectl "SATA" --port 1 --discard on --nonrotational on

  • मशीन शुरू करें
  • लिनक्स रूट खोल में, एनटीएफएस विभाजन माउंट करें mount /dev/sda2 /mnt
  • शून्य मुक्त स्थान dd if=/dev/zero of=/mnt/bigfile
  • rm /mnt/bigfile
  • नई फाइल बनाने के बिना वीडीआई कॉम्पैक्टिंग बल: fstrim -v /mnt

1
2017-09-15 07:17





स्वीकार्य उत्तर को पूरक करने के लिए एक बहुत ही साफ चाल यह है कि होस्ट पर संपीड़ित फ़ाइल सिस्टम का उपयोग करके अतिथि स्थान शून्य करने के बाद आप किसी भी कॉम्पैक्टिंग के बिना दूर हो सकते हैं (उदाहरण के लिए एनटीएफएस गुणों पर वर्चुअल ड्राइव के फ़ोल्डर को संपीड़ित करना विंडोज होस्ट)। वास्तव में यह बहुत अधिक जगह बचाने के लिए लाभ है क्योंकि ऑपरेटिंग सिस्टम में बहुत से दोहराए जाने वाले पाठ या बाइनरी फाइलें होती हैं (उदाहरण के लिए 30 जीबी अतिथि ड्राइव जिसमें 15 जीबी स्पेस शून्य था, मेजबान ड्राइव पर 4 जीबी तक बदल सकता है)।

चेतावनी में शामिल हैं कि वास्तविक हार्डवेयर पर ड्राइव पहुंच बढ़ सकती है और CPU उपयोग में मामूली वृद्धि हुई है।


0
2018-01-20 07:13