准备切 Linux,但又怕一刀切翻车,于是先把原来的 Windows 克隆到外置 NVMe 里,当成过渡系统和应急 fallback。
先说结论:
成功从 USB 外置 NVMe 启动,原来的软件、配置、文件基本都还在。
但是过程并不是克隆完就能跑,中间踩了几个坑:
- 克隆后无法启动:
0xc000000e - 修完引导后蓝屏:
0x0000007B - 能进系统后,关机/重启时 USB 硬盘盒提前断开
- RTL9210 硬盘盒能用,但不太适合长期 Windows-to-USB
0. 前情提要
我这次用的是 RTL9210 芯片的 NVMe USB 硬盘盒。
普通当移动硬盘没啥问题,但拿来跑 Windows 系统盘就有点边缘了。
因为 Windows-to-USB 启动时,不是“系统启动后再识别移动硬盘”,而是启动早期就要靠 USB 控制器、UASP/USBSTOR、桥接芯片、NVMe 驱动一路把系统盘读出来。
这条链路里只要有一环加载晚了,就会炸。
所以先叠甲:
这不是万能教程,只是一次实战记录。
命令里的盘号和盘符一定要按自己机器实际情况改,别无脑复制。
1. 目标
我的目标很简单:
- 把当前内置盘里的 Windows 克隆到外置 NVMe;
- 保留软件、配置、个人文件;
- 外置盘可以独立启动;
- 内置盘腾出来装 Linux;
- Windows 作为过渡和救命环境。
所以这里不适合重装系统。
重装当然干净,但软件、注册表、授权、工作环境这些东西搬起来太痛苦。
因此路线就是:
克隆现有系统,而不是重装2. 第一坑:克隆后无法启动 0xc000000e
克隆完第一次启动,直接报:
0xc000000e大概意思是 Windows Boot Manager 找不到要启动的系统。
一般是:
-
BCD 还指着原来的内置盘;
-
外置盘 EFI 分区没写好;
-
引导文件没生成完整。
解决方式:进 WinPE 或 Windows 安装 U 盘。
安装界面按:
Shift + F10打开命令行。
先用 diskpart 找外置盘:
diskpartlist diskselect disk 1list vol这里 disk 1 只是示例,别照抄。
找到两个分区:
-
EFI 分区:FAT32,一般 100MB 到 300MB;
-
Windows 分区:NTFS,里面有
Windows、Users、Program Files。
假设 EFI 是卷 2,Windows 是卷 4:
select vol 2assign letter=S
select vol 4assign letter=W
exit确认 W: 真的是外置 Windows:
dir W:\Windows然后重建 UEFI 启动文件:
bcdboot W:\Windows /s S: /f UEFI这一步做完,0xc000000e 解决。
3. 第二坑:能引导,但蓝屏 0x7B
修完 BCD 后,Windows Boot Manager 能进了,但系统启动阶段蓝屏:
0x0000007BINACCESSIBLE_BOOT_DEVICE这个报错就很典型了:
引导找到了 Windows,但 Windows 内核启动后找不到自己的系统盘。
原因也很好理解:
原系统本来是从内置 NVMe/SATA 启动的,现在被我丢到了 USB 外置盘。
USB / UASP / 存储相关驱动如果没有在启动早期加载,系统自然就找不到自己了。
4. 离线改注册表
再次进入 WinPE 或安装 U 盘命令行。
假设外置 Windows 分区还是 W:。
先备份注册表:
copy W:\Windows\System32\Config\SYSTEM W:\SYSTEM.bak加载外置系统的 SYSTEM 注册表:
reg load HKLM\OFFSYS W:\Windows\System32\Config\SYSTEM看当前 ControlSet:
reg query HKLM\OFFSYS\Select我这里是:
Current 0x1Default 0x1所以后面改的是:
ControlSet001如果你那里不是 0x1,就按实际情况改。
5. 设置 BootDriverFlags
关键命令:
reg add HKLM\OFFSYS\ControlSet001\Control /v BootDriverFlags /t REG_DWORD /d 20 /f这里的 20 是十进制,也就是十六进制 0x14。
作用就是让 Windows 更早加载 USB 存储相关驱动。
从内置盘克隆到 USB 后,这一步很关键。
6. 强制存储驱动早期启动
继续执行:
reg add HKLM\OFFSYS\ControlSet001\Services\USBXHCI /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\USBHUB3 /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\UASPStor /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\USBSTOR /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\disk /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\partmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\mountmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\volmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\storport /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\stornvme /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\storahci /v Start /t REG_DWORD /d 0 /f有些服务项可能不存在,报错也不一定有问题,继续就行。
7. 处理 StartOverride
有些驱动就算 Start=0,也可能被 StartOverride 覆盖掉。
所以继续补一刀:
reg add HKLM\OFFSYS\ControlSet001\Services\USBXHCI\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\USBHUB3\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\UASPStor\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\USBSTOR\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\stornvme\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\ControlSet001\Services\storahci\StartOverride /v 0 /t REG_DWORD /d 0 /f顺手关掉快速启动:
reg add "HKLM\OFFSYS\ControlSet001\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f最后卸载离线注册表:
reg unload HKLM\OFFSYS再重建一次引导:
bcdboot W:\Windows /s S: /f UEFI重启。
这次成功进系统。
8. 进系统后先检查
进系统后别急着开香槟,先确认自己没有启动错盘。
PowerShell:
Get-Partition -DriveLetter C | Get-Disk或者打开磁盘管理:
diskmgmt.msc确认当前 C: 确实在外置 NVMe 上。
然后建议跑一遍:
sfc /scannowDISM /Online /Cleanup-Image /RestoreHealthchkdsk C: /scan9. 第三坑:能开机,但关机/重启抽风
系统能进以后,我又遇到一个新问题:
开机正常,但关机或重启时,USB 硬盘盒显示已经断开,系统还卡在关机流程里。
对普通移动硬盘来说,这可能只是掉盘。
但对系统盘来说,这就很刺激了。
Windows 还没关完,根文件系统先没了。
属于是系统自己把自己脚下的地板拆了。
如果已经卡死,硬盘灯也不闪,可以长按电源强制关机。
下次开机后先跑:
chkdsk C: /scan不放心再跑:
sfc /scannowChatGPT说要关闭快速启动,关闭 USB 选择性暂停、磁盘空闲休眠、PCIe 链路省电,这堆东西我日常就关了,你没关的话出问题了可以考虑一下是不是这些问题
ChatGPT还说要把磁盘驱动器的电源策略改成快速删除,但是这个东西是系统盘,需要重启生效,但是可但是改这个就是为了解决重启失败的问题,闭环了。 遇到困难睡大觉!
10. RTL9210 还值得继续折腾吗?
遇到困难摆大烂!
如果只是迁 Linux 前的过渡,不值得继续死磕。
现在它已经完成核心任务了:
-
能启动;
-
能进原系统;
-
软件和文件基本都在;
-
Linux 迁移期间能当 fallback。
剩下的关机/重启问题,更像是硬盘盒固件、USB 控制器、线材、电源管理的兼容性问题。
真要继续查,可能还得折腾:
-
刷 RTL9210 固件;
-
换硬盘盒;
-
测 UASP / USBSTOR 差异;
但我只是临时用,不想和它过一辈子。 你就说能不能用!
11. 我的最终策略
这个外置 Windows 我最后定位为:
临时工作环境过渡系统应急 fallback不是长期主系统所以后续使用原则也很简单:
-
不睡眠;
-
不休眠;
-
不开快速启动;
-
不开 BitLocker;
-
不把唯一重要数据放这里;
-
工作文件及时同步到云盘 / Git / NAS;
-
异常关机后跑
chkdsk C: /scan; -
尽快迁完 Linux。
总结
这次 Windows-to-USB 的关键路径:
克隆系统修 EFI / BCD解决 0xc000000e解决 0x7B关闭快速启动和省电确认能启动能用就收手最关键的修复命令是:
reg add HKLM\OFFSYS\ControlSet001\Control /v BootDriverFlags /t REG_DWORD /d 20 /f以及把 USB、UASP、NVMe、磁盘相关驱动改成启动早期加载。
Windows-to-USB 不是不能用,但它不是普通克隆工具点一下就能稳定跑的场景。
它更像是一个“能跑,但要理解启动链路”的偏门玩法。
如果长期用,建议认真选硬盘盒、固件、线材和接口。
如果只是像我一样迁 Linux 前留个后路,那就别追求完美:
能启动、能工作、数据有备份,就可以收手了。
尾声:脚本
敲那一堆reg add我人有点麻,放结尾的目的是让一步步照着做的你也麻一遍, 不能只有我一个人难受
使用方法:
如果你的外置 Windows 分区是 W:,EFI 分区是 S:,完整流程就是:
fix-usbstor-0x7b.bat W:bcdboot W:\Windows /s S: /f UEFIfix-usbstor-0x7b.bat:
@echo offsetlocal EnableExtensions EnableDelayedExpansion
REM ============================================================REM fix-usb-boot-driver.batREMREM Purpose:REM Fix Windows cloned-to-USB INACCESSIBLE_BOOT_DEVICE / 0x7BREM by enabling USB / UASP / storage drivers for early boot.REMREM Usage:REM fix-usb-boot-driver.bat W:REMREM Example:REM If your external Windows partition is W:REM fix-usb-boot-driver.bat W:REMREM Run from WinPE / Windows Setup command prompt.REM ============================================================
if "%~1"=="" ( echo Usage: %~nx0 ^<WindowsDrive^> echo Example: %~nx0 W: exit /b 1)
set "WINDRV=%~1"
REM Remove trailing backslash if presentif "%WINDRV:~-1%"=="\" set "WINDRV=%WINDRV:~0,-1%"
set "SYSTEM_HIVE=%WINDRV%\Windows\System32\Config\SYSTEM"
echo.echo Target Windows drive: %WINDRV%echo SYSTEM hive: %SYSTEM_HIVE%echo.
if not exist "%SYSTEM_HIVE%" ( echo ERROR: Cannot find SYSTEM hive. echo Please make sure %WINDRV% is the offline Windows partition. exit /b 1)
echo Backing up SYSTEM hive...copy "%SYSTEM_HIVE%" "%WINDRV%\SYSTEM.bak" >nulif errorlevel 1 ( echo ERROR: Failed to back up SYSTEM hive. exit /b 1)
echo Loading offline SYSTEM hive...reg load HKLM\OFFSYS "%SYSTEM_HIVE%"if errorlevel 1 ( echo ERROR: Failed to load offline SYSTEM hive. echo If HKLM\OFFSYS is already loaded, run: echo reg unload HKLM\OFFSYS exit /b 1)
REM ------------------------------------------------------------REM Detect Current ControlSetREM ------------------------------------------------------------
set "CURRENT_HEX="
for /f "tokens=3" %%A in ('reg query HKLM\OFFSYS\Select /v Current 2^>nul ^| find /i "Current"') do ( set "CURRENT_HEX=%%A")
if "%CURRENT_HEX%"=="" ( echo ERROR: Failed to detect Current ControlSet. reg unload HKLM\OFFSYS >nul 2>&1 exit /b 1)
REM Convert hex-like value, for example 0x1, to decimalset /a CURRENT_NUM=%CURRENT_HEX%
if "%CURRENT_NUM%"=="1" ( set "CONTROLSET=ControlSet001") else if "%CURRENT_NUM%"=="2" ( set "CONTROLSET=ControlSet002") else if "%CURRENT_NUM%"=="3" ( set "CONTROLSET=ControlSet003") else if "%CURRENT_NUM%"=="4" ( set "CONTROLSET=ControlSet004") else ( echo ERROR: Unsupported ControlSet number: %CURRENT_NUM% reg unload HKLM\OFFSYS >nul 2>&1 exit /b 1)
echo Detected Current: %CURRENT_HEX%echo Using: HKLM\OFFSYS\%CONTROLSET%echo.
REM ------------------------------------------------------------REM Enable boot-time USB / storage driver loadingREM ------------------------------------------------------------
echo Setting BootDriverFlags...reg add HKLM\OFFSYS\%CONTROLSET%\Control /v BootDriverFlags /t REG_DWORD /d 20 /f
echo.echo Setting storage driver Start values...
reg add HKLM\OFFSYS\%CONTROLSET%\Services\USBXHCI /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\USBHUB3 /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\UASPStor /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\USBSTOR /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\disk /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\partmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\mountmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\volmgr /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\storport /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\stornvme /v Start /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\storahci /v Start /t REG_DWORD /d 0 /f
echo.echo Setting StartOverride values...
reg add HKLM\OFFSYS\%CONTROLSET%\Services\USBXHCI\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\USBHUB3\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\UASPStor\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\USBSTOR\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\stornvme\StartOverride /v 0 /t REG_DWORD /d 0 /freg add HKLM\OFFSYS\%CONTROLSET%\Services\storahci\StartOverride /v 0 /t REG_DWORD /d 0 /f
echo.echo Disabling Fast Startup / Hiberboot...reg add "HKLM\OFFSYS\%CONTROLSET%\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /f
echo.echo Unloading offline SYSTEM hive...reg unload HKLM\OFFSYSif errorlevel 1 ( echo WARNING: Failed to unload HKLM\OFFSYS. echo You may need to run this manually: echo reg unload HKLM\OFFSYS exit /b 1)
echo.echo Done.echo SYSTEM hive backup saved as:echo %WINDRV%\SYSTEM.bakecho.echo Next recommended command, if your EFI partition is S::echo bcdboot %WINDRV%\Windows /s S: /f UEFIecho.
exit /b 0