वर्चुअलबॉक्स में मनमाने ढंग से स्नैपशॉट को आधार vdi में कैसे मर्ज किया जाए


14

मैंने वीएम को एक हार्डडिस्क से दूसरे में ट्रांसफर किया। अब मैं बेस वीडी और स्नैपशॉट के पूरे समूह के साथ छोड़ दिया गया हूं।

मेरे कदम

  • नए HDD पर पुराने VM निर्देशिका की प्रतिलिपि बनाई गई
  • पुराने VM को हटा दिया गया और मशीन का उपयोग करके नया VM जोड़ा गया-> पुरानी XML फ़ाइल जोड़ें और प्रदान करें
  • संघर्ष के कारण आधार vdi फ़ाइल नहीं जोड़ सका इसलिए आधार vdi के UUID को बदल दिया गया

    VBOXMANGE.EXE internalcommands sethduuid  <path/to/vdi>
    
  • स्नैपशॉट पर रोलबैक करने का प्रयास, लेकिन ऐसा लगता है कि VM पुराने HDD (जो स्वरूपित और चला गया है) पर स्नैपशॉट की तलाश कर रहा है

यह त्रुटि है (नेटवर्क नाम है):

Failed to restore the snapshot networked of the virtual machine lfs.

Could not open the medium 'H:\vm\ft.vdi'.

VD: error VERR_PATH_NOT_FOUND opening image file 'H:\vm\ft.vdi' (VERR_PATH_NOT_FOUND).

Result Code: E_FAIL (0x80004005)
Component: Medium
Interface: IMedium {53f9cc0c-e0fd-40a5-a404-a7a5272082cd}

पुराना एचडीडी ड्राइव एच था: नया एक ड्राइव एन है:

N:\vm\ft.vdiआधार vdi देखने के लिए मैं स्नैपशॉट / वीएम को कैसे संशोधित कर सकता हूं ? मैंने पहले से ही वर्चुअलबॉक्स में डिफ़ॉल्ट सेटिंग्स को सामान्य रूप से सेट किया है (डिफ़ॉल्ट vm / vm स्नैपशॉट स्थान)।

या यदि नहीं तो मैं आधार वादी के साथ पुराने स्नैप शॉट को कैसे मर्ज कर सकता हूं, यह देखते हुए कि केवल चीजें जो बदली हैं, वह आधार वादी का यूयूआईडी है?

जवाबों:


10

यहां मैंने अपनी समस्या को हल किया।

पहले मैंने अपने बेस VDI फाइल पर UUID को स्क्रिप्ट को jordoncm द्वारा उपयोग करके बदल दिया

फिर मैंने नए स्थान से मिलान करने के लिए बस vbox फ़ाइल में पथ बदलने का प्रयास किया। यह अलग-अलग त्रुटियों के रूप में काम नहीं करता था और मैं vbox फ़ाइल का उपयोग करके VM को जोड़ने में सक्षम नहीं था।

तो मुझे पीटर पोर्टर का यह ब्लॉग लेख मिला जिसने सुझाव दिया था:

जैसा कि प्रत्येक .vdi में केवल वे ही क्षेत्र होते हैं, जो पिछले .vdi से परिवर्तित होते हैं, .vdi के कालानुक्रमिक क्रम की नकल करते हुए हमें शुद्ध होना चाहिए -vdi जिसमें सभी पूर्व स्नैपशॉट की पूरी प्रतिलिपि हो।

...

अपने मूल के आधार पर एक नई .vdi फ़ाइल बनाने के लिए "VBoxManage क्लोन" कमांड का उपयोग करें, फिर प्रत्येक-मौजूदा फ़ाइल में "-existing" तर्क का उपयोग करके केवल मौजूदा डेटा .vdi में डेटा जोड़ने के लिए जोड़ें। निम्नलिखित आदेशों की सूची ऊपर मेरे उदाहरण पर आधारित है:

VBoxManage clonehd Machine.vdi मशीन-full.vdi

VBoxManage क्लोन क्लोन स्नैपशॉट्स {UUID1} .वीडी मशीन-फुल.वडी

VBoxManage क्लोन क्लोन स्नैपशॉट्स {UUID2} .vdi मशीन- full.vdi

VBoxManage क्लोन क्लोन स्नैपशॉट्स {UUID3} .vdi मशीन- full.vdi

VBoxManage क्लोन क्लोन स्नैपशॉट्स {UUID4} .वीडी मशीन-फुल.वडी

यह आपको एक "मशीन-फुल.वीडी" फाइल देगा जो कि आपके मशीन की पूर्ण स्थिति को पैरेंट .vdi फ़ाइलों के बिना सक्रिय स्थिति में दर्शाती है। अब आप एक नई वर्चुअल मशीन पर इस "मशीन-फुल.वीडी" फ़ाइल का उपयोग कर सकते हैं या अपने मौजूदा VM को संपादित कर सकते हैं। पुरानी .vdi फ़ाइल को हटा सकते हैं और इस .vdi को जोड़ सकते हैं।

मेरे साथ काम करने के लिए थोड़ा ट्विकिंग के साथ:

यह हार्ड डिस्क और इसका स्नैपशॉट है:

<HardDisk uuid="{ed1428ca-76be-440a-894b-e666b50f5c86}" location="H:/vm/ft.vdi" format="VDI" type="Normal">
          <HardDisk uuid="{8d8be78f-6648-4503-bee3-8810cb853a99}" location="Snapshots/{8d8be78f-6648-4503-bee3-8810cb853a99}.vdi" format="VDI">
            <HardDisk uuid="{cce0ee4f-5052-4be7-81ff-47ea08202716}" location="Snapshots/{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" format="VDI">
              <HardDisk uuid="{c297d4b9-972d-4b07-a839-5d76ee8d0387}" location="Snapshots/{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" format="VDI">
                <HardDisk uuid="{8e9ca914-648f-464c-b515-2606c644d7f0}" location="Snapshots/{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" format="VDI"/>
              </HardDisk>
            </HardDisk>
          </HardDisk>
        </HardDisk>

