我接触Linux桌面这两年,做得最多的一个操作反而是“帮人做Windows启动盘”。你手上只有一台装了Ubuntu或者Deepin的笔记本,却要给同事做Win11重装盘;又或者你刚把主力机切换成Linux,临时需要装个Windows虚拟机镜像,却发现手头根本没有能在Linux下直接制作启动盘的工具——这个场景下,WoeUSB几乎是绕不开的解决方案。这篇文章就完整讲一遍:WoeUSB是什么、原理上它在U盘里做了什么、怎么一步步用它做出Win11启动盘,以及我踩过的坑和排查方法。
1. 为什么我在Linux上做Windows启动盘,最终选了WoeUSB
1.1 不是Rufus用不起,而是Linux上真选不出来
Windows系统里做启动盘最舒服的工具是Rufus,图形界面直观、支持UEFI和Legacy双模式、还能处理镜像里的各种限制。可惜Rufus没有Linux版本,这是硬伤。
有人会想到直接用dd命令把ISO镜像写进U盘:
sudo dd if=Win11.iso of=/dev/sdb bs=4M status=progress这条命令在Linux下做Ubuntu启动盘很常见,但用在Windows镜像上问题很大:Windows的安装ISO采用UDF/ISO9660混合结构,dd写完后很多主板能识别启动项,却会在Windows安装程序读取阶段报错,或者直接就识别不到UEFI引导。原因很简单,dd是逐字节克隆整个ISO文件,它不会帮你把U盘配置成Windows安装程序期望的那种分区结构和引导文件布局。
Ventoy也是很多人的选择,它能做到“拷贝ISO进去就能启动”,但Ventoy用的是自己的引导逻辑,有些老主板和部分品牌机的UEFI固件对Ventoy兼容性不稳定,更麻烦的是在Windows安装过程中如果选择“加载驱动程序”或者需要重启继续安装,部分环境会找不到Ventoy虚拟出的分区。
WoeUSB不一样,它的目标很纯粹:把Windows的ISO解包,按原生Windows安装盘的方式组织文件、写入引导,做出来的U盘结构上等同于微软官方媒体创建工具生成的结果。这个差异很关键,因为它直接决定安装阶段的稳定性和兼容性。
1.2 WoeUSB的两种形态选哪个
WoeUSB现在有两条分支,网上经常混淆。
一个是老牌的WoeUSB,属于Python 2时代的项目,官方很久没更新,在新版Linux上跑起来基本要靠各种兼容补丁,不建议新用户碰。
另一个是WoeUSB-ng,本质是重写版,用Python 3开发,维护活跃,安装后提供两条命令:woeusb-ng命令行版本和woeusb-gui图形界面版本。两者底层是同一套引擎,图形界面只是包了一层GTK,方便不习惯敲命令的人。
我的建议是直接用woeusb-ng命令行版本。原因有两个:第一,图形界面在部分精简版桌面环境里缺少GTK依赖,打开就报错,命令行没有这个问题;第二,命令行参数可以清楚地看到工具每一步在做什么,排错容易得多。下面所有操作我都以WoeUSB-ng为准。
1.3 动手前的3个前提条件
先确认三件事,否则后面会卡壳:
- U盘容量至少8GB。Win11 24H2的官方镜像解压后普遍超过6GB,8GB是底线,16GB更稳妥。
- 预先下载好Win11 ISO镜像。官方iso通过微软官网下载,下载文件名一般是
Win11_24H2_Chinese_Simplified_x64.iso这种格式。 - 确认你的Linux发行版能联网,安装过程需要拉取源码和依赖包,完全离线的环境装起来比较费劲。
你要是用的是Kali、Arch、Fedora这类非Debian系发行版,安装命令稍有差别,后面我会单独列出。
2. 从零装好WoeUSB,含依赖与编译细节
2.1 先装依赖,别让p7zip坑了你
WoeUSB-ng不是传统的apt包,官方推荐的方式是源码编译安装。安装前需要准备这些依赖:
git:拉取源码p7zip-full:解压ISO,这个最容易出问题ntfs-3g:写入NTFS分区python3和python3-pip:运行环境make:执行安装脚本
Debian/Ubuntu系执行:
sudo apt update sudo apt install git p7zip-full ntfs-3g python3-pip python3-urllib3 make注意,这里一定要装p7zip-full,而不是p7zip。p7zip只带7z命令的基础功能,p7zip-full才有完整的7za、7zr以及各种格式支持。WoeUSB-ng解包ISO时会用到7z的rar/udf/wim处理能力,只装p7zip的话,运行到一半会报can't find 7z或者解压异常。
Arch系执行:
sudo pacman -S git p7zip ntfs-3g python-pip python-urllib3Fedora系执行:
sudo dnf install git p7zip p7zip-plugins ntfs-3g python3-pip python3-urllib3 make提示:别跳过
ntfs-3g。WoeUSB写出来的启动盘分区默认是NTFS,没有ntfs-3g驱动就没法挂载和写入,后面的步骤基本全废。
2.2 源码编译安装WoeUSB-ng,命令行与GUI都有了
依赖装好后,按这个顺序编译安装:
git clone https://github.com/WoeUSB/WoeUSB-ng.git cd WoeUSB-ng sudo make installmake install会把两个命令安装到系统目录里,分别是woeusb-ng和woeusb-gui。安装过程很快,只要依赖没问题,基本不会报错。
这里有个小细节:官方仓库的Makefile会把Python包安装到系统Python环境中,所以需要sudo权限。如果你的系统启用了PEP 668防护(Ubuntu 23.04以上,Debian 12以上默认开启),pip install阶段可能报externally-managed-environment错误。遇到这种情况,在make install时确认一下是不是真的走了pip;实在不行可以先装python3-pip后手动执行:
sudo pip install --break-system-packages .这也是为什么我更推荐直接用发行版包管理的原因,少折腾。
2.3 安装完成后的验证与基本参数说明
安装完成,运行:
woeusb-ng --version能输出版本号说明安装成功。
woeusb-ng的核心参数其实不多,我整理了一份最常用的:
| 参数 | 作用 | 示例 |
|---|---|---|
--device | 指定目标U盘设备文件 | /dev/sdb |
--label | 指定U盘卷标 | WIN11UEFI |
--workdir | 指定临时工作目录,默认使用/tmp | --workdir /home/user/work |
--no-color | 关闭彩色输出,适合日志记录 | 无需参数 |
--debug | 输出调试日志,排错时很有用 | 无需参数 |
后面实操部分会用到--device和--workdir。
3. WoeUSB的工作原理:它到底在U盘里做了什么
3.1 为什么必须用NTFS而不是FAT32
很多第一次用WoeUSB的人会疑惑:为什么做出来的启动盘不是FAT32?特别是打开U盘看到一堆文件时,还会怀疑是不是工具出错了。
根本原因是Windows安装镜像里的install.wim或install.esd文件体积问题。Win11多版本镜像里的这个文件往往超过4GB,而FAT32文件系统有单文件大小4GB的上限,一旦超过这个限制,安装程序会在复制文件阶段报0x80070070之类的错误。所以WoeUSB默认把U盘分区格式化成NTFS,就是为了避坑。
顺带说一句,现在Win11镜像里部分版本用的是install.esd,ESD是高压缩格式,体积通常比WIM小,但仍有超过4GB的可能。保险起见,NTFS是唯一稳妥的选择。
3.2 从ISO到U盘的三个关键步骤
WoeUSB-ng的工作流程可以拆成三步:
第一步,解包ISO。它调用7z将ISO内容完整解压到临时目录,比如/tmp/woeusb-ng-xxxx/source/。这一步能看到一堆boot、efi、sources、support目录被创建出来。
第二步,分区与格式化。工具用parted或fdisk清理目标U盘的分区表,重新创建分区,默认格式化为NTFS,然后挂载到一个临时挂载点。
第三步,复制文件并写引导。把解压出来的Windows安装文件全部拷贝到U盘根目录,然后安装引导程序。这一步决定了U盘能不能被主板识别并启动,后面细说。
有一个很多人忽略的地方:WoeUSB-ng会在U盘根目录生成标准的bootmgr、bootmgr.efi、boot目录和efi目录,并且会修改boot\bootfix.bin之类的引导配置。所以做出来的U盘从文件层面看,基本等同于微软官方工具的结果,这也是它比dd方案稳定得多的重要原因。
3.3 UEFI引导是怎么写进去的
现在的Win11安装基本要求UEFI模式,WoeUSB-ng写引导时会根据ISO内容自动选择写哪种引导。它在U盘的ESP分区(EFI System Partition)里写入EFI\BOOT\BOOTX64.EFI,同时配置BCD引导配置数据,让Windows安装程序知道自己从哪里读取镜像。
这里插入一个实际经验:有些国产主板的UEFI固件比较挑剔,如果你的Linux机器使用兼容性支持模块(CSM)传统引导方式,做出来的U盘插到这种主板上可能不显示启动项。解决办法是进入主板BIOS,把启动模式改成纯UEFI,关闭CSM,再试试看。这个我在第5节会再提。
还有一点,WoeUSB-ng默认创建分区表时用的是MBR还是GPT?
官方默认行为是根据ISO的引导方式自动判断,Win11官方镜像走UEFI时,生成的U盘大多采用混合模式,既能UEFI启动也能兼容部分Legacy环境。但实测下来,个别主板的Secure Boot开启状态下,第三方引导器会被拦。所以安装Win11前,建议先临时关闭Secure Boot,等系统装完再开启,这一步几乎能解决一半的“无法启动”问题。
4. 完整实操:用WoeUSB制作Win11启动盘全流程
4.1 准备Win11镜像和U盘,别选错设备
这一步看着简单,其实是最容易翻车的地方。插上U盘后,先用lsblk确认哪个设备是你的U盘:
lsblk -o NAME,SIZE,MODEL,TRAN输出里会列出所有磁盘,TRAN一栏显示usb的就是你的U盘。比如输出是:
sda 240G SSD sdb 14.5G USB FlashDisk这里/dev/sdb就是U盘,容量14.5G,设备名记住了,后面命令要用。
提示:这一步一定要反复确认。我有一次在虚拟机里测试,脑子一热把
/dev/sda当成U盘传参,好在这个工具在目标盘是系统盘时会做检测并主动报错。即便如此,也要养成lsblk先看一眼的习惯。
确认U盘后,如果系统自动挂载了它的分区,先卸载:
sudo umount /dev/sdb1*不卸载的话,后面的格式化操作会报Device or resource busy。
4.2 命令行一行搞定,以及GUI操作
准备工作做完,执行制作命令:
sudo woeusb-ng --device Win11_24H2_Chinese_Simplified_x64.iso /dev/sdb命令含义:把Win11_24H2_Chinese_Simplified_x64.iso写入/dev/sdb。工具会依次执行解包、分区、格式化、复制文件、写引导,整个过程需要5到15分钟,取决于镜像大小和U盘写入速度。
如果是老的USB 2.0 U盘,这个过程会慢到让人怀疑程序卡死。建议制作时加一个--workdir参数,把临时目录放到机械硬盘或者SSD上,减少读写瓶颈:
sudo woeusb-ng --device Win11_24H2.iso /dev/sdb --workdir /home/user/woeusb_tmp/home/user/woeusb_tmp需要提前创建,如果/tmp所在分区空间不足(一般需要镜像解压后的空间,基本是镜像体积一倍以上),这个方法最有效。
如果你的桌面环境装了GTK依赖,也可以直接运行图形界面:
woeusb-gui界面逻辑很简单:上方选ISO镜像文件,中间选目标U盘设备,默认勾选“格式化U盘并安装”,点击Install就行。图形界面能看到进度条,但遇到错误时日志输出不如命令行直观,所以我个人还是推荐命令行。
4.3 制作完成后的自检
制作完成后,不要急着把U盘拔掉。先做三个检查,能避免到了目标电脑上才发现问题:
检查U盘的分区结构:
sudo fdisk -l /dev/sdb正常情况下会看到一个NTFS主分区,有的版本会额外显示一个小的EFI系统分区。
检查关键文件是否存在:
sudo mkdir /mnt/usbcheck sudo mount /dev/sdb1 /mnt/usbcheck ls /mnt/usbcheck正常能看到sources、boot、efi、bootmgr、bootmgr.efi等文件和目录。重点确认/mnt/usbcheck/sources/install.wim或install.esd存在,这个文件是Windows安装程序的核心,如果缺失说明解包阶段就有问题。
最后,安全卸载:
sudo umount /mnt/usbcheck到这里,启动盘就算成功了一大半。剩余的工作是在目标电脑上从U盘引导启动,进入Win11安装界面。
5. 常见问题与排查技巧实录
5.1 制作过程中的典型报错
我在实践中遇到过几种高频报错,整理成速查表:
| 报错信息 | 可能原因 | 解决办法 |
|---|---|---|
Device or resource busy | U盘分区被自动挂载 | 先sudo umount /dev/sdb*再执行 |
can't find 7z | 只装了p7zip没装p7zip-full | 补装p7zip-full |
Partition /dev/sdb is in use | 系统服务占用U盘 | 用sudo fuser -km /dev/sdb踢掉进程,或重插U盘 |
No such file or directory while opening /dev/sdb | 设备路径写错或U盘异常 | 重新lsblk确认设备名 |
python: No module named urllib3 | 缺Python依赖 | 安装python3-urllib3或执行pip3 install urllib3 certifi |
install.wim is larger than 4GB或相关报错 | FAT32限制或工具参数问题 | 确认工具默认NTFS,不要自己手动改成FAT32 |
如果遇到没见过的报错,最直接的办法是加--debug跑一遍:
sudo woeusb-ng --device Win11.iso /dev/sdb --debug调试日志会完整打印每一步执行了什么命令、返回了什么状态,基本能定位到是解包失败、分区失败还是复制文件失败。
5.2 做好的U盘无法引导开机
这是最让人头疼的情况,因为你很难判断是U盘没做好,还是目标电脑的BIOS设置有问题。按照这个顺序排查,多数情况能解决:
第一步,确认启动菜单里能不能看到U盘。不同品牌快捷键不同,一般是F12、F11、F8或Esc。进不去启动菜单,先检查是否插了USB 2.0口还是USB 3.0口,部分旧主板对USB 3.0的UEFI引导支持不好,换一个USB 2.0口再试。
第二步,关闭Secure Boot。UEFI安全启动会拦截没有微软签名认证的引导器,WoeUSB做出来的U盘引导文件虽然有微软签名,但偶尔仍会被主板拦下。进BIOS找到Secure Boot选项,改成Disabled,保存重启。
第三步,确认启动模式是UEFI。如果之前装过Win7或者用了兼容模式导致CSM处于开启状态,有些主板会优先走Legacy引导,而WoeUSB写的是UEFI引导,两者对不上自然起不来。在BIOS里把启动模式改成UEFI Only,或开启UEFI优先,再试一次。
第四步,如果还是不行,检查U盘分区表。用fdisk -l /dev/sdb看是不是“Disklabel type: gpt”,如果显示dos,说明工具按MBR方式写了分区,这在某些只支持纯UEFI的机器上可能不识别。理论上WoeUSB-ng会自动判断,但如果你手头有修改过引导工具的版本,可能会出这个偏差。
5.3 还需要注意的几个细节
Win11安装时提示“这台电脑无法运行Windows 11”,属于老机器常见问题,跟启动盘本身无关。要么BIOS里开启TPM相关选项(Intel叫PTT,AMD叫fTPM),要么用镜像内boot.wim里的绕过程序处理,这个展开说是另一个话题了。
另外,有群友问过ARM架构的PE启动盘能不能用WoeUSB。答案是不建议,WoeUSB-ng主要面向x86/x64的Windows镜像,ARM版本的Windows PE盘用普通工具做出来兼容性很差,不如直接用Windows机器上的媒体创建工具处理。
装好Win11之后,还会有朋友问关闭自动更新、改回Win10右键菜单这类问题,那些属于系统优化范畴,跟上启动盘无关,但我个人建议刚装完系统先不要急着做各种“优化”,原版系统稳定跑一段时间再动也不迟。
回头说说我自己的体会。WoeUSB-ng这工具,只要依赖装对、设备路径确认好、耐心等它写完,成功率其实非常高。我做这个操作不下二十次,唯一一次真正做失败的U盘,是因为那根U盘本身是扩容盘,写入到一半就掉线了。从那以后我养成了两个习惯:一是买启动盘专用U盘,一线品牌32GB或64GB的USB 3.0盘也就几十块钱,省心很多;二是每次制作完成后,一定有lsblk检查一遍容量,再对比ISO镜像实际体积,防止被虚标U盘坑。这两个小习惯,比任何参数技巧都实用。