Cách hợp nhất ảnh chụp nhanh tùy ý vào cơ sở vdi trong Virtualbox


14

Tôi đã thực hiện chuyển VM từ ổ cứng này sang ổ cứng khác. Bây giờ tôi còn lại với cơ sở vdi và một loạt các ảnh chụp nhanh.

Bước của tôi

  • Sao chép thư mục VM cũ qua ổ cứng mới
  • Đã xóa VM cũ và thêm VM mới bằng cách sử dụng Machine-> thêm và cung cấp tệp XML cũ
  • Không thể thêm tệp vdi cơ sở do xung đột nên đã thay đổi UUID của cơ sở vdi với

    VBOXMANGE.EXE internalcommands sethduuid  <path/to/vdi>
    
  • Cố gắng quay lại ảnh chụp nhanh, nhưng có vẻ như VM đang tìm kiếm các ảnh chụp nhanh trên ổ cứng cũ (đã được định dạng và biến mất)

Đây là lỗi (nối mạng là tên):

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}

Ổ cứng cũ là ổ H: ổ mới là ổ N:

Làm cách nào tôi có thể sửa đổi ảnh chụp nhanh / VM để tìm kiếm N:\vm\ft.vdicơ sở vdi? Tôi đã thiết lập các cài đặt mặc định trong VirtualBox nói chung (vị trí chụp nhanh vm / vm mặc định).

Hoặc nếu không, làm thế nào tôi có thể hợp nhất ảnh chụp nhanh cũ với vdi cơ sở cho rằng điều duy nhất đã thay đổi là UUID cơ sở của vdi?

Câu trả lời:


10

Đây là cách tôi giải quyết vấn đề của mình.

Đầu tiên tôi hủy thay đổi UUID trên tệp VDI cơ sở của mình bằng cách sử dụng tập lệnh của jordoncm

Sau đó, tôi đã cố gắng đơn giản thay đổi các đường dẫn trong tệp vbox để phù hợp với vị trí mới. Điều đó không hoạt động khi nhiều lỗi khác nhau xuất hiện và tôi thậm chí không thể thêm VM bằng tệp vbox.

Vì vậy, tôi tìm thấy bài viết blog này của Peter Porter , người đề xuất:

vì mỗi .vdi chỉ chứa các lĩnh vực được thay đổi từ .vdi cuối cùng, sao chép .vdi theo thứ tự thời gian sẽ gửi cho chúng tôi một .vdi chứa một bản sao đầy đủ của tất cả các ảnh chụp nhanh trước đó.

...

Sử dụng lệnh clonehd nghén của VBoxManage để tạo tệp .vdi mới dựa trên bản gốc của bạn, sau đó thêm vào từng tệp tiếp theo bằng cách sử dụng đối số mật mã hiện tại để thêm dữ liệu vào .vdi hiện có. Danh sách các lệnh sau được dựa trên ví dụ của tôi ở trên:

VBoxManage máy clonehd.vdi Máy đầy đủ.vdi

Ảnh chụp nhanh VBoxManage clonehd {UUID1} .vdi Máy-full.vdi

Ảnh chụp nhanh clonehd của VBoxManage {UUID2} .vdi Máy-full.vdi

Ảnh chụp nhanh clonehd của VBoxManage {UUID3} .vdi Máy-full.vdi

Ảnh chụp nhanh VBoxManage clonehd {UUID4} .vdi Máy-full.vdi

Điều này sẽ cung cấp cho bạn một tập tin Máy Machine-full.vdi, đại diện cho trạng thái đầy đủ của máy của bạn ở trạng thái hoạt động mà không có bất kỳ mối quan hệ nào với các tệp .vdi gốc. Bây giờ bạn có thể sử dụng tệp này của máy Machine-full.vdi trên một máy ảo mới hoặc chỉnh sửa VM hiện có của bạn, xóa tệp .vdi cũ và thêm tệp .vdi này.

Với một chút tinh chỉnh có vẻ hiệu quả với tôi:

Đây là đĩa cứng và ảnh chụp nhanh của nó:

<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>

Đây là những lệnh tôi đã chạy (xin lỗi, một số lệnh bị cắt khỏi cửa sổ của nó ...):

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 có vẻ như tôi cần thêm một mục trong VirtualBox.xml trong MediaRegistry-> HardDisks, nhưng tôi phải đảm bảo thêm từng ảnh chụp vào đó theo thứ tự thời gian sau mỗi bản sao. Vì vậy, nó như thế này:

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

Và phần còn lại của những gì tôi đã làm trong trường hợp nó giúp được bất kỳ ai khác:

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

Và sau đó tôi chỉ cần tạo một VM mới bằng cách sử dụng ft_full.vdi làm cơ sở. Khớp với phần còn lại của cài đặt trong khung cài đặt gui.


1
Dường như bạn có thể làm điều đó nhanh hơn nhiều superuser.com/questions/590968/...
Andrey Regentov

4

Tôi vừa trải qua cơn đau đầu này và có một giải pháp có vẻ ngu ngốc. Quá tệ, tôi phải mất cả ngày để đến đây.

Nếu bạn xem qua nội bộ VBoxManage.exe dumphdinfo, bạn có thể thấy rằng mỗi VDI có thông tin về cha mẹ của nó. Vì vậy, những gì tôi đã làm là tạo ra một máy trống và thêm Parent HD "bị hỏng" làm ổ đĩa thứ cấp. Điều đó đã đặt nó vào Media Manager.

Sau đó, tôi đã thêm một bộ điều khiển SATA vào VM trống và thêm ảnh chụp nhanh lớp 3. Nhấp vào ok. Chỉnh sửa lại và thêm ảnh chụp nhanh lớp 2, nhấp vào ok. Chỉnh sửa, thêm ảnh chụp nhanh lớp 1.

Điều này làm cho chúng trở thành các ổ riêng lẻ bên trong VM, nhưng bên trong Media Manager, tất cả chúng đều được gắn với nhau.

Bước cuối cùng, chỉ cần xóa VM ngân hàng và Thêm VM cũ của bạn. Xong ... và vâng, thật ngu ngốc / đơn giản.

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}

Một cách đơn giản là, tôi chỉ cần bỏ cha mẹ và sau đó tệp đĩa chụp nhanh từ trình quản lý tệp sang trình quản lý đĩa ảo. Sau đó, tôi có thể mở tệp .vbox (tôi phải nhận xét hai dòng tham chiếu đến thư mục dùng chung không tồn tại trên bản cài đặt linux của tôi.
zoechi

0

Tên đường dẫn cũ (trên H:ổ đĩa) có thể được chỉ định đơn giản trong .vboxtệp cho VM, đây chỉ là một tệp XML. Nếu vậy, bạn có thể lưu một bản sao của tệp đó, chỉnh sửa tên đường dẫn thành tên đường dẫn mới (tên trên N:ổ đĩa) và xem liệu nó có khắc phục được sự cố không.


1
Tôi đã thay đổi thuộc tính có liên quan trong nút <HardDisk> và thêm lại VM. Tuy nhiên, nó trả về lỗi: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
jmathew

Nó xảy ra với tôi có lẽ tôi chỉ có thể đặt UUID trở lại đĩa cũ uuid. Điều đó có thể không?
jmathew

Đã sử dụng tập lệnh của quý ông này để đặt lại uuid: Đặt UUID của VirtualBox VDI
jmathew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.