开篇废话
这篇文章大概是记录一下我在 PVE 中做 Windows 系统模版的时候遇到的一个小问题,大概就这样。
核心点就是 Unattend.xml 文件的编写。
然而在这篇文章中主要是讲如何挂载 PVE 的虚拟机磁盘
正文
在 PVE 中挂载模版盘
如果不是 PVE 那么跳过此部分,此处为已经转换成模版盘的挂载情况,当然其他方式的也可以参考就是了,部分文件名称不太一样而已。
此处其实关机打个快照是最方便的方案,不过都克隆了就所谓了,懒得改了。
警告在没有其它 Linked Clone 的情况下我们还是可以偷偷修改里面的文件,如果有 Linked Clone 的虚拟机了的话,一般情况下就不推荐修改而是再 clone 一份。
执意要改翻车了不要来找我
首先安装依赖:
apt install kpartx ntfs-3g
当然不用
kpartx
自己手算分区的 offset 也是可以的,此处不提供计算方式。
ntfs-3g 是肯定要的(或者找下其它的)有了这些我们才可以在 Linux 偷偷挂载 NTFS 分区。
在基于 LVM 的 PVE 中,虚拟机的磁盘映像在 /dev/mapper
里,对着 id 找,如图所示,模版映像的虚拟磁盘名称会变成 pve-base--200--disk--0
而通常情况下的名称为 pve-vm--200--disk--0
如果是删掉 lvm 用 qcow2 应该也差不多,只是磁盘路径不一样而已。
cd /dev/mapper
ls | grep base
如果 base 磁盘没有出现,那么在 pve 里执行一次 clone 操作就出现了。
然后我们使用 kpartx 来进行拆分分区操作:
kpartx -av /dev/mapper/pve-base--200--disk--0
然后挂载你觉得像 Windows 系统分区的盘符:
mount /dev/mapper/pve-base--200--disk--0p2 /mnt
空间紧张的话也可以把 swapfile.sys
pagefile.sys
给删了,我是没有测试过
然后然后去添加 Unattend.xml 文件,也就是下一章的内容。
相关命令实践:
Unattend 自动值守
Unattend.xml 是 Windows 系统的自动化配置文件,路径为 /Windows/Panther/Unattend.xml
我们可以在这里添加一些自定义的配置,比如自动登录,自动安装等等,也可以设置系统运行什么 cmd 之类的,也可在 OOBE 过程中运行些其它程序,当然在本文最主要部分是拿来跳过用户创建过程。
此处是我成功跳过 oobe 用户创建的 Unattend.xml 可以按需使用:
此处为 WIndows 10 x64 下测试成功的文件
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
<ProtectYourPC>1</ProtectYourPC>
</OOBE>
</component>
</settings>
</unattend>
(32位系统 把 amd64 改成 x86 应该就可以用了)
(用 nano 或者 vim 直接把上面的内容粘贴进去)
其中
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
是必要的部分。
此部分不再作解释翻译,都是简单英文。
在 PVE 中卸载磁盘
此部分也要单独说一下,一般套路就这样
cd
umount /mnt
kpartx -d /dev/mapper/pve-base--200--disk--0
sync
就可以了。
一般来说不卸载都可以,但还是有点怕
效果
总结
这次折腾对 Windows 模版的折腾还是有点了解了,大概知道怎么缝合 Unattend.xml 自动应答文件,应该也有一些生成工具可以生成这些配置,不过暂时需求不大就没去搜索了,另外 DISM++ 似乎也有一些设置可以干预 OOBE 过程?要用到的时候再来查吧。
然后大家都自己的折腾组合,我们有很多做模版方案,我的直接挂载改模版方案还是太灵了,学习以下综合知识来玩更好点:
- 挂载 & 卸载虚拟磁盘
- PVE 快照的使用
- Sysprep
- Unattend
- dd 手动克隆硬盘
如何使用搜索引擎
其中虚拟机打快照可以极大地节省我们测试 Unattend.xml 的时间,意识到这点折腾的体验就好很多了。
最后不要在生产环境玩这个,老老实实 clone 一份新的得了,不要作死
完