Virtualbox에서 임의의 스냅 샷을 기본 VDI로 병합하는 방법


14

한 하드 디스크에서 다른 하드 디스크로 VM 전송을 수행했습니다. 이제 기본 vdi와 전체 스냅 샷이 남았습니다.

내 단계

  • 기존 VM 디렉토리를 새 HDD로 복사
  • Machine-> add를 사용하여 기존 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}

이전 HDD는 H 드라이브였습니다. 새 HDD는 N 드라이브입니다.

N:\vm\ft.vdi기본 vdi 를 찾도록 스냅 샷 / VM을 수정하려면 어떻게 해야합니까? 이미 VirtualBox의 기본 설정을 이미 설정했습니다 (기본 vm / vm 스냅 샷 위치).

아니면 변경되지 않은 유일한 것이 기본 vdi의 UUID 인 경우 이전 스냅 샷을 기본 vdi와 병합하는 방법은 무엇입니까?

답변:


10

문제를 해결 한 방법은 다음과 같습니다.

먼저 jordoncm스크립트를 사용하여 기본 VDI 파일에서 UUID를 변경하지 않았습니다.

그런 다음 vbox 파일의 경로를 새 위치와 일치하도록 변경하려고했습니다. 다양한 오류가 발생하여 작동하지 않았으며 vbox 파일을 사용하여 VM을 추가 할 수도 없었습니다.

그래서 Peter Porter 가 제안한 이 블로그 기사를 찾았습니다 .

각 .vdi에는 마지막 .vdi에서 변경된 섹터 만 포함되므로 .vdi를 시간 순서대로 복사하면 모든 이전 스냅 샷의 전체 사본이 포함 된 .vdi를 확보해야합니다.

...

“VBoxManage clonehd”명령을 사용하여 원본을 기반으로 새 .vdi 파일을 만든 다음“-existing”인수를 사용하여 각 후속 파일을 추가하여 기존의 .vdi에 데이터를 추가하십시오. 다음 명령 목록은 위의 예를 기반으로합니다.

VBoxManage clonehd Machine.vdi Machine-full.vdi

VBoxManage clonehd 스냅 샷 {UUID1} .vdi Machine-full.vdi

VBoxManage clonehd 스냅 샷 {UUID2} .vdi Machine-full.vdi

VBoxManage clonehd 스냅 샷 {UUID3} .vdi Machine-full.vdi

VBoxManage clonehd 스냅 샷 {UUID4} .vdi Machine-full.vdi

그러면 부모 .vdi 파일과 관계없이 활성 상태에서 컴퓨터의 전체 상태를 나타내는“Machine-full.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은 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를 기본으로 사용하여 새 VM을 만들었습니다. GUI 설정 창의 나머지 설정과 일치합니다.


1
당신이 훨씬 더 빨리 그것을 할 수 있다는 것 superuser.com/questions/590968/...
안드레이 Regentov

4

방금이 두통을 겪었고 어리석은 해결책이 있습니다. 여기까지 오는데 하루 종일 걸 렸어요.

당신은 한 번 봐 걸릴 경우 dumphdinfo VBoxManage.exe의 internalcommands를 각 VDI는 부모에 대한 정보를 가지고 있음을 알 수있다. 그래서 내가 한 일은 빈 머신을 만들고 "깨진"Parent 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 파일을 열 수있었습니다 (Linux 설치에없는 공유 폴더를 참조하는 두 줄을 주석 처리해야했습니다.
zoechi

0

H:드라이브 의 이전 경로 이름 .vbox은 XML 파일 인 VM 의 파일에 간단히 지정할 수 있습니다 . 그렇다면 해당 파일의 사본을 저장하고 경로 이름을 새 경로 이름 ( 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를 다시 설정했습니다. VirtualBox VDI의 UUID 설정
jmathew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.