从 Linux 创建可启动的 Windows 10 USB 驱动器 (UEFI)

Vic*_*lio 34 linux usb boot windows-10

如何从 Linux 创建可引导的 Windows 10 USB 驱动器?

请注意:

  • WinUSB 不适用于 Windows 10。
  • UNetbootin 也不起作用。
  • dd 方法也不起作用。

除此之外,我尝试创建一个 GPT 分区表和一个类型为 ef00 并格式化为 fat32 的分区,然后将所有 ISO 内容复制到其中。它启动正常,但是当我开始安装时,它会显示媒体对话框提示。

更新

另一个尝试:

  1. 创建了 GPT
  2. 在 50 MB 的驱动器末尾创建一个 FAT32
  3. 在剩余空间创建 NTFS
  4. 将 UEFI:NTFS 放在 FAT32 上
  5. 将 ISO 内容复制到 NTFS

安装开始正常,但在开始时显示错误 0xc0000005(如果我没记错的话)。

Lir*_*irt 21

Windows 2018 年 10 月 10 日在任何 Linux 发行版上发布 UEFI 可引导 USB 驱动器。

请注意,由于 Windows 10 October 2018 发布的安装文件sources/install.wim大于最大FAT32文件大小,因此我们将 U 盘格式化为NTFS. Windows 安装程序也不能使用 EFI 分区(代码ef00),因此我们将使用Microsoft basic data分区类型(代码0700)。

变体 A(适用于支持 NTFS 的 PC)

使用名称创建 USB 驱动器的步骤/dev/sdc将所有命令替换为您的设备名称!):

  1. 将 USB 驱动器插入计算机并确保它已卸载。某些发行版喜欢自动挂载 USB 驱动器,因此请确保卸载它们。可以使用 找到已挂载的分区mount -l | grep '/dev/sdc',然后使用sudo umount /dev/sdcX(其中X是分区号)卸载。
  2. 使用打开USB块设备gdisk /dev/sdc,将其配置为GPT并创建Microsoft basic data分区(代码0700),然后写入更改并退出(下一步将破坏USB驱动器中的分区表!!!)。
sudo gdisk /dev/sdc
o
> This option deletes all partitions and creates a new protective MBR.
> Proceed? (Y/N): y
n
> Partition number ... > hit Enter
> First sector ... : > hit Enter
> Last sector ... : > hit Enter
> Current type is 'Linux filesystem'
> Hex code or GUID (L to show codes, Enter = 8300): 0700
p
> Should print something like:
> Disk /dev/sdc: 15646720 sectors, 7.5 GiB
> Model: DataTraveler 160
> Sector size (logical/physical): 512/512 bytes
> Disk identifier (GUID): ...
> Partition table holds up to 128 entries
> Main partition table begins at sector 2 and ends at sector 33
> First usable sector is 34, last usable sector is 15646686
> Partitions will be aligned on 2048-sector boundaries
> Total free space is 2014 sectors (1007.0 KiB)
> Number  Start (sector)    End (sector)  Size       Code  Name
>    1            2048        15646686   7.5 GiB     0700  Microsoft basic data
w
> Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
> Do you want to proceed? (Y/N): y
q
Run Code Online (Sandbox Code Playgroud)
  1. 将新分区格式化为 NTFS(感谢 @Alex 的-Q想法):
sudo mkfs.ntfs -Q /dev/sdc1
Run Code Online (Sandbox Code Playgroud)
  1. 将新的 USB 分区挂载到您家中的临时目录:
mkdir ~/tmp-win10-usb-drive
sudo mount /dev/sdc1 ~/tmp-win10-usb-drive
Run Code Online (Sandbox Code Playgroud)
  1. 下载 Windows 安装 ISO,在您的家中创建新的临时目录并将其安装在那里:
mkdir ~/tmp-win10-iso-mnt
sudo mount Win10_1809Oct_English_x64.iso ~/tmp-win10-iso-mnt
Run Code Online (Sandbox Code Playgroud)
  1. 将所有文件从挂载的 ISO 复制到 USB 驱动器(您可以rsync用来查看进度):
