Skip to content

Instantly share code, notes, and snippets.

@PatrickLang
Last active November 14, 2023 08:20
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PatrickLang/820aa9e8c60654da051c139fb245fae8 to your computer and use it in GitHub Desktop.
Save PatrickLang/820aa9e8c60654da051c139fb245fae8 to your computer and use it in GitHub Desktop.
Booting Windows Server 2016 core from eMMC

Booting Windows Server 2016 Core from eMMC devices

Comparing drivers between Desktop & Core editions

The Windows installation ISO contains multiple Windows image files (WIM):

  • boot.wim - this is used to boot the Windows Preinstallation Environment (WinPE) for a clean install
  • install.wim - this contains the image(s) that will be installed.

The Windows Server 2016 ISO contains multiple versions in this single install.wim file which is why the same media can be used to install Standard or Datacenter editions, with the desktop experience or without it (core).

Mount the ISO & find the drive letter for it

PS 04/19/2017 21:39:52 C:\Users\Patrick\Source\packer-windows
>Mount-DiskImage (get-item 14393.0.161119-1705.RS1_REFRESH_SERVER_EVAL_X64FRE_EN-US.ISO).FullName
PS 04/19/2017 21:40:08 C:\Users\Patrick\Source\packer-windows
>get-volume

DriveLetter FriendlyName          FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------          -------------- --------- ------------ ----------------- -------------      ----
                                  NTFS           Fixed     Healthy      OK                     91.64 MB    471 MB
                                  NTFS           Fixed     Healthy      OK                     352.1 MB    869 MB
E           SSS_X64FREE_EN-US_DV9 Unknown        CD-ROM    Healthy      OK                          0 B   6.49 GB
D                                 NTFS           Fixed     Healthy      OK                     38.08 GB 237.67 GB
                                  NTFS           Fixed     Healthy      OK                     434.6 MB    450 MB
C                                 NTFS           Fixed     Healthy      OK                     57.91 GB 445.73 GB
                                  NTFS           Fixed     Healthy      OK                    319.84 MB    333 MB

Find the WIM files

PS 04/19/2017 21:40:12 C:\Users\Patrick\Source\packer-windows
>e:
PS 04/19/2017 21:40:15 E:\
>cd .\sources\
PS 04/19/2017 21:40:20 E:\sources
>dir *.wim


    Directory: E:\sources


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
--r---        7/16/2016   9:49 AM      269613381 boot.wim
--r---         1/6/2017   8:08 PM     6023286832 install.wim

Make directories to mount each WIM

PS 04/19/2017 21:40:22 E:\sources
>mkdir c:\mount\boot


    Directory: C:\mount


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        4/19/2017   9:40 PM                boot


PS 04/19/2017 21:40:53 E:\sources
>mkdir c:\mount\install


    Directory: C:\mount


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        4/19/2017   9:40 PM                install

Look at available images in each WIM


dism /get-imageinfo /imagefile:boot.wim

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Details for image : boot.wim

Index : 1
Name : Microsoft Windows PE (x64)
Description : Microsoft Windows PE (x64)
Size : 1,501,424,837 bytes

Index : 2
Name : Microsoft Windows Setup (x64)
Description : Microsoft Windows Setup (x64)
Size : 1,652,197,842 bytes

The operation completed successfully.

dism /get-imageinfo /imagefile:install.wim

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Details for image : install.wim

Index : 1
Name : Windows Server 2016 Standard Evaluation
Description : This option (recommended) reduces management and servicing by installing only what is needed to run most server roles and applications. It does not include a GU
I, but you can fully manage the server locally or remotely with Windows PowerShell or other tools. For more details see "Windows Server Installation Options."
Size : 9,235,873,810 bytes

Index : 2
Name : Windows Server 2016 Standard Evaluation (Desktop Experience)
Description : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation.
 All server roles and features are supported. For more details see "Windows Server Installation Options."
Size : 15,305,218,110 bytes

