前两天上车了金山云190/年的廉价云主机, 本想装个Windows Server玩玩的, 然而金山云给的系统不知道因为何原因没法开启防火墙, 这使得很多依赖于防火墙的服务无法启动. 最后实在没有办法, 本着 重启重装重买 的原则走到了"重装系统"这一步.
解决方案
最终方案使用 微软原生镜像 + 硬盘安装 + Windows Boot Manager/MBR引导 的方式安装新系统. 本来尝试了使用 Linux + dd 的方式, 失败(可能是因为我操作有误). 最终决定还是自己手建引导, 用硬盘安装算了.
注意, 因为需要使用BCD引导, 因此本文记录的操作只适用于Windows系统的服务器, 就是说, 在 Windows Server服务器上重新安装 Windows Server.
PS: Linux换Windows也很简单, 自己写Grub2引导就可以了. (其实dd
也行的)
准备工作
-
Windows Server 镜像
可以到这里申请试用: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2019
-
VirtIO驱动
金山云用的是 KVM虚拟机, 需要安装专门的虚拟设备驱动. VirtIO驱动下载链接如下(Fedora版):
-
(可选)Bootice
不适用Bootice的话, 可以直接使用
bcdedit
命令. 也不知道有没有官网或者项目Release之类的, 我是在Softonic下载的(看上去就像是个国外版的ZOL下载): https://bootice.en.softonic.com/ -
(可选)Dism++
主要是不用自己敲命令行. 下载Dism++
操作
1. 处理镜像
因为是在 KVM 上安装系统, 由于原生镜像缺少 VirtIO驱动, 所以安装时是找不到硬盘的, 因此需要先注入驱动.
这里处理的"镜像"是Windows的安装部署镜像 WIM(Microsoft Windows Imaging Format), 不是下载的ISO, 因此需要先从 ISO 里提取出 WIM . 我是在云主机上直接操作的, 但是不知为何金山云提供的Windows Server在挂载已下载的 ISO 镜像时提示"磁盘格式错误"(可能是压缩格式不支持?), 最终我使用了 Bandizip 来解包 ISO. 解包后准备注入驱动.
有现成的驱动注入教程: https://hazx.hmacg.cn/server/windows-iso-add-driver.html, 命令行的, 不需要 Dism++.
当然我还是喜欢GUI的啦. Dism++ 官方的离线注入教程点此可至. 只需要建立一个空目录做挂载点> 文件/挂载镜像> 选"驱动管理"> 选"添加驱动"> 找到下载好的 VirtIO 驱动并注入> 文件/保存镜像> 选择"直接保存" 就可以啦.
当然这里还有那么几个地方要注意一下,
- Boot.WIM 是安装系统时的那个"安装向导", 如果它没有 VirtIO驱动, 那么安装系统时会出现"找不到硬盘"的现象. 因此务必为其注入 VirtIO驱动套件中的 vioscsi和viostor驱动(其它驱动也注入吧, 虽然可能没太有用). 简单说来就是: Boot.wim 和 Install.wim 都得注入驱动!
- 在 Fedoras 提供的 VirtIO驱动中包括了很多驱动文件, 其文件说明如此所述, 酌情注入\择优注入.
2. 备份
将服务器中必要的文件备份一下, 其中在金山云的云主机中, C:\boot.bat
(好像是这个路径)里有KMS激活需要的信息, 建议备份.
当然Windows安装程序会自动将老系统的文件放到 Windows.old 目录里, 不备份也问题不大.
3. 磁盘分区 + 建立引导
按理说, 磁盘分区应该是多余的步骤. 因为Boot.WIM是加载到内存里的, 我们只要能把Install.WIM也加载到内存里不就可以了嘛. 可是怎么把Install.WIM放到内存里呢? 好像是个问题.(也许可以用Grub4DOS呢)
为防意外, 还是建立分区吧, 又不麻烦. "计算机管理"里选"磁盘管理", 对着C盘右击选"压缩卷", 大小能容纳下 Install.wim 即可(或者再大一些也行哈), 之后"新建简单卷", 一气呵成.
把 Install.wim 放到新建的分区里 (我是直接把整个ISO提取到新分区了, 省事). 之后打开 Bootice, 开始配置引导程序.
喜欢命令行的话, bcdedit.exe /?
冲冲冲. ref: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdedit-command-line-options
- Bootice打开> 选择"BCD编辑"> "当前系统BCD"> 点击"智能编辑模式":
- 选择"新增"> "新建win7/8/8.1入口" (图中红色荧光笔标记);
- 选择"Ramdisk"> 选择 Boot.WIM 所在的磁盘和分区 (图中蓝色荧光笔标记); 填写 Boot.wim 的路径和相应的SDI文件的路径; (图中绿色荧光笔标记)
- 填写引导加载器中显示的标题/ 引导加载器的可执行文件(
\windows\system32\boot\winload.exe
)/ 系统根目录 (图中绿色荧光笔标记) - 勾选"检测硬件抽象层"和"启动到WinPE" (图中蓝色荧光笔标记)
- 点"保存当前系统", 待其提示"修改成功"后关闭此编辑器
- (暂时未清楚此步骤的必要性) 同上述步骤1, 但此步点击"高级编辑模式"
-
点击刚才新建的启动加载项, 检查其"应用设备"和"操作系统设备"是否为"以盘符开头的boot.wim的完整路径", 如果不是的话, 双击其编辑. (如下图中黄色荧光笔标记)
-
检查其启动时的附加参数, 在我的系统里是叫做"
ramdiskoptions
". (如下图中蓝色荧光笔标记) -
在左侧树形目录里点击"
ramdiskoptions
"切换到附加参数的编辑页 -
如上图示, 若SDI设备为
[boot]
, 则单击[boot]
, 将其修改为SDI文件所在的磁盘路径(如下图示)本以为这一步可能是不需要的, 但是实测发现如果不进行这一步的话, Windows Boot Manager会报"启动文件丢失"的错误. 至于原因, 可能得去查看Windows Boot Manager/BCD 中关于
[boot]
和ramdiskoptions
的相关文档了.
4. 重启服务器, 执行安装
打开云主机的管理面板(例如, 金山云的管理控制台)> 打开tty(在金山云的管理控制台里点击"连接实例")> 待进入tty界面后设法执行重启> 等待操作系统进入引导加载器界面
在引导加载器(Windows Boot Manager)中选择刚才新建的启动加载项, 按下回车. 按照提示执行后续安装程序即可.
5. 安装驱动
如果在上述步骤中未注入必要的驱动(例如"网卡驱动"), 将刚才下载的 virtio驱动安装即可
PS: 驱动安装命令: pnputil /?