安裝Linux、windows的vhd系統指南

摘要:本文主要介紹把windows系統和Linux系統裝進vhd文件,並從移動硬盤引導啓動

Table of Contents

一、基礎知識

1、計算機啓動過程

二、安裝windows到vhd

方法一、使用wtga

方法二、使用vmware

附win10開機自動掛載虛擬磁盤的方法:

三、安裝Linux到vhd

1、使用grub2引導

2、製作vhd文件

3、自己製作initrd.img文件

四、安裝centos等到vhd

  方法一、

方法二

其他Linux

五、最後


準備:

1、移動固態硬盤一個,

2、VMware Workstation Pro ,下載地址

3、bootice,下載地址

4、xorbootu,下載地址及教程

5、wtga,下載地址及教程

6、ubuntu下載地址

7、windows下載地址

8、diskgenius軟件,百度下載

9、vhd文件擴容教程

10、打開efi分區的方法

diskpart
list volume 
select <num>  // 選擇對應efi分區(根據大小和分區類型分辨)
help set 
set ID=<guid> // 這裏guid是列出的普通類型對應的guid,其實就是它示例的最後一條
                // 之後最好改回去
assign
// 若沒彈出可能要重新插入,再去磁盤管理裏面手動分配驅動器號

一、基礎知識

1、計算機啓動過程

  參考文章https://www.jianshu.com/p/f11e6e5d5c81

  windows10的uefi + gpt大致啓動過程:通電 -> 讀取並展示所有可引導的存儲設備 -> 讀取第一個FAT格式的分區 -> 執行bootx64.efi -> 加載啓動管理器bootmgfw.efi並讀取bcd文件 -> 按bcd中信息和用戶選擇(只有一個就不用選)啓動對應操作系統 -> 一般是加載活動分區(c盤)的Windows/system/winload.efi文件

  win10的efi啓動 <==> gpt磁盤,BIOS啓動 <==> mbr磁盤

  gpt磁盤和mbr磁盤的區別就是gpt一定會多出一個efi分區保存分區信息,mbr則是保存在第一個扇區。

二、安裝windows到vhd

方法一、使用wtga

  使用wtga非常簡單,選擇ISO文件,目標磁盤,vhdx模式,uefi+gpt,600gb,其他默認就行了。

1、要注意要在本地磁盤系統上使用,若是移動磁盤則有可能提示創建vhd文件失敗而失敗。

2、對多種類系統不有好。若安裝Linux會使用其他引導程序,對efi分區產生改動,就會使原來的引導故障。

3、也不利於備份查看。無法直接用虛擬機進入系統中查看系統。

方法二、使用vmware

  1、首先創建vhd磁盤到移動硬盤:計算機管理 -> 磁盤管理 -> 操作 -> 創建vhd,30GB,固定大小,vhd後綴。

必須是固定大小,動態的引導要用win10專用程序,不然啓動時會提示vhd host space not enough。然後再初始化爲mbr磁盤,分配盤符。這裏也不能是gpt,因爲不好引導。

 2、打開vmware,創建自定義虛擬機: windows x64類型,BIOS啓動方式,物理硬盤(整個磁盤)。這裏物理硬盤選擇我們剛剛創建並掛載的磁盤,可以進磁盤管理找到對應的序號。

3、進入設置,選擇CD,指向安裝ISO包。

4、啓動,等待安裝,重啓,關機。再去磁盤管理分離vhd。

5、打開xorboot,第三個選項(uefi啓動序列) -> 導出xorboot.efi

6、新建菜單,類似下面這樣

菜單示例

7、OK,完成了,可以重啓,f12,選擇磁盤,選擇這個系統啓動了

8、優點:可以在另外一個系統,掛載磁盤,用BIOS啓動類型的的虛擬機登錄系統。只是需要手動擴容,無大礙。

9、可能開機總是彈出一個什麼優化提示,那是因爲屏蔽了本地硬盤,系統優化緩存沒地放,可以啓用一個本機盤就行。無大礙。

附win10開機自動掛載虛擬磁盤的方法:

1、手動點擊磁盤文件,彈出錯誤,需要去磁盤管理手動聯機並分配驅動器號。

2、保存下面爲bat文件

@echo off 

echo select vdisk file=A:\web.vhdx >vhdsel_GLAND     // 指定磁盤位置即可
echo attach vdisk >>vhdsel_GLAND 
echo online DISK >>vhdsel_GLAND 
echo attributes disk clear readonly >>vhdsel_GLAND  // 重複此段添加另一個磁盤

echo list disk >>vhdsel_GLAND 
diskpart /s vhdsel_GLAND 
del /f /q vhdsel_GLAND 
exit

3、控制面板 -> 管理工具 -> 任務計劃程序  (打開啓動任務)創建任務。

常規 -> 選擇用戶和不管用戶登錄都要運行 ,使用最高權限運行

操作 ->  添加bat文件

觸發器 -> 用戶登錄時或者開機時,看你需要

 

三、安裝Linux到vhd

安裝Linux到vhd是比較麻煩的,Linux不好的看教程都看不懂。我是搞整整兩天才成功,看了無數的教程。主要教程地址:

地址1地址2

這是無憂論壇的niumao大神寫的,這應該目前唯一可用的原創啓動vhd中Linux的教程,我找遍全網,基本是複製他的方法,在國外論壇是也是被推薦了這個網址,有興趣的兄弟可以去這個論壇研究一下。

我示例用的ubuntu,製作好了需要的兩個啓動文件了,有興趣的可以拿來直接用。下載地址https://pan.baidu.com/s/1xh6iwybAdIt2KjyJmet1hw,提取碼 rzih。裏面也包含教程和標準文件。

grub2啓動菜單寫法如下:

// 只要修改對應文件位置即可直接引導
menuentry 'ubuntu-18.10.vhd'  --class ubuntu  {
	insmod gzio
	insmod part_msdos
	insmod part_gpt
	insmod ext2
	insmod ntfs
	insmod probe
	insmod search
	search --no-floppy -f --set=aabbcc /ubt/ubt1810.vhd
	set root=${aabbcc}
	probe -u --set=ddeeff ${aabbcc}
	linux	/ubt/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff} kloop=/ubt/ubt1810.vhd kroot=/dev/mapper/loop0p1 
	initrd	/ubt/initrd.img-4.13.0-36-generic
}

1、使用grub2引導

從上面給出的地址下載,教程可以看這篇

製作好引導後放到對應的目錄下,最好使用xorbootu菜單,指向它的efi文件,以便和windows引導共存,目錄結構不能變(EFI/Boot/bootx64.efi 是寫死的)。

2、製作vhd文件

(1)新建vhd,固定大小20gb,vhd類型,掛載,打開VMware,新建類型爲ubuntu 64位(不能沒有64),BIOS啓動類型,磁盤使用物理磁盤,指向此整個磁盤。修改配置,CD爲ubuntu的ISO文件。開機

(2)製作過程中需要特別注意的一點是,一定不要出現邏輯分區,只有一個主分區就行。ubuntu16,若系統自動分區,會有swap這個邏輯分區,我當初就是這樣,踩了個大坑。這裏手動分區,分一個就夠了。ubuntu18,系統自動只有一個主分區,可以自動。最好使用diskgenius工具查看,若磁盤下只有一個盤就OK。手動分區,會遇到虛擬機屏幕分辨率太小,按鈕被隱藏的文件,建議去網上找樣圖,用tab鍵分。

(3)最好使用我製作的兩個文件引導此ubuntu.vhd,(initrd.img-4.13.0-36-generic和vmlinuz-4.13.0-36-generic),若成功則可下一步自己製作,這樣兼容性好很多。

   (4) 三個文件最好放同一目錄

若啓動失敗,報錯init問題,如not  init working found,那就可能是分區沒分好,啓動菜單寫錯了。

3、自己製作initrd.img文件

方法如下:

首先通過虛擬機進入你的ubuntu

①在終端安裝必要軟件 sudo apt-get install kpartx kpartx-boot util-linux dmsetup lvm2,若聯網卻提示找不到軟件,請