Index : 3
Name : Windows Server 2016 Datacenter Evaluation
Description : This option (recommended) reduces management and servicing by installing only what is needed to run most server roles and applications. It does not include a GU
I, but you can fully manage the server locally or remotely with Windows PowerShell or other tools. For more details see "Windows Server Installation Options."
Size : 9,234,074,002 bytes

Index : 4
Name : Windows Server 2016 Datacenter Evaluation (Desktop Experience)
Description : This option is useful when a GUI is required—for example, to provide backward compatibility for an application that cannot be run on a Server Core installation.
 All server roles and features are supported. For more details see "Windows Server Installation Options."
Size : 15,316,399,667 bytes

The operation completed successfully.

Mount each WIM:

  • Boot.wim for windows setup
  • install.wim with the index of the Windows SKU you want
dism.exe /mount-wim /wimfile:boot.wim /index:2 /mountdir:c:\mount\boot /readonly

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Mounting image
[==========================100.0%==========================]
The operation completed successfully.
PS 04/19/2017 21:44:05 E:\sources
>dism.exe /mount-wim /wimfile:install.wim /index:3 /mountdir:c:\mount\install /readonly

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Mounting image
[==========================100.0%==========================]
The operation completed successfully.

Check out the files inside the WIMs:

cd C:\mount\boot\
PS 04/19/2017 21:46:05 C:\mount\boot
>cd .\windows\system32\drivers\
PS 04/19/2017 21:46:11 C:\mount\boot\windows\system32\drivers
>dir *sd*


    Directory: C:\mount\boot\windows\system32\drivers


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---l        7/16/2016   5:10 AM         187232 dumpsd.sys
-a---l        7/16/2016   5:11 AM          62816 fsdepends.sys
-a---l        7/16/2016   5:11 AM          75776 mpsdrv.sys
-a---l        7/16/2016   5:10 AM         279904 sdbus.sys
-a---l        7/16/2016   5:10 AM          95584 sdport.sys
-a---l        7/16/2016   5:10 AM          95072 sdstor.sys


PS 04/19/2017 21:46:13 C:\mount\boot\windows\system32\drivers
>cd C:\mount\install\
PS 04/19/2017 21:46:28 C:\mount\install
>cd .\Windows\system32\drivers\
PS 04/19/2017 21:46:36 C:\mount\install\Windows\system32\drivers
>dir *sd*


    Directory: C:\mount\install\Windows\system32\drivers


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---l        7/16/2016   6:09 AM          62816 fsdepends.sys
-a---l        7/16/2016   6:10 AM          75776 mpsdrv.sys
-a---l        7/16/2016   6:12 AM         123232 WdNisDrv.sys

Unmount WIMs

PS 04/19/2017 21:53:45 E:\sources
>dism.exe /unmount-wim /mountdir:c:\mount\install /discard

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Image File : E:\sources\install.wim
Image Index : 3
Unmounting image
[==========================100.0%==========================]
The operation completed successfully.

Compare to another SKU (desktop experience)

PS 04/19/2017 21:55:11 E:\sources
>dism.exe /mount-wim /wimfile:install.wim /index:4 /mountdir:c:\mount\install /readonly

Deployment Image Servicing and Management tool
Version: 10.0.15063.0

Mounting image
[==========================100.0%==========================]
The operation completed successfully.
PS 04/19/2017 21:57:45 E:\sources
>dir C:\mount\install\Windows\system32\drivers\*sd*


    Directory: C:\mount\install\Windows\system32\drivers


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---l         1/6/2017   7:57 PM         187232 dumpsd.sys
-a---l        7/16/2016   6:18 AM          31744 dumpsdport.sys
-a---l        7/16/2016   6:18 AM          62816 fsdepends.sys
-a---l        7/16/2016   6:18 AM          75776 mpsdrv.sys
-a---l         1/6/2017   7:57 PM         279904 sdbus.sys
-a---l        7/16/2016   6:18 AM          95584 sdport.sys
-a---l        7/16/2016   6:17 AM          95072 sdstor.sys
-a---l        7/16/2016   6:19 AM         123232 WdNisDrv.sys

