本节学习目标是将win10安装到VHDX虚拟磁盘上,而不是安装到实体硬盘上。
这样做的好处是:
- 系统迁移非常方便,只要把对应的vhdx文件coyp出来就行了。
- 可以在同一个电脑上拥有多个windows,可分别搭建不同的环境。
- 可以很方便的将多个系统迁移到同一个hyper-v上。
目前看到的缺陷:
- 机器启动后能看到物理机的磁盘以及里面的内容,有误操作删除其他系统的可能性
制作PE镜像
Windows PE全称为 Windows Preinstallation Environment(预安装环境)。
首先在旧电脑上下载并依次安装Windows ADK和Windows ADK的Windows PE加载项
安装完成后以管理员身份打开开始菜单的Windows kits-->部署和映像工具环境。
在控制台中输入以下命令:
copype amd64 c:\WinPE_amd64
dism /mount-image /imagefile:"c:\WinPE_amd64\media\sources\boot.wim /index:1 /mountdir:"c:\winpe_amd64\mount"
makewinpemedia /iso c:\winpe_amd64 c:\winpe_amd\WinPE_amd64.iso
以上三条命令:
创建VHDX
在命令提示符下运行以下命令:
diskpart 进入diskpart程序
create vdisk file=c:\windows.vhdx maximum=25600 type=fixed 创建一个25GB固定类型的虚拟机磁盘
attach vdisk 将虚拟机磁盘附加到主机上的磁盘控制器
create partition primary 创建分区
fromat quick label=vhdx 快速格式化并将卷标设置为vhdx
assign letter=v 为此分区设置驱动器号(即盘符)为v
exit 退出diskpart
将Windows映像应用到VHDX
使用以下命令:
dism /apply-image /imagefile:e:\sources\install.esd /index:1 /applydir:v:\
以上命令是将win10安装光盘中的install.esd应用到前面创建的硬盘主分区上。(注意,前面创建时为虚拟盘的主分区分配的盘符是v)
分离VHDX,将其复制到网络共享
在旧电脑上运行以下命令将虚拟磁盘分离:
diskpart 进入diskpart程序
select vdisk file=c:\windows.vhdx 选择上面建立的虚拟磁盘
detach vdisk 分离该虚拟磁盘
exit 退出diskpart
将VHDX复制到网络共享或可移动存储器。以下命令将驱动器号N映射到网络共享,为VHDX创建目录,然后将VHDX复制过去:
net use n: \\server\share\ 将网络共享\\server\share映射到本地N盘
md N:\VHDs 为虚拟机磁盘创建目录
copy c:\windows.vhdx n:\vhds\ 将虚拟磁盘复制到网络共享中
准备新电脑
用PE启动新电脑,启动后直接打开了命令行窗口,在其中运行以下命令:
diskpart 进入diskpart程序
select disk 0 选择0号磁盘
convert gpt 将磁盘转换为gpt格式
create partition efi size=100 创建一个100MB的efi分区
format quick fs=fat32 label="efi" 以FAT32格式快速格式化并将卷标设置为efi
assign letter="S" 为其分配盘符S
create partition msr size=128 创建一个128MB的Microsoft Reserved(MSR)分区,不用格式化,不用给它卷标
create partition primary 将剩余空间创建成一个主分区
format quick fs=ntfs label="main" 以NTFS格式快速格式化此分区,并设卷标为main
assign letter="M" 为此分区设置驱动器号为M
exit 退出diskpart
完成以上动作之后,应该可以进入s:盘和m:盘,只是此时这两个盘里面什么都没有。
连接到网络驱动器或存储位置:
net use n: \\server\share
将前面步骤中复制到网络驱动器的VHDX文件复制到新电脑的主分区:
copy N:\VHDs\windows.vhdx m:
附加VHDX
现在仍然还在WinPE,将VHDX附加到新电脑:
diskpart 进入diskpart程序
select vdisk file=M:\windows.vhdx 选中虚拟磁盘
attach vdisk 将虚拟磁盘附加到系统中
list volume 查看卷列表
select volume 3 选择第三个卷
assign letter=v 为该卷设置盘符v
exit 退出diskpart程序
添加启动项
经过以上操作,VHDX的盘符为V,物理硬盘的efi分区盘符为S。在命令行窗口执行以下命令:
v:\ 进入V盘,即VHDX虚拟盘
cd v:\windows\system32 进入虚拟盘的windows\system32目录
bcdboot v:\windows /s S: /f UEFI 使用启动文件创建和修复工具,将UEFI固件写到S盘
拔掉WinPE盘,重启电脑,应该会进入新系统安装过程。
2022/1/15
按以下步骤实作:
- 制作PE盘,并将win10安装光盘中的install.wim复制到PE盘根目录
copype amd64 c:\WinPE_amd64
dism /mount-image /imagefile:"c:\WinPE_amd64\media\sources\boot.wim /index:1 /mountdir:"c:\winpe_amd64\mount"
makewinpemedia /ufd c:\winpe_amd64 e: e:为U盘的盘符
- 使用PE盘启动新电脑,然后对新电脑分区
diskpart
select disk 0
convert gpt
create partition efi size=100
format quick fs=fat32 label="efi"
assign letter="s"
create partition msr size=128
create partition primary
format quick fs=ntfs label="main"
assign letter="m"
- 在新电脑主分区中创建VHDX虚拟磁盘
create vdisk file=m:\windows.vhdx maximum=25600 type=fixed
attach vdisk
create partition primary
format quick label=vhdx
assign letter=v
exit
- 将Windows映像应用到VHDX虚拟磁盘上
dism /apply-image /imagefile:c:\install.wim /index:1 /applydir:v:\ PE盘启动后,U盘的盘符要自己确定,此例为c:
- 添加启动项
v:\
cd v:\windows\system32
bcdboot v:\windows /s s: /f uefi
完成后能进入系统。
按以下步骤实作,在一个硬盘上手动安装freebsd和win10,利用uefi实现单机单盘双系统。
首先安装win10:
diskpart 进入diskpart程序
select disk 1 选择目标磁盘,磁盘编号从0开始,本次实验所用电脑有三块硬盘,此次仅在第二块硬盘做两个系统;
可以使用list disk命令查看磁盘列表
clean 清除此硬盘分区,此例中类似在FreeBSD下执行gpart destroy -F ada1命令
convert gpt 相当于在FreeBSD下执行gpart create -s gpt ada1命令
create partition efi size=100 创建一个100M的efi分区
format quick fs=fat32 label=winefi 将efi分区格式化成FAT32格式
assign letter=v 给efi分区分配一个盘符v
create partition msr size=128 创建一个128M分区用于系统恢复
create partition primary size=50000 创建一个50G分区,用于安装win10,size的值以M为单位,但不接受G、T这样的后缀
format quick fs=ntfs label="win10" 将其格式化为ntfs格式,并指定卷标为win10
assign letter=w 给此分区分配一个盘符w
exit 退出diskpart
下面一行将安装映像文件解压至w:盘,即上面划出来的50G那个分区
dism /apply-image /imagefile:d:\install.wim /index:1 /applydir:w:\
以下是用win10的bcdboot工具将uefi启动代码传递到v:盘,即上面创建的efi分区
w:\
cd w:\windows\system32
bcdboot w:\windows /s v: /f uefi
exit 退出PE,系统会重启
重启后BIOS还找不到UEFI,所以要先进入BIOS,手动指定。
待win10安装完毕后,用FreeBSD安装盘启动电脑,进入shell模式。
gpart add -t efi -s 260m -a 4k ada1 创建一个260M的efi分区,用来保存FreeBSD的efi文件
gpart add -t freebsd-swap -s 2g -a 4k ada1 创建一个2g的交换分区
gpart add -t freebsd-zfs -s 50g-a 4k da1 创建一个5g的zfs分区
newfs_msdos -F 32 -c 1 /dev/ada1p4 将efi分区格式化为FAT32格式
mount -t msdosfs /dev/ada1p4 /mnt 将efi分区挂载到/mnt目录下
mkdir -p /mnt/efi/boot 创建用于保存efi文件的目录
cp /boot/loader.efi /mnt/efi/boot/bootx64.efi 将安装盘上的efi文件复制到硬盘的efi分区指定的目录
umount /mnt 卸载掉efi分区
mkdir /tmp/zfs 创建一个用于挂载zfs池的目录,网上有文章说建到/mnt,但实测使用/mnt会遇到只读问题
zpool create -o altroot=/tmp/zfs zmain /dev/ada1p6 创建存储池
以下将系统文件解压到存储池
cd /usr/freebsd-dist
tar xvzfp base.txz -C /tmp/zfs/zmain/
tar xvzfp kernel.txz -C /tmp/zfs/zmain/
tar xvzfp kernel-dbg.txz -C /tmp/zfs/zmain/
tar xvzfp lib32.txz -C /tmp/zfs/zmain/
tar xvzfp src.txz -C /tmp/zfs/zmain/
以下创建/修改一些关键文件
vi /tmp/zfs/zmain/etc/fstab
/dev/ada1p4 /boot/efi msdosfs rw 2 2
/dev/ada1p5 none swap sw 0 0
vi /tmp/zfs/zmain/etc/rc.conf
zfs_enable="YES"
vi /tmp/zfs/zmain/boot/loader.conf
zfs_load="YES"
zfs umount -a 卸载掉所有挂载的zfs文件系统
zfs set mountpoint=/ zmain 指定zmain文件系统挂载到根
reboot 重启
重启后进入BIOS,修改UEFI启动列表即可。
以上仅仅是实验这种操作的可行性,实际使用中严重不推荐这样做双系统。
经测试,以上步骤中可以不用给FreeBSD单独划分EFI分区,将FreeBSD的efi文件放到Win10的EFI分区中也可以。
需要注意的是,win10的efi文件也是bootx64.efi,可以将两个efi文件分别重命名为win10.efi和fb13.efi,这样在BISO中设置启动顺序的时候可以更方便地选择对应的efi文件。
回主站