创建一个 Windows To Go 工作区

· 549 words · 3 minute read

这是一篇从前博客迁移来的文章。

tags:
- Windows 
categories:
- 搞电脑

Thumbnail

#

May. 22 / 2019 Update: 辣鸡 M$ 把这个功能扔了草,source: https://docs.microsoft.com/en-us/windows/deployment/planning/windows-10-1903-removed-features#features-were-no-longer-developing

本文可以教你给自己 U 盘创建一个便携式的 Windows To Go (以下简称 WTG)。我们将会使用 VHDX 格式存储系统镜像。不懂相关知识也没关系,跟着教程走就好了,必要知识会涵盖在里面。

为什么不用第三方工具? #

本文除了分区以外没有使用第三方工具,原因如下:

  • 某些第三方工具并非纯净。详情见引用 1 底部。

  • 自己动手可以学到更多知识

  • 自己动手可定制性更强

基础知识 #

Windows To Go (WTG) #

Windows To Go 可以让你把 Windows 装到一个 USB 里进行便携式使用。Windows 10 Pro 内置了一个创建向导,不过对 U 盘有诸多要求,笔者的 U 盘无法满足这些要求,所以无法使用。

VHD (X) #

VHD 格式是一种虚拟磁盘格式,我们用它来存储 WTG 系统档案。使用 VHD 而不是直接把系统存进 U 盘分区有以下几个好处:

  • (看上去)创建时间快一点

  • 方便备份和迁移

  • 强迫症福音

VHD 可以选用固定大小和动态大小。

VHD 差分 #

VHD 差分是 VHD 一个很重要的功能,简而言之它就是 VHD 的 “版本控制”。透过差分,可以达到下列目的:

  • 快速备份和回滚

  • 保护母 VHD

  • 基于一个母盘同时进行多份修改(不适用于 WTG)

如果你学过 Docker,你应该更容易理解这个概念。“差分” 就是对母盘做一个 “影子”,所有新的修改都会写入这个 “影子” 里,并保持母盘只读。这个 “影子” 暂且叫它 “子盘”。子盘和母盘强关联,一旦母盘修改子盘就无法使用了。

WTG 会引导一个你设定好的母盘(大概),所以在制作差分的时候需要修改母盘的名字,然后差分子盘,子盘的名字需要保持和原先母盘名字不变才能引导。

具体步骤示例:

C:> diskpart
DISKPART> create vdisk file=xxx.vhd parent=parent.vhd

这样就创建成功了,记得把母盘设置为只读。子盘一开始会非常小(4M),随着修改被写入会逐渐增大。如果需要回退可以随时修改文件名来指定原来的盘。

开始操作 #

基本概念已经阐述完了,下面说一下需要的材料:

  • 一台有管理员权限的 Windows 电脑。笔者是 Windows 10 Pro。

  • 一个高速 U 盘,最好是 SSD。U 盘性能对 WTG 的速度有着至关重要的影响。 注意:这个 U 盘会被格式化。

  • 一个 Windows 系统镜像,笔者使用 Windows 10 Pro 镜像。

  • 一台支持 UEFI 的电脑。(我个人不会操作 Legacy)

  • DiskGenius 等分区工具。

稍候,我们会逐步创建:

  • 一个空白 VHD(X),笔者是 VHDX 动态大小

  • 2 个 U 盘分区以及 GPT 分区表

  • 引导分区

0x00 创建 VHDX #

打开 计算机管理(Computer Management),左侧打开 磁盘管理(Disk Management):

Computer Management

出来后右键磁盘管理,如果创建 VHD(Create VHD) 是灰色的,就在右侧分区点几次再试试,原因未知。