ये वे कमांड हैं जिन्हें मैंने चलाया था (क्षमा करें कि इसकी कुछ खिड़कियों को काट दिया गया है ...):

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd N:\vm\ft.vdi N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd "N:\vm\VirtualBox       VMs\lfs\Snapshots\{8d8be78f-6648-4503
VBoxManage.exe: error: Parent medium with UUID {ed1428ca-76be-440a-894b-e666b50f5c86} of the medium 'N:\vm\Vi
03-bee3-8810cb853a99}.vdi' is not found in the media registry ('C:\Users\   <user>/.VirtualBox\VirtualBox.xml')
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Medium, interface    IMedium, callee IUnknow
Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, AccessMode_ReadWrite,   fForceNewUuidOnOpen, pM
xManageDisk.cpp

बकवास लगता है कि मुझे MediaRegistry-> HardDisks के तहत VirtualBox.xml में एक प्रविष्टि जोड़ने की आवश्यकता है, लेकिन मुझे प्रत्येक कॉपी के बाद कालानुक्रमिक क्रम में प्रत्येक स्नैपशॉट को जोड़ना सुनिश्चित करना होगा। तो यह इस तरह है:

Copy VM
Add entry to VirtualBox.xml
Copy VM ...

और बाकी जो मैंने किया वह किसी और की मदद करता है:

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox   VMs\lfs\Snapshots\{8d8be78
_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox   VMs\lfs\Snapshots\{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4

और फिर मैंने बस अपने आधार के रूप में ft_full.vdi का उपयोग करके एक नया वीएम बनाया। बाकी सेटिंग्स को gui settings pane से मिलाया।


1
ऐसा लगता है कि आप इसे बहुत तेजी से कर सकता है कि superuser.com/questions/590968/...
एंड्री Regentov

4

मैं बस इस सिरदर्द से गुज़रा और वहाँ एक मूर्खतापूर्ण समाधान है। बहुत बुरा हुआ मुझे यहाँ पहुँचने में पूरा एक दिन लग गया।

यदि आप VBoxManage.exe पर एक नज़र डालते हैं, तो आंतरिक dumphdinfo आप देख सकते हैं कि प्रत्येक VDI को इसके मूल के बारे में जानकारी है। इसलिए, मैंने जो किया वह एक खाली मशीन बना दिया और "टूटी हुई" पेरेंट HD को सेकेंडरी ड्राइव के रूप में जोड़ दिया। इसे मीडिया मैनेजर में रखा।

फिर, मैंने रिक्त VM में एक SATA नियंत्रक जोड़ा और परत 3 स्नैपशॉट जोड़ा। ओके पर क्लिक करें। फिर से संपादित करें और परत 2 स्नैपशॉट जोड़ें, ठीक क्लिक करें। संपादित करें, परत 1 स्नैप शॉट जोड़ें।

यह उन्हें VM के अंदर व्यक्तिगत ड्राइव बनाता है, लेकिन मीडिया मैनेजर के अंदर वे सभी एक-दूसरे से जुड़े होते हैं।

अंतिम चरण, बस बैंक VM को हटा दें और अपना पुराना VM जोड़ें। हो गया ... और हाँ, यह बेवकूफ़ / सरल है।

c:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands dumphdinfo D:
\Virtual_box\Virtual_box_HD_C.vdi

1 Header: uuidCreation={13ea5785-58db-4ad9-8459-9b13d89a3aaa}
1 Header: uuidModification={b1bfd84d-6fcc-4640-80fc-b7c1a6b929cb}
1 Header: uuidParent={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidCreation={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidModification={709f1fad-68a3-47c7-9336-f3409fcae95b}
  2 Header: uuidParent={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidCreation={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidModification={049d869e-89c2-48aa-b0cc-eb324895f3b9}
    3 Header: uuidParent={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidCreation={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidModification={6c397704-fe65-4661-b60f-767e207ffb58}
      4 Header: uuidParent={00000000-0000-0000-0000-000000000000}

एक सरलीकरण था, कि मैंने बस मूल फ़ाइल प्रबंधक से वर्चुअल डिस्क प्रबंधक तक अभिभावक और फिर स्नैपशॉट डिस्क फ़ाइल को गिरा दिया। तब मैं .vbox फ़ाइल को खोल सकता था (मुझे दो पंक्तियों पर टिप्पणी करनी थी जो साझा फ़ोल्डर के सन्दर्भ में थी जो कि लिनक्स इंस्टॉलेशन पर मौजूद नहीं थी।
zoechi

0

पुराने pathname ( H:ड्राइव पर) केवल .vboxVM के लिए फ़ाइल में निर्दिष्ट किया जा सकता है , जो कि केवल एक XML फ़ाइल है। यदि ऐसा है, तो आप उस फ़ाइल की एक प्रति सहेज सकते हैं, पथनाम को नए पथनाम ( N:ड्राइव पर एक ) होने के लिए संपादित करें , और देखें कि क्या यह समस्या को ठीक करता है।


1
मैंने प्रासंगिक विशेषता को <हार्डडिस्क> नोड में बदल दिया और वीएम को फिर से जोड़ा। हालाँकि यह त्रुटि लौटाता है: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
जम्मूतवी

यह मेरे साथ होता है शायद मैं यूयूआईडी को पुरानी डिस्क यूआईडी पर वापस सेट कर सकता हूं। क्या यह संभव है?
जम्मूतवी

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