Add a script that builds a fast Windows installation disk image
QEMU's emulated USB CD-ROM reads the Windows ISO at a few MB/s. The script builds a bootable FAT32 GPT disk image from the ISO, splitting install.wim into install*.swm parts for the 4 GB FAT32 file limit, so the image can be attached as an NVMe disk and read about 15 times faster. It runs on macOS and Debian. The ISO has to be read as UDF: hdiutil on macOS, mount -t udf as root on Linux, otherwise udisksctl, otherwise 7z extracts it. A desktop session automounts the loop device that udisksctl creates, so the existing mount point is reused when there is one. The image itself is built without root. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4d9e1b43d9
commit
21604f511f
2 files changed
+267
No files matched your search
@@ -62,3 +62,25 @@ mirror. Without it, `curl` (or `wget`) tries the mirrors in order. A partial
|
||||
download is only resumed with the same downloader and mirror list; otherwise
|
||||
it starts over. The Fedora and Ubuntu checksums can be overridden with
|
||||
`FEDORA_IMAGE_SHA256` and `UBUNTU_IMAGE_SHA256` when using a custom image.
|
||||
|
||||
## Windows installation disk image
|
||||
|
||||
QEMU's emulated USB CD-ROM reads the Windows ISO at only a few MB/s on macOS.
|
||||
`build-windows-install-disk.sh` builds a bootable FAT32 disk image from the ISO
|
||||
(`install.wim` is split into `install.swm` parts because of the 4 GB FAT32 file
|
||||
limit); attached as an NVMe disk it is read about 15 times faster.
|
||||
|
||||
```bash
|
||||
# macOS (Homebrew), once
|
||||
brew install wimlib dosfstools gptfdisk mtools
|
||||
# Debian, once (p7zip-full or udisks2 only for non-root use)
|
||||
sudo apt install wimtools dosfstools gdisk mtools p7zip-full
|
||||
|
||||
./build-windows-install-disk.sh [--force] install-iso/Windows11_..._arm64_....iso
|
||||
```
|
||||
|
||||
The output defaults to the ISO path with `.install.img` in place of `.iso`. The
|
||||
image is built without root. The ISO has to be read as UDF (its ISO 9660 side only
|
||||
holds a README): macOS uses `hdiutil`, Linux uses `mount -t udf` as root,
|
||||
otherwise `udisksctl`, otherwise `7z` extracts it into a temporary directory
|
||||
(which needs the free space of the whole ISO). The `*.img` file is ignored by Git.
|
||||
Reference in new issue
Block a user