The virtual machine creation script creates a complete Windows 11 on Arm virtual machine with the all
option. The default values are used for all configurable parameters. The location to store the VM files is also provided as an argument.
To create a new VM, run the command:
./create-win11-vm.sh all $HOME/win11-vm
This single command executes all required virtual machine creation steps as explained in the previous section.
The VM data is stored in the $HOME/win11-vm
directory, and Windows will install automatically without any user intervention.
Once the VM creation is complete, you’ll see:
QEMU closed successfully.
Windows installation should be complete!
You can now use: ./run-win11-vm.sh $HOME/win11-vm
Your Windows on Arm VM is now ready to use. You can proceed to the next section to run the VM or continue on this page to review additional information about modifying default values, running the individual steps of VM creation, and fixing common errors.
The creation script supports several options to customize your virtual machine setup.
For example, you can change the Windows user, password, and disk size using the arguments shown below.
./create-win11-vm.sh all $HOME/win11-vm --username MyUser --password MyPass --disksize 60
The table below lists the configuration options and default values.
Flag | Description | Default Value | Example |
---|---|---|---|
--username <name> | Windows user name | win11arm | --username Admin |
--password <pass> | Windows user password | win11arm | --password MySecurePass |
--disksize <size> | Disk size in GB | 40 | --disksize 60 |
--rdp-port <port> | RDP port for remote connections | 3389 | --rdp-port 3390 |
--language <lang> | Windows language | "English (United States)" | --language "English International" |
--vm-mem <size> | VM memory in GB | half of system RAM | --vm-mem 8 |
The creation script checks available disk space before starting.
An estimate of required disk space is shown in the table below.
Component | Size | Description |
---|---|---|
Windows 11 ISO | ~5GB | Downloaded from Microsoft |
VirtIO drivers | ~500MB | Performance drivers |
VM disk image | Variable | Default is 40 GB |
Temporary files | ~1GB | Installation workspace |
Total needed | ~7GB + disk size | Example: 47GB for default 40GB disk |
Create a VM with custom disk size and network port:
./create-win11-vm.sh all $HOME/win11-vm --disksize 60 --rdp-port 3390 --username Admin
Set up a VM with English International language:
./create-win11-vm.sh all $HOME/win11-vm --language "English International"
You can run each step of the VM creation process individually. Understanding each step helps with troubleshooting and customization.
./create-win11-vm.sh create $HOME/win11-vm
Command summary:
vm-config.txt
file with your configuration settings for referenceFiles created:
vm-config.txt
- Configuration reference fileconnect.remmina
- RDP connection template (if available)Each VM stores its configuration in vm-config.txt
:
# VM Configuration (for reference)
# Generated by create-win11-vm.sh v2.0.0
VM_PATH=$HOME/win11-vm
USERNAME=win11arm
PASSWORD=win11arm
DISKSIZE=40
RDP_PORT=3389
LANGUAGE=English (United States)
VM_MEM=8
CREATED=Thu Aug 28 10:30:45 UTC 2025
This step is lightweight and completes quickly. It establishes the workspace where all VM files will be stored.
./create-win11-vm.sh download $HOME/win11-vm
Command summary:
Files created:
installer.iso
- Windows 11 Arm64 installation mediaunattended/
directory - Contains drivers and installation automation filesunattended/autounattend.xml
- Windows unattended installation configurationunattended/firstlogin.ps1
- Post-installation scriptIf you already downloaded the Windows 11 installer ISO, you can copy it to your VM directory as installer.iso
before running this step. The script will detect the existing file and ask if you want to use it or download a fresh copy:
installer.iso already exists. Delete it and download a fresh copy? [Y/n]
Choosing ’n’ will skip the download and use your existing ISO, saving significant time and bandwidth.
Download Process Details: The script uses an automated process to download Windows 11 from Microsoft’s official servers:
./create-win11-vm.sh prepare $HOME/win11-vm
Command summary:
unattended.iso
containing drivers and installation filesFiles created:
unattended.iso
- ISO containing drivers and automation scriptsdisk.qcow2
- Main VM hard drive (empty, ready for Windows installation)Disk Creation Details: The script creates a QCOW2 disk image with these optimizations:
Important Note: If disk.qcow2
already exists, the script will warn you that proceeding will delete the existing VM’s hard drive and start over with a clean installation.
./create-win11-vm.sh firstboot $HOME/win11-vm
Command summary:
System Requirements Check: Before starting, the script verifies:
Automatic Resource Allocation:
If you don’t specify --vm-mem
, the script automatically allocates:
For example, on a system with 16GB RAM and 8 CPU cores:
The script launches QEMU with these settings:
virt
with KVM accelerationThe installation process performs the following steps:
The entire installation process typically takes 20-30 minutes depending on your system’s performance.
If you see an error about insufficient disk space:
Error: Insufficient free disk space. 40 GB is needed, but you only have 25 GB.
Use the following options to correct the error:
--disksize 30
If Windows ISO download fails:
Error: Failed to download Windows 11 installer.iso from Microsoft
Use the following options to correct the error:
installer.iso
If the VM fails to start due to memory issues:
Use the following options to correct the error:
--vm-mem 4
You now have a good understanding of virtual machine creation. The next section will cover how to run and connect to your VM using the run script.