sudo cp -rT ~/tmp-win10-iso-mnt/ ~/tmp-win10-usb-drive/
Run Code Online (Sandbox Code Playgroud)
  1. 卸载 Windows ISO 和 USB 驱动器并删除临时目录:
sudo umount ~/tmp-win10-iso-mnt/ ~/tmp-win10-usb-drive/
rmdir ~/tmp-win10-iso-mnt/ ~/tmp-win10-usb-drive/
Run Code Online (Sandbox Code Playgroud)
  1. 将 USB 驱动器插入新计算机并从中启动。

变体 B(适用于不支持 NTFS 的 PC)

使用名称创建 USB 驱动器的步骤/dev/sdc将所有命令替换为您的设备名称!):

  1. 将 USB 驱动器插入计算机并确保它已卸载。某些发行版喜欢自动挂载 USB 驱动器,因此请确保卸载它们。可以使用 找到已挂载的分区mount -l | grep '/dev/sdc',然后使用sudo umount /dev/sdcX(其中X是分区号)卸载。
  2. 使用打开 USB 块设备 gdisk /dev/sdc
  3. 将其配置为 GPT
  4. 创建 1GB 大小和类型Microsoft basic data(代码0700)的第一个分区。
  5. 创建其余大小和类型Microsoft basic data(代码0700)的第二个分区。
  6. 写入更改并退出(下一步将破坏 USB 驱动器中的分区表!!!)。
sudo gdisk /dev/sdc
> o
> This option deletes all partitions and creates a new protective MBR.
> Proceed? (Y/N): y
> n
> Partition Number: Enter
> First sector: Enter
> Last sector: 1G
> Type: 0700
> n
> Partition Number: Enter
> First sector: Enter
> Last sector: Enter
> Type: 0700
> p
# Should print something like:
> Disk /dev/sdc: 30031250 sectors, 14.3 GiB
> Model: Ultra USB 3.0   
> Sector size (logical/physical): 512/512 bytes
> Disk identifier (GUID): C657C0AF-3FE2-4152-8BF1-CE3CCA9F3541
> Partition table holds up to 128 entries
> Main partition table begins at sector 2 and ends at sector 33
> First usable sector is 34, last usable sector is 30031216
> Partitions will be aligned on 2048-sector boundaries
> Total free space is 4061 sectors (2.0 MiB)

> Number  Start (sector)    End (sector)  Size       Code  Name
>    1            2048         2048000   999.0 MiB   0700  Microsoft basic data
>    2         2050048        30031216   13.3 GiB    0700  Microsoft basic data

w
> Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
> Do you want to proceed? (Y/N): y
q
Run Code Online (Sandbox Code Playgroud)
  1. 将第一个分区格式化为 FAT32,将第二个分区格式化为 NTFS:
sudo mkfs.fat -F32 /dev/sdc1
sudo mkfs.ntfs -Q  /dev/sdc2
Run Code Online (Sandbox Code Playgroud)
  1. 将新的 USB 分区挂载到您家中的临时目录:
mkdir ~/tmp-win10-fat-usb-drive
mkdir ~/tmp-win10-ntfs-usb-drive
sudo mount /dev/sdc1 ~/tmp-win10-fat-usb-drive
sudo mount /dev/sdc2 ~/tmp-win10-ntfs-usb-drive
Run Code Online (Sandbox Code Playgroud)
  1. 下载 Windows 安装 ISO,在您的家中创建新的临时目录并将其安装在那里:
mkdir ~/tmp-win10-iso-mnt
sudo mount Win10_1809Oct_English_x64.iso ~/tmp-win10-iso-mnt
Run Code Online (Sandbox Code Playgroud)
  1. 将以下文件从安装的 ISO 复制到 FAT32 格式的 USB 驱动器(基本上复制除sources/包括之外的所有内容sources/boot.wim):