Final conclusion - SD drivers are included in server with desktop but not core.

The install.wim for core could be mounted and modified to include the SD drivers, then a new ISO can be built to handle the install.

Making a modified boot image

These threads have some hints to what's needed for the Up board. The steps below try to implement them into a working install image.

mkdir c:\temp # Temporary copy of drivers to install
mkdir c:\slipstream # Working directory for customizing the Windows image
cd c:\slipstream
robocopy /s /e e:\ extracted 

# Copy ISO contents to local directory
cd C:\slipstream\extracted\sources

# Mount server core datacenter installation media
dism.exe /mount-wim /wimfile:install.wim /index:3 /mountdir:c:\slipstream\mount\install

# Mount boot media
dism.exe /mount-wim /wimfile:boot.wim /index:2 /mountdir:c:\slipstream\mount\boot /readonly

# Copy drivers from boot media to temp
cd c:\slipstream\mount
copy .\boot\windows\inf\sd* c:\temp
copy .\boot\windows\system32\drivers\sd* c:\temp

# Add the latest cumulative update
dism.exe /image:install /add-package:"C:\Users\Patrick\Source\packer-windows\http\windows10.0-kb4015217-x64_60bfcc7b365f9ab40608e2fb96bc2be8229bc319.msu"

# Add drivers to server core media
dism.exe /image:install /add-driver /driver:"C:\temp"  /forceunsigned /recurse

# Unmount images
dism.exe /unmount-wim /mountdir:c:\slipstream\mount\boot /discard
dism.exe /unmount-wim /mountdir:c:\slipstream\mount\install /commit

Creating a multi-partition USB drive

Over the last few years Windows has grown enough to make the install.wim files > 4GB. This is a problem because only UDF (DVD) and FAT32 drives are bootable from EFI-based systems. The workaround is that you need a FAT32 partition with the boot files or WinPE, and another NTFS partition to hold the Windows installation files.

Luckily, Windows 10 1703 can create multiple partitions per USB removable drive which wasn't possible on previous versions of Windows.

The Windows Assessment and Deployment Kit for Windows 10 1703 has a version of WinPE that can handle multiple partitions on USB removable drives.

Once you have a Windows 10 1703 machine ready, follow the steps here to build a multi-partition USB drive.

Installation

Boot from the USB drive, and you'll be at a command prompt in Windows PE. Run diskpart.exe, and run list volume. Find the other drive letter for the install media, and run setup there such as e:\setup.exe. Install as normal and it will have the right drivers. The eMMC drive will show up just like any HDD or SSD.

Once it's installed, you can check the drive list and bus type:

Get-PhysicalDisk | ft FriendlyName, BusType, MediaType, PhysicalSectorSize, SpindleSpeed, Size -AutoSize

FriendlyName        BusType MediaType   PhysicalSectorSize SpindleSpeed        Size
------------        ------- ---------   ------------------ ------------        ----
TOSHIBA TransMemory USB     Unspecified                512            0 31024349184
VID:11 032G72       SD      SSD                       4096            0 31268536320
  • The VID:11 ... device is the eMMC drive in my Kangaroo PC.
  • The TOSHIBA TransMemory is the USB drive with Windows PE and the Windows Server 2016 setup files on it

Related documents

@PatrickLang
Copy link
Author

@StefanScherer - I did some updates and it worked on my Kangaroo PC. It's similar to the UP board and has the same Atom x5-z8500 CPU with 32Gb eMMC storage. It bugchecked after installing core initially, but now it's working with the added drivers.

@StefanScherer
Copy link

@PatrickLang Thank you so much. Yes I have a Win10 1703, so I can walk through your guide and try it with one of the UP boards.

@StefanScherer
Copy link

Thanks @PatrickLang, I've installed Windows Server 2016 on one of the UP boards. I haven't fully scripted it, but very close to reproduce it with the same commands shown here. I use a single FAT32 partition with a splitted install.wim file, so the UP board can directly boot and start the installation.

@dxgldotorg
Copy link

This method works with Windows Server Insider Preview (post-2022).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment