通过ProxmoxVE制作kubevirt可用的WIN镜像
https://github.com/ILLKX/Windows-VirtIO
下载带virtio的虚拟机镜像
然后借鉴 https://www.spiritlhl.net/guide/pve/pve_windows.html 开设虚拟机,到图形化安装后即可,不要配置网络
在虚拟机内需要设置一个bat脚本,设置系统启动后执行,脚本的内容是
1
2
3
4
|
$arpRetryCountPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
Set-ItemProperty -Path $arpRetryCountPath -Name ArpRetryCount -Value 0
sleep 5
ipconfig /renew
|
不这么设置的话虚拟机在kubevirt中的dhcp获取不到正确的ip地址。
经验证,Win2008
和Win7
及更早版本的网络设置无效,注册表修改仅对更高版本系统有效。
设置完成后,需要重启电脑,手动执行命令的话是无法生效的,会报错获取到的IP地址冲突。
如果启动后发现有连接但是网不通,查看ipconfig
后是dhcp自动获取到了ip,但ip与kubevirt配置中的ip不同,需要执行
1
2
|
ipconfig /release
ipconfig /renew
|
可重新进行dhcp的ip获取,然后应该网络就被正确设置了。
安装预制的工具
在导出镜像之前,安装所需的工具到C盘,再进行导出
比如安装 Visual Studio 在安装时要将安装的路径选到C盘下,默认就是C盘的不要修改
设置虚拟机C盘自动扩容和D盘自动创建
设置虚拟机C盘自动扩容和D盘自动创建
由于原先系统制作的时候预定义的硬盘为20G,实际开设过程中需要增大硬盘大小,否则会出现C盘使用一段时间后磁盘写满的情况,所以需要在开设的时候指定扩容硬盘。
但这样依然没有自动扩容硬盘到C盘,进入后可以看到有未分配的硬盘,同时如果有挂载数据盘,且这个数据盘未初始化未有分区的话,需要进行自动格式化、分区创建和盘符创建。
C盘扩容的同时,由于使用的是ISO制作的虚拟机镜像,会存在恢复分区,才可以使用以下内容
1
2
3
4
5
6
7
8
9
|
for /f "tokens=2 delims=:" %%i in ('wmic logicaldisk where "DeviceID='C:'" get DeviceID ^| find ":"') do set drive=%%i
echo select disk 0 > diskpart_script.txt
echo list partition >> diskpart_script.txt
echo select partition 3 >> diskpart_script.txt
echo delete partition override >> diskpart_script.txt
echo select partition 2 >> diskpart_script.txt
echo extend >> diskpart_script.txt
diskpart /s diskpart_script.txt
del diskpart_script.txt
|
如果C盘分区后面没有跟着恢复分区,直接跟着未分配的分区,那么使用
1
2
3
4
5
6
7
|
set "dptemp=%temp%\extend_c_drive.txt"
> "%dptemp%" (
echo select volume C
echo extend
)
diskpart /s "%dptemp%"
del "%dptemp%"
|
就行了
需要在导出成kubevirt用的qcow2镜像之前创建一个bat脚本,创建定时任务在系统启动后执行。
下面这个脚本C盘分区扩容后面部分的内容,就是挂载了数据盘,初始化格式化创建D盘盘符的脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@echo off
setlocal
net session >nul 2>&1
if %errorlevel% neq 0 (
pause
exit /b
)
for /f "tokens=2 delims=:" %%i in ('wmic logicaldisk where "DeviceID='C:'" get DeviceID ^| find ":"') do set drive=%%i
echo select disk 0 > diskpart_script.txt
echo list partition >> diskpart_script.txt
echo select partition 3 >> diskpart_script.txt
echo delete partition override >> diskpart_script.txt
echo select partition 2 >> diskpart_script.txt
echo extend >> diskpart_script.txt
diskpart /s diskpart_script.txt
del diskpart_script.txt
set "dpscript=%temp%\init_d_disk.txt"
> "%dpscript%" (
echo select disk 1
echo attributes disk clear readonly
echo clean
echo convert gpt
echo create partition primary
echo format fs=ntfs quick
echo assign letter=D
)
diskpart /s "%dpscript%"
del "%dpscript%"
|
在 设置 – 控制面板 – 计划任务 – 创建基本任务 – 当前用户登录时启动任务(L) – 选择这个bat程序文件 – 创建任务
开机自启程序
类似上述操作,事先查找到要开机自启动的桌面的程序路径,右键点开图标的属性(R)
,复制粘贴属性(R)
中的目标(T)
的地址,替换下面的"路径"
为对应的路径
1
2
3
|
@echo off
setlocal enabledelayedexpansion
start "" "路径"
|
取消用户登录密码自动登录
注册表编辑器打开
1
|
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device
|
这个地址,将DevicePasswordLessBuildVersion的值改为0
然后打开控制面板,打开用户账户,或直接搜索栏搜索netplwiz
,或WIN+R
输入netplwiz
。
将要使用本计算机,用户必须输入用户名和密码取消勾选。
然后会弹窗要求输入当前用户的密码,输入后点确认就设置成功了。
系统如果重启后不需要输入密码直接进入桌面就证明成功了。
取消开机弹出服务器管理器
服务器管理器右上角 “管理”—“服务器管理器属性”
在弹出的选项卡内,把“在登录时不自动启动服务器管理器”前面的对钩打上,确定
再次重启服务器进行测试,发现不会弹出了。
导出最终镜像
确保在虚拟机所在的节点的机器上存在qemu-img
命令
1
2
|
which qemu-img
qemu-img -h
|
如果不存在需要进行下载。
然后需要先在平台上将虚拟机关机,避免进程占用文件。
然后在部署机执行
1
2
|
qm stop 100
qm config 100
|
查询挂载盘所在地址,然后导出到当前路径
1
|
qemu-img convert -O qcow2 /var/lib/vz/images/100/vm-100-disk-0.qcow2 /root/win2022.qcow2
|
导出后执行
1
|
qemu-img info /root/win2022.qcow2
|
可查看文件大小和信息