填写参数:

  • 位置: 暂时放在电脑硬盘,因为这样最快。

  • 大小:笔者是 45G

  • 格式,笔者是 VHDX`

  • 类型,笔者是动态大小

创建完之后如果没有挂载的话手动挂载一下,然后右键磁盘,选初始化 (Initialize Disk):

初始化

之后选 GPT 分区表。

最后右键未使用空间,点新建简单分区(New Simple Volume):

New Simple Volume

一路 Next 即可,确保文件系统是 NTFS。

之后按照默认选项会分配盘符并挂载,打开资源管理器看看多了分区没有。

至此,VHD 准备完毕。

0x01 准备 U 盘 #

打开分区软体,不同软体操作方式不一样,所以不多说。总之操作步骤:

  • 如果不是 GPT 分区表,重建。

  • 删除所有分区

  • 创建 100M ESP 引导分区,设定盘符。Win 应该会占 70+M 的引导,如果单系统 100M 足矣。

  • 创建 NTFS 分区存储镜像,比你的 VHD 大小大一点就行。设定盘符。

  • 如果还有空间可以再建自己的数据分区存普通文件,和 WTG 没有关系不再赘述。

我们假定引导分区盘符为 X:,镜像分区盘符为 V:。至此 U 盘准备完成,可以暂时拔下来了。

0x02 写入镜像 #

确保刚才的 VHD 分区已经挂载了。这里假定挂载到了 D:

打开你的 Windows ISO,找到 source\install.wim,解压到一个目录。然后打开管理员 CMD (或 Powershell)。

一个 WIM 可以带有多个版本(家庭版、专业版等),使用 Index 区分。用下面的命令来列出版本避免装错。

C:\> Dism /Get-ImageInfo /imagefile:C:\path\to\your\install.wim

确定了 Index 之后,输入命令开始 Apply:

C:\> Dism /Apply-Image /imagefile:C:\path\to\your\install.wim /index:<Your index> /applydir:<你的 VHD 分区>

这个过程应该很快能完成。完成后卸载 VHD:

Detach

0x03 (可选)设置 Bitlocker #

如果想给 WTG 开启 Bitlocker 的话,直接给镜像分区开启即可。推荐在下一步(复制镜像)前进行,会快一点。设置好后开机引导就会提示输入密码。我不是很清楚能否给 VHD 里面的分区设定 Bitlocker,感兴趣可以自行尝试。

0x04 复制文件 #

准备引导前必须复制 VHD 到 U 盘。这里复制到镜像分区( V: )。复制完后再次挂载 VHD,但请挂载复制完的、U 盘中的 VHD。这里假定挂载到 D:

0x05 设置引导 #

输入以下命令设置引导,盘符根据自身情况修改:

C:\> bcdboot D:\Windows /s X: /f UEFI /l en-us

/l 指定语言,根据自身情况设定。

至此,基本的 WTG 已经准备好了。记得卸载 VHD。别急着重启,还有点事。

0x06 (可选)进行一次差分 #

我个人建议刚弄好的时候差分一次,方便回退到纯净系统。

  1. 移动 U 盘内的 VHD。如 V:\windows.vhdV:\fresh_install.vhd
  2. 打开 diskpart,输入 create vdisk file=V:\windows.vhd parent=V:\fresh_install.vhd
  3. fresh_install.vhd 设为只读
  4. 创建完成。

0x07 (可选)禁止 VHD 拓展空间 #

具体是否必要、是否需要第一次启动前设定我也不清楚。反正能避免 VHD_BOOT_HOST_VOLUME_NOT_ENOUGH_SPACE 导致蓝屏。为此我们需要修改 WTG 中的注册表。

挂载 windows.vhd(文件名根据自己情况修改),比如挂载到 D:。这时 D:\Windows\System32\Config\SYSTEM 就是我们要修改的注册表 档案。打开 regedit,随便选一个 Root Key,比如笔者的 HKEY_LOCAL_MACHINE

然后左上角点 Load hive,选择那个 SYSTEM 档案:

Load hive

然后名字自选,比如 WTG

打开 HKEY_LOCAL_MACHINE (你的 Root key)下的 WTG (你设定的名字)。找到 ControSet001\services\FsDepends\Parameters 里面的 VirtualDiskExpandOnMount ,把值改成 4

最终选择 WTG (你设定的名字)子项,菜单选 Unload hive,然后卸载 VHD。

如果刚才做了差分,这次的修改不会保留在 fresh_install.vhd 中,而是保留在了 windows.vhd 里面。如有需要可以再次差分。

至此 WTG 第一次启动已准备好,可以重启进入了。

优化 #

开机后可能会很卡,这里需要做一些优化才行。

禁用服务 #

打开 计算机管理(Computer management),服务里面可以禁用并停止以下服务:

  • Windows Search

  • Windows Error Reporting Service

  • Background Intelligent Transfer Service

  • Windows Event Log(会导致无法更新,建议更新前临时启动)

UWF #

UWF 是 Microsoft 提供的一项功能,可以禁止对磁盘的写入,类似磁盘保护。不过这项功能仅在 Enterprise 或 Education 版本提供,如果可用可以自行查阅文档:

Unified Write Filter (UWF) feature

Ramdisk #

把临时文件存到内存盘是个好操作,大幅减少对 U 盘寿命的影响。个人推荐用 ImDisk

卸载功能 #

卸载不必要的功能比较适合强迫症,我个人卸载了所有可选功能。 Windows + R 输入 OptionalFeatures 自行勾选。

卸载自带软体 #

Win10 自带很多 UWP App 都可以删,Powershell 自行摸索就好,不再赘述。

减少视觉效果 #

减少动画可以看起来更快,打开控制面板(Win + R,输入 control) -> System and Security -> System -> 左侧 Advanced System Settings -> 性能 设定 -> Adjust for best performance。同时,可以去设置里面关闭尽可能多的美化。

关闭虚拟内存 #

Win + R 输入 systempropertiesadvanced 并打开,性能 -> 设定 里面选 高级 选项卡,虚拟内存点修改,取消勾选自动,每个分区扫一遍,有的话就选 No paging file 然后点 Set:

禁止休眠 #

WTG 休眠会发生一些问题。

  1. CMD powercfg -h off
  2. 打开 控制面板 -> 控制面板\所有控制面板项\电源选项\编辑计划设置 进入休眠状态设为永不

关闭 Defender #

警告:关闭 Defender 会降低系统安全等级。

首先进 Defender 设定把能关的选项都关了。

然后打开组策略管理器( gpedit.msc ),计算机设定 -> 管理模板 -> Windows 组件 -> Windows Defender -> Turn off Windows Defender -> Enabled

至此,WTG 已经基本可以使用了,可以进主系统去做个差分,保留一下还原点和记录。

References #

The thunbnail: