How to Implement Network Boot (PXE) for Multiple Windows 7 Machines Using a Single Shared Image


3 views

Network booting Windows 7 in a multi-machine environment presents unique challenges compared to modern Windows versions. The university lab scenario you described essentially used a diskless workstation model with write-filter protection, where all clients booted from a centralized image while maintaining individual user storage.

1. PXE Server (Linux/Windows)
2. Windows Deployment Services (WDS) or custom TFTP server
3. Sysprep-prepared Windows 7 image
4. RAM disk solution (like Firadisk or WinVBlock)
5. Network share for user profiles

1. Prepare the Base Image

First, create a reference Windows 7 installation with all required software:

# Sample sysprep answer file (Unattend.xml)
<settings pass="generalize">
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64">
        <CopyProfile>true</CopyProfile>
    </component>
</settings>

Run sysprep with generalize option to remove machine-specific identifiers:

C:\Windows\System32\sysprep\sysprep.exe /oobe /generalize /shutdown

2. Configure PXE Boot Environment

Set up a Linux PXE server with these essential services:

# Sample dnsmasq config for PXE
dhcp-range=192.168.1.100,192.168.1.200,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot

3. Create RAM Disk Boot Solution

Inject Firadisk or WinVBlock drivers into your boot.wim and install.wim:

# Using DISM to add drivers
dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount
dism /image:mount /add-driver /driver:firadisk.inf
dism /unmount-wim /mountdir:mount /commit

4. Configure Network-Based Registry Hives

Modify the registry to use network-based user profiles:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
"ProfilesDirectory"="\\\\server\\profiles\\%USERNAME%"
"Default"="\\\\server\\profiles\\default"

For better performance with multiple simultaneous boots:

# Samba config for the image share
[win7image]
   path = /srv/win7image
   read only = yes
   writable = no
   strict locking = no
   use sendfile = yes
   aio read size = 16384
   aio write size = 16384

If clients fail to boot, check these log locations:

# On Linux PXE server:
tail -f /var/log/syslog | grep dnsmasq

# On Windows clients (if they partially boot):
wevtutil qe System /q:"*[System[Provider[@Name='Microsoft-Windows-WDS-Client']]]"

For driver conflicts, analyze boot logs with:

bcdedit /set {default} bootlog yes

Implement these measures for a secure deployment:

# IPTables rules for PXE server
iptables -A INPUT -p udp --dport 67:69 -j ACCEPT
iptables -A INPUT -p tcp --dport 445 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p udp --dport 137:138 -s 192.168.1.0/24 -j ACCEPT

Setting up a diskless Windows 7 environment where multiple clients boot from a single network image requires overcoming several technical hurdles. The main obstacles include Windows' hardware abstraction layer (HAL) requirements, driver compatibility, and license activation when running from a shared image.

  • Windows Deployment Services (WDS) server
  • Pre-boot Execution Environment (PXE) server
  • Windows 7 Enterprise or Ultimate edition (for proper licensing)
  • iSCSI target software (StarWind or Windows Server iSCSI target)
  • RAM disk driver (like Dataram RAMDisk)

Here's the step-by-step process to create a shared Windows 7 PXE boot environment:

# Sample PXE configuration (pxelinux.cfg/default)
DEFAULT win7_netboot
LABEL win7_netboot
KERNEL memdisk
APPEND initrd=win7boot.img raw

The critical part is preparing the Windows 7 image to support multiple simultaneous boots:

# Sysprep configuration (answer file)
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="generalize">
        <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
            <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
        </component>
    </settings>
</unattend>

Each client needs specific PXE boot settings and network drivers:

# Sample network boot script (batch file)
wpeutil InitializeNetwork
net use Z: \\server\share
diskpart /s Z:\scripts\diskpart.txt
dism /apply-image /imagefile:Z:\images\win7.wim /index:1 /applydir:W:\

For optimal performance with multiple clients:

  • Use SSD storage for the image server
  • Implement multicast delivery for the boot image
  • Configure write-back caching on clients
  • Allocate sufficient RAM (minimum 4GB per client)

Frequent problems and their solutions:

  • BSOD during boot: Ensure all necessary mass storage drivers are included
  • Network timeout: Adjust PXE timeout values in DHCP options
  • Activation failures: Use KMS volume licensing