วิธีการรวมภาพรวมโดยพลการลงในฐาน vdi ใน Virtualbox


14

ฉันทำการถ่ายโอน VM จากฮาร์ดดิสค์หนึ่งไปยังอีกที่หนึ่ง ตอนนี้ฉันเหลือ vdi พื้นฐานและสแนปชอตทั้งหมด

ขั้นตอนของฉัน

  • คัดลอกไดเรกทอรี VM เก่าไปยัง HDD ใหม่
  • ลบ VM เก่าและเพิ่ม VM ใหม่โดยใช้ Machine-> เพิ่มและระบุไฟล์ XML เก่า
  • ไม่สามารถเพิ่มไฟล์ vdi ฐานเนื่องจากข้อขัดแย้งดังนั้นเปลี่ยน UUID ของ base vdi ด้วย

    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}

HDD เก่าคือไดรฟ์ H: อันใหม่คือไดรฟ์ N:

ฉันจะแก้ไข snapshots / VM เพื่อค้นหาN:\vm\ft.vdivdi ฐานได้อย่างไร ฉันได้ตั้งค่าเริ่มต้นใน VirtualBox โดยทั่วไปแล้ว (ตำแหน่งสแนปชอต vm / vm เริ่มต้น)

หรือถ้าไม่ใช่ว่าฉันจะรวม snap snap เก่ากับฐาน vdi ได้อย่างไรเพราะสิ่งเดียวที่เปลี่ยนไปคือ UUID ฐานของ vdi?

คำตอบ:


10

นี่คือวิธีที่ฉันแก้ปัญหาของฉัน

ก่อนอื่นฉันจะเลิกเปลี่ยน UUID ในไฟล์ VDI พื้นฐานโดยใช้สคริปต์โดย jordoncm

จากนั้นฉันก็ลองเปลี่ยนเส้นทางในไฟล์ vbox เพื่อให้ตรงกับตำแหน่งใหม่ ที่ไม่ได้ทำงานเป็นข้อผิดพลาดต่าง ๆ โผล่ขึ้นมาและฉันไม่สามารถเพิ่ม VM โดยใช้ไฟล์ vbox

ดังนั้นฉันจึงพบบทความบล็อกนี้โดย Peter Porterผู้แนะนำ:

เนื่องจากแต่ละ. vdi มีเฉพาะภาคเหล่านั้นที่เปลี่ยนไปจาก. vdi ล่าสุดการคัดลอก. vdi ตามลำดับเวลาควรสุทธิเรา. vdi ที่มีสำเนาเต็มของสแนปชอตก่อนหน้าทั้งหมด

...

ใช้คำสั่ง“ VBoxManage clonehd” เพื่อสร้างไฟล์. vdi ใหม่ตามต้นฉบับของคุณจากนั้นเพิ่มในแต่ละไฟล์ถัดไปโดยใช้อาร์กิวเมนต์“ –existing” เพื่อเพิ่มข้อมูลลงใน. vdi ที่คุณกำลังสร้างอยู่ รายการคำสั่งต่อไปนี้อ้างอิงจากตัวอย่างของฉันด้านบน:

VBoxManage clonehd Machine.vdi Machine-full.vdi

VBoxManage clonehd Snapshots {UUID1} .vdi Machine-full.vdi

VBoxManage clonehd Snapshots {UUID2} .vdi Machine-full.vdi

VBoxManage clonehd Snapshots {UUID3} .vdi Machine-full.vdi

VBoxManage clonehd Snapshots {UUID4} .vdi Machine-full.vdi

สิ่งนี้จะให้ไฟล์“ Machine-full.vdi” ที่แสดงถึงสถานะเต็มของเครื่องของคุณในสถานะแอ็คทีฟโดยไม่มีความสัมพันธ์ใด ๆ กับไฟล์ parent .vdi ตอนนี้คุณสามารถใช้ไฟล์“ Machine-full.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

ดูเหมือนว่า Crap ฉันต้องเพิ่มรายการใน VirtualBox.xml ภายใต้ MediaRegistry-> HardDisks แต่ฉันต้องแน่ใจว่าได้เพิ่มสแนปชอตแต่ละรายการตามลำดับเวลาหลังจากแต่ละสำเนา ดังนั้นมันเป็นเช่นนี้:

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

จากนั้นฉันก็สร้าง VM ใหม่โดยใช้ ft_full.vdi เป็นฐาน จับคู่การตั้งค่าที่เหลือในบานหน้าต่างการตั้งค่า gui


1
ดูเหมือนว่าคุณสามารถทำได้เร็วกว่ามากsuperuser.com/questions/590968/ …
Andrey Regentov

4

ฉันเพิ่งผ่านอาการปวดหัวนี้และมีวิธีการแก้ปัญหาที่โง่ดูเหมือน น่าเสียดายที่ฉันใช้เวลาทั้งวันเพื่อไปที่นี่

ถ้าคุณดูที่คำสั่งภายใน VBoxManage.exe dumphdinfo คุณจะเห็นว่าแต่ละ VDI มีข้อมูลเกี่ยวกับพาเรนต์ ดังนั้นสิ่งที่ฉันทำคือสร้างเครื่องว่างเปล่าและเพิ่ม Parent ที่ "ขาด" HD เป็นไดรฟ์รอง ที่วางไว้ใน Media Manager

จากนั้นฉันเพิ่มคอนโทรลเลอร์ SATA ลงใน VM เปล่าและเพิ่มเลเยอร์สแนปชอต 3 คลิกตกลง แก้ไขอีกครั้งและเพิ่มเลเยอร์สแนปชอต 2 คลิกตกลง แก้ไขเพิ่มเลเยอร์ 1 snap shot

สิ่งนี้ทำให้พวกเขาแต่ละไดรฟ์ภายใน VM แต่ภายใน Media Manager ทั้งหมดจะเชื่อมต่อกัน

ขั้นตอนสุดท้ายคือเพียงแค่ลบ 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 ได้ (ฉันต้องคอมเม้นท์สองบรรทัดซึ่งอ้างอิงไปยังโฟลเดอร์แชร์ที่ไม่มีอยู่ในการติดตั้ง linux ของฉัน
zoechi

0

ชื่อพา ธ เก่า (บนH:ไดรฟ์) อาจระบุไว้ใน.vboxไฟล์สำหรับ VM ซึ่งเป็นเพียงไฟล์ XML หากเป็นเช่นนั้นคุณสามารถบันทึกสำเนาของไฟล์นั้นแก้ไขชื่อพา ธ ให้เป็นชื่อพา ธ ใหม่ (อันที่อยู่บนN:ไดรฟ์) และดูว่าจะแก้ไขปัญหาได้หรือไม่


1
ฉันเปลี่ยนแอตทริบิวต์ที่เกี่ยวข้องในโหนด <HardDisk> และเพิ่ม VM อีกครั้ง แต่ก็จะส่งกลับข้อผิดพลาด: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
jmathew

มันเกิดขึ้นกับฉันบางทีฉันสามารถตั้งค่า UUID กลับเป็นดิสก์ uuid เก่าได้ เป็นไปได้ไหม
jmathew

ใช้สคริปต์ของสุภาพบุรุษนี้เพื่อตั้งค่า uuid ย้อนกลับ: การตั้งค่า UUID ของ VirtualBox VDI
jmathew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.