sudo cp ~/tmp-win10-iso-mnt/* ~/tmp-win10-fat-usb-drive/
sudo cp -r ~/tmp-win10-iso-mnt/boot ~/tmp-win10-fat-usb-drive/
sudo cp -r ~/tmp-win10-iso-mnt/efi ~/tmp-win10-fat-usb-drive/
sudo cp -r ~/tmp-win10-iso-mnt/support ~/tmp-win10-fat-usb-drive/
sudo mkdir ~/tmp-win10-iso-mnt/sources ~/tmp-win10-fat-usb-drive/
sudo cp ~/tmp-win10-iso-mnt/sources/boot.wim ~/tmp-win10-fat-usb-drive/sources
Run Code Online (Sandbox Code Playgroud)
  1. 将所有内容从安装的 ISO 复制到 NTFS 格式的 USB 驱动器:
sudo cp -rT ~/tmp-win10-iso-mnt/ ~/tmp-win10-ntfs-usb-drive/
Run Code Online (Sandbox Code Playgroud)
  1. 卸载 Windows ISO 和两个 USB 分区并删除临时目录:
sudo umount ~/tmp-win10-iso-mnt/ ~/tmp-win10-usb-fat-drive/ ~/tmp-win10-usb-ntfs-drive/
rmdir ~/tmp-win10-iso-mnt/ ~/tmp-win10-usb-drive/
Run Code Online (Sandbox Code Playgroud)
  1. 将 USB 驱动器插入新计算机并从中启动。

  • 您可以使用“wimtools”和“solid”压缩级别将 install.wim 压缩到小于 4GB。这样您就可以简单地使用 FAT32,请参阅 https://tqdev.com/2019-cannot-copy-windows-10-install-wim (5认同)
  • 有些固件不会检查 NTFS 分区中的引导文件,如果我错了,有人会纠正我。 (4认同)
  • 当您跳过首先用零填充它时,您可以显着加快格式化:*sudo mkfs.ntfs -Q /dev/sdc1* (3认同)
  • 我来这里是想说我也遇到了@VictorAurélio 描述的问题——我的笔记本电脑无法启动一个正确格式化并用 gdisk 标记的 NTFS 分区。我通过使用 FAT32 和@mevdschee 链接的文章中描述的命令 `wimlib-imagex optimize install.wim --solid` 解决了这个问题 (3认同)

小智 11

我已经通过以下方式在 Ubuntu 上使用了woeusb警告:这将覆盖整个分区表!):

sudo woeusb --tgt-fs NTFS --device Win10_1809Oct_Hungarian_x64.iso /dev/sdc
Run Code Online (Sandbox Code Playgroud)

如果您遇到此错误消息:

擦除所有签名后仍检测到分区,这表明驱动器可能因使用寿命结束而被锁定为只读模式。

执行以下操作:sudo fdisk /dev/sdc,然后选择d,然后最后w

(来源:https : //github.com/slacka/WoeUSB/issues/219。)此后,再次尝试运行上述命令。

无论如何,woeusb 使用这种方法创建了一个包含两个分区的gpt分区表:

partition      file system    label          size          flags
----------------------------------------------------------------
/dev/sdc1      nfts           Windows USB     57.00 GiB
/dev/sdc2      fat16          UEFI_NTFS      512.00 KiB    lba
unallocated                                    4.00 MiB
Run Code Online (Sandbox Code Playgroud)

最后,我所要做的就是为 /dev/sdc2 分区(与 lba 一起)放置带有 gparted的引导标志。

这样,我可以在 UEFI 模式下成功启动并从我的 U 盘安装 Windows 10。


小智 8

你做得很好。使用 fat32 制作 gpt 表,并从上面复制 iso 中的所有数据。但是你还需要在这个分区上设置标志“msftdata”(不是“boot”),例如 parted。

  • 设置标志“msftdata”(不是“boot”),谢谢@Feretj,你救了我的命 (2认同)