VBox 虛擬機完美遷移/複製(帶快照)

VBox 虛擬機完美遷移/複製(帶快照)


由於項目開發的原因,本人一直喜歡使用虛擬機,主要使用的虛擬機包括VBoxVMWare,所以就經常面臨虛擬機備份(這裏的備份不是指快照,而是把整個虛擬機鏡像(包括快照)進行壓縮之後保存)、拷貝、遷移等問題。

1. VMWare:

這對於VMWare虛擬機來說簡直是太簡單了,直接把虛擬機所在目錄進行整體備份/遷移就可以了(前提是你把所有的文件都放在同一個文件夾下),如下圖所示:

備份這整個文件夾之後,不管把這個文件夾拷貝到什麼地方(別的機器上也行),只要在VMWare中選擇【文件】->【打開】,打開該虛擬機的配置文件,既可以完美的帶快照遷移該虛擬機,如下圖所示:

2. VBox:

對於Virtual Box 可就沒有這麼簡單了,反正我之前陸陸續續搞了好久都沒有搞成功(估計都有好幾年了),但是最近因爲做項目的需求,又搞了一輪,又搞了將近一天的時間,竟然被我搞出來了,特意寫個博客記錄一下,以後還會經常用到。

2.1 預備知識

首先我們需要了解一下關於VBox虛擬機的預備知識,首先是虛擬機的鏡像文件/快照文件,我說的鏡像文件是指在創建虛擬機的時候創建的那個磁盤鏡像文件,如下圖所示:

在你創建虛擬機的時候你可以指定該文件放在什麼位置,如下圖所示(創建虛擬機的第二步):

其次是虛擬機的快照文件,一般是以快照文件的UUID命名,一個快照文件對應一個.vdi文件,如下圖所示:

快照文件的位置是在創建虛擬機的第一步指定的,如下圖所示:

按照上圖的配置所創建的虛擬機,它的快照文件就會在 C:\Users\ML\VirtualBox VMs\test1\Snapshots\ 目錄下。

最後,還有一個核心的文件,那就是虛擬機的配置文件,這個文件記錄着當前虛擬機的所有配置信息,包括快照,虛擬磁盤,虛擬機配置等,它所在的位置也是在創建虛擬機的第一步指定,在 C:\Users\ML\VirtualBox VMs\test1\ 目錄下,它包含兩個文件,一個是.vbox文件,另一個是.vbox-prev文件,核心文件是.vbox文件,如下圖所示:

2.2 虛擬機(帶快照)遷移至其它機器上

通常情況下,爲了方便虛擬機管理,我會把 2.1節中提到的文件都放在同一個目錄下,這樣一來,不管是備份還是遷移都很方便,如下圖所示:

遷移的時候,我就把這一整個目錄打包遷移到目標機器上,由於是在不同的機器上進行虛擬機遷移,因此不涉及到 鏡像文件的UUID相同的情況,因此,比較方便,把目標遷移(複製)過去之後,直接打開虛擬機的配置文件 .vbox 文件,修改一下里面關於路徑的幾個配置選項即可(一般只在配置文件的開頭處),也就是在配置文件中更新一下快照文件和虛擬機鏡像文件的路徑,如下圖所示;

然後在新機器上的VBox裏面點擊【控制】->【註冊】,選擇剛纔修改好的配置文件,打開即可。

2.3 虛擬機(帶快照)本機拷貝

本機拷貝虛擬機相對比較麻煩,因爲要涉及虛擬機鏡像文件UUID衝突問題,首先我們要把原來虛擬機的配置文件(.vbox文件等)、原始鏡像文件(.vdi文件)、快照文件拷貝到目標文件夾,我們現在就拿 Ubuntu_18.04_x64 爲例,複製一份,叫做Ubuntu_18.04_x64_2,如下圖所示:

進入該目錄,查看該目錄內部的文件信息如下所示:

2.3.1 修改鏡像路徑

首先要修改配置文件中的路徑,更新路徑,直接用VSCode/Nodepad++等文本編輯工具打開該配置文件,全部路徑替換,如下所示(路徑的表示方式最好用Linux下的路徑表示方式,也就是使用反斜槓,而不是雙斜槓):

總共有四個地方(替換之後記得保存),替換之後,如果直接去VBox虛擬機中註冊,則會由於虛擬機鏡像文件的UUID衝突導致註冊失敗,如下圖所示:

2.3.2 修改鏡像 UUID

這時候首先需要修改原始虛擬機鏡像的UUID,修改方法如下:在當前虛擬機目錄打開控制檯,然後執行如下命令:

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid Ubuntu_18.04_x64.vdi

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid Ubuntu_18.04_x64.vdi

該命令是VBox安裝目錄下的VBoxManage.exe程序執程序行的,中間的兩個選項表示設置鏡像的UUID,

該命令執行完之後可以看到該鏡像的UUID被修改爲:fb1614e7-eeeb-441e-b803-fdbdd8c70d0e,如下圖所示:

2.3.3 在配置文件中更新鏡像的 UUID