sudo apt-get update。最好分開安裝,dmsetup可能是dm-setup

② sudo gedit /usr/share/initramfs-tools/init 

把init裏面第30行的
mount -t tmpfs -o "noexec,nosuid,size=10%,mode=0755" tmpfs /run
修改爲
mount -t tmpfs -o "noexec,size=20%,mode=0755" tmpfs /run
就是刪除 nosuid, 選項。

③sudo gedit /usr/share/initramfs-tools/scripts/local ,用標準文件裏local的替換

④sudo gedit /usr/sbin/mkinitramfs 用標準文件裏mkinitramfs的替換

⑤sudo gedit  /etc/initramfs-tools/modules 

加入以下三行
loop
fuse
dm-mod

⑥ 編譯安裝ntfs-3g
附件ntfs-3g_ntfsprogs-2016.2.22.fixed 是已經修改好的ntfs-3g源碼.
對他手工編譯安裝.解壓到你的主目錄以後,打開一個終端.進入該目錄.依次執行以下命令:

./configure
make
sudo make install

⑦ sudo gedit  /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g 用標準文件裏ntfs_3g的替換

⑧生成:sudo /usr/sbin/mkinitramfs -o ~/initrd.img-XXXXXXXXX-generic  // 這裏xxxx請與/boot/裏對應的文件版本號保持一致

不出意外的話可以在home中找到生成的文件

(6)vmlinuz文件是/boot/下對應的那一個

(7)建議使用U盤傳輸文件,貌似無法在虛擬機和主機之間複製粘貼。方法:菜單欄 -> 虛擬機 -> 可移動設備 -> 你的u盤 -> 連接。可能需要重新插拔U盤,以連接。

(8)說明,我的標準文件是在niumao大神分享ubt-small.vhd中提取的,因爲他分享的文件不對(可能是版本問題),直接去啓動它的vhd,複製出來,替換,也是可以的。

四、安裝centos等到vhd

  方法一、

先製作好vhd文件,centos分三個區,不要有lvm分區,swap也分成標準分區(主分區),提取出上面ubuntu的lib/modules下的xxxxxx.generic文件夾(先壓縮再解壓),再放進centos的lib/modules/ 裏面。我也分享了一個可以直接用的https://pan.baidu.com/s/1Wkxs2C9RxX9D7OdyXL_Qag 提取碼:ls5l

上面的引導菜單隻需改對應文件和kroot=/dev/mapper/loop0p2(這個2應該改爲你的根分區“/”所在順序,若你分了三個主分區,根分區在中間就是2,使用diskgenius即可查看根分區的位置),下面貼出我的菜單(class可換可不換)


menuentry 'centos 7'  --class centos  {
	insmod gzio
	insmod part_msdos
	insmod part_gpt
	insmod ext2
	insmod ntfs
	insmod probe
	insmod search
	search --no-floppy -f --set=aabbcc /centos/centos7.vhd
	set root=${aabbcc}
	probe -u --set=ddeeff ${aabbcc}
	linux	/centos/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff} kloop=/centos/centos7.vhd kroot=/dev/mapper/loop0p2 
	initrd	/centos/initrd.img-4.13.0-36-generic
}

ps:centos不支持ntfs,所以U盤格式化爲fat即可,fat不支持那個文件夾中的數據類型,所以需要變爲壓縮文件。

若VMware中分辨率太低,不妨右鍵程序圖標,設置調整視圖屬性。

centos安裝時把軟件全鉤了也只需10g的空間,建議全鉤了,不然之後安裝就很麻煩,例如圖形界面。

因爲還需設置這個文件夾的權限爲755,新手建議用root用戶操作,默認755.

方法二

見分享教程fedora,是可以給centos用的,我試了,沒直接轉移一個壓縮文件方便,不介紹了。

其他Linux

與方法一一樣替換即可

五、最後

   目前這方面的教程比較稀少,我寫的也比較匆忙,不懂的兄弟可以找我QQ1147940842,如果覺得有幫助或者有不好的地方,還請留言,評論,感謝。

 

 

 

 

 

 

 

 

 

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