此時,需要再更新 .vbox 文件中的 UUID,把鏡像 Ubuntu_18.04_x64.vdi 的UUID更新爲剛纔修改之後的值,修改前如下:

修改後(使用全部替換功能,把出現這個值的地方全部替換):

 

2.3.4 屢清快照之間的父子關係

快照與鏡像文件之間的關係是一種數(Tree)狀關係,原始的磁盤鏡像文件就是這棵樹的根節點(在我們這裏就是:Ubuntu_18.04_x64.vdi 這個文件),每生產一個快照,相當於創建一個孩子節點,我們可以根據快照的修改日期來區分它們的父子關係(當然,還可能會有兄弟關係,這裏我們先不討論),如下圖所示:

修改日期比較早的是父節點:{24751e29-44e9-4716-b483-6938d399486c}.vdi,我們把它簡稱爲:{24*}.vdi,比較晚的是孩子節點:{6cf833b6-5d47-499b-bef3-53eac600c5e8}.vdi,我們把它簡稱爲:{6c*}.vdi,然後再加上根節點,就可以知道它們的父子關係了,如下圖所示:

當然,也可以從還沒有備份之前在VBox看到它們的父子關係,在VBox中的【管理】->【虛擬介質管理】中展開虛擬介質即可看到,如下圖所示:

2.3.5 修改快照UUID

由於每一個快照都UUID都會和原來的快照UUID重複,因此,需要修改各個快照的UUID,並記錄它們的UUID,在快照所在的目錄下打開控制檯,修改的命令如下:

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid "{24751e29-44e9-4716-b483-6938d399486c}.vdi"

修改之後,{24751e29-44e9-4716-b483-6938d399486c}.vdi 的UUID就變成了:0a605239-2e2e-480f-a489-62d95fdb2ba9,而{6cf833b6-5d47-499b-bef3-53eac600c5e8}.vdi 的UUID就變成了:ca96d49c-062e-4488-b57a-b3c6fad6aa24,如下圖所示:

我們現在把這兩個新的快照按照新的UUID重命名一下,重命名之後如下圖所示:

我們把 {0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi 簡稱爲: {0a*}.vdi,把 {ca96d49c-062e-4488-b57a-b3c6fad6aa24}.vdi 簡稱爲:{ca*}.vdi,它們的父子對應關係 理論上 應該如下:

實際上,這兩個快照內部記錄的父節點的UUID還是原來的,需要修正過來,在2.3.6節中修正。

修改了快照的UUID,現在就需要更新它在配置文件中的UUID值了,也是使用批量替換的方法,把兩個快照的UUID批量更新,如下圖所示:

2.3.6 修改快照的父節點UUID

2.3.2 節中我們已經修改了根節點的UUID,現在對於{0a*.}vdi,它的內部記錄的父節點的UUID還沒有變,因此,需要我們自己更新它們內部的父節點的UUID,首先我們可以使用如下命令來查看快照當前的父節點的UUID:

C:\MyProgramFiles\VBox\VBoxManage.exe showhdinfo "{0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi"

執行命令之後的結果如下圖所示:

然後我們通過如下命令來修改它的父節點UUID:

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethdparentuuid "{0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi" fb1614e7-eeeb-441e-b803-fdbdd8c70d0e

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethdparentuuid {ca96d49c-062e-4488-b57a-b3c6fad6aa24}.vdi 0a605239-2e2e-480f-a489-62d95fdb2ba9

這裏的父節點的UUID是根據 2.3.5 節中的最後一個圖的父子關係決定的,設置結果如下圖所示:

2.3.7 修改.vbox配置文件

最後需要再次修改配置文件,把以下這行的UUID改一下(有關鍵字 Machine 的那行):

只要跟原來不一樣就可以了,比如,我會改最後一位,把它改成 2或者其它值,反正是這個UUID不能用,自己隨意編一個新的UUID即可,我修改過後的配置文件如下:

2.3.8 註冊虛擬機

最後一步就是註冊虛擬機了,在VBox中打開【控制】->【註冊】,打開註冊窗口,定位到新虛擬機的配置文件處:
P:\VBox\Ubuntu_18.04_x64_2\Ubuntu_18.04_x64
打開對應的配置文件即可:如下圖所示:

虛擬機複製成功,可以發現新的虛擬機已經出現在VBox中了,如下圖所示:

以及快照信息:

3. 總結

最後總算是寫完這篇博客了,感覺還是比較有用的,中間步驟也比較多,比較繁瑣,特別是本機拷貝帶快照的VBox虛擬機的時候,步驟很多。但是,如果不帶快照拷貝的話,就很簡單了,直接複製虛擬機鏡像文件就可以了,配置文件都不需要複製,然後新建一個虛擬機,磁盤選擇已有磁盤即可,非常方便。

當然,如果嫌麻煩,也可以把快照刪除了再本機拷貝虛擬機,因爲這樣很方便。

4. 附錄

還有另一種方式,那就是導出虛擬機文件,【管理】->【導出虛擬電腦】,如下圖所示:

當然,這種導出方式比較通用,導出的鏡像對 VBoxVMWare 都可以使用。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章