This is a guide that tells people how to take an existing Hurd distro vm running
on qemu and flash it to a spare SSD.  One can then insert the SSD and be running
the Hurd.  It's sooo easy we should document it!
---
 faq/drivers.mdwn                 |  2 +-
 hurd/running.mdwn                |  2 +-
 hurd/running/Guix.mdwn           |  5 ++
 hurd/running/debian.mdwn         |  4 ++
 hurd/running/flash_qemu_img.mdwn | 78 ++++++++++++++++++++++++++++++++
 hurd/running/qemu.mdwn           |  5 ++
 6 files changed, 94 insertions(+), 2 deletions(-)
 create mode 100644 hurd/running/flash_qemu_img.mdwn

diff --git a/faq/drivers.mdwn b/faq/drivers.mdwn
index 02a0c5e9..dd29687a 100644
--- a/faq/drivers.mdwn
+++ b/faq/drivers.mdwn
@@ -22,7 +22,7 @@ in the BIOS.  A cheaper option is the T43 (2GB max RAM).
 **Please note that as of January 2026, users must install the Hurd on physical
 machines with a physical CD, because the Hurd has almost no USB support.**  
Also
 please see our [[recommended Hurd Distributions page|hurd/running/distrib]].
-One can also run virtually run the hurd via [[qemu|hurd/running/qemu]].
+One can also virtually run the hurd via [[qemu|hurd/running/qemu]] and use 
that image to [[install to real hardware|hurd/running/flash_qemu_img]].
 
 Other working Thinkpads include the X200, T400, 
 [[T410|https://logs.guix.gnu.org/hurd/2025-04-25.log#103752]] or T500 
Thinkpads,
diff --git a/hurd/running.mdwn b/hurd/running.mdwn
index c60efb5a..ee0106e2 100644
--- a/hurd/running.mdwn
+++ b/hurd/running.mdwn
@@ -17,7 +17,7 @@ There are several different ways to run a GNU/Hurd system:
 * [[Distributions|Distrib]] - Distros based on the Hurd
 * [[microkernel/mach/gnumach/ports/Xen]] - In Xen
 * [[Live_CD]] - As a live CD without installing (can also be run in QEMU)
-* [[QEMU]] - In QEMU
+* [[QEMU]] - In QEMU, which you can [[flash to real 
hardware|hurd/running/flash_qemu_img]]
 * [[Cloud]] - In the "cloud": OpenStack
 * [[Chroots|chroot]] need a couple of tricks to work properly.
 * [[VirtualBox]] - In VirtualBox
diff --git a/hurd/running/Guix.mdwn b/hurd/running/Guix.mdwn
index 30b7b62a..36c1ceda 100644
--- a/hurd/running/Guix.mdwn
+++ b/hurd/running/Guix.mdwn
@@ -6,6 +6,11 @@ GNU/Hurd support has been integrated in Guix.
 # QEMU Image
 [[!inline pages=hurd/running/Guix/qemu_image raw=yes feeds=no]]
 
+---
+# Flash qemu image to disk
+
+You can install the Hurd to bare metal via flashing a working [[qemu 
image|hurd/running/flash_qemu_img]].
+
 ---
 # Documentation
 
diff --git a/hurd/running/debian.mdwn b/hurd/running/debian.mdwn
index e28d7ed4..9599c1d4 100644
--- a/hurd/running/debian.mdwn
+++ b/hurd/running/debian.mdwn
@@ -22,6 +22,10 @@ As of late 2025 installation may require larger amount of 
RAM (≥ 2 GB) due to
 # <a id="crossinstall">CrossInstall</a>
 It is possible to install a Debian GNU/Hurd system on a spare partition from 
an existing Debian GNU/Linux installation. We call this [[CrossInstall]].
 
+---
+# Flash qemu image to disk
+You can install the Hurd to bare metal via flashing a working [[qemu 
image|hurd/running/flash_qemu_img]].
+
 ---
 # Contributing
 - [[Porting]] — Helping with porting packages
diff --git a/hurd/running/flash_qemu_img.mdwn b/hurd/running/flash_qemu_img.mdwn
new file mode 100644
index 00000000..38d3fd7d
--- /dev/null
+++ b/hurd/running/flash_qemu_img.mdwn
@@ -0,0 +1,78 @@
+[[!meta copyright="Copyright © 2026 Free Software Foundation,
+Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+[[!meta title="Installing the Hurd from a Qemu Image"]]
+
+# Installing the Hurd from a Qemu Image
+
+Perhaps the easiest method of installing the Hurd on [[real
+hardware|faq/drivers]] is to use a GNU/Linux machine to download a [[qemu
+image|https://cdimage.debian.org/cdimage/ports/latest/hurd-i386/]] (or [[64 bit
+image|https://cdimage.debian.org/cdimage/ports/latest/hurd-amd64/]]), run it 
via
+[[hurd/running/qemu]], update the distribution, install the packages you want,
+and [[configure your hurd to your
+liking|https://www.debian.org/ports/hurd/hurd-install]], and finally flash the
+image directly to your SSD.
+
+Please note that as of Feb 2026, the 64 bit image uses [[hurd/rump/rumpdisk]] 
by
+default, while the 32 bit image does not use rumpdisk, because rumpdisk is a
+little memory hungry at the moment.  If you wish, you can switch to 
[[hurd/rump/rumpdisk]]. Please read this [[faq 
entry|faq/2_gib_partition_limit]] to learn more about maximum partition sizes.
+
+#### Getting a qemu image
+
+[[!inline pages=hurd/running/debian/qemu_image raw=yes feeds=no]]
+
+#### Flashing a qemu hurd image to an SSD or HDD
+
+Next attach your spare SSD to your GNU/Linux machine via USB to SATA dongle. 
StarTech dongles are a good choice.  Once you are plugged in run this command 
to determine your spare SSD's device name.
+
+    $ lsblk
+    NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
+    sda             8:0    0  74.5G  0 disk
+    ├─sda1          8:1    0     2M  0 part
+    └─sda2          8:2    0  74.5G  0 part
+      └─cryptroot 253:0    0  74.5G  0 crypt /gnu/store
+                                             /
+    sdb             8:16   0 953.9G  0 disk
+    └─sdb4          8:20   0 953.9G  0 part
+
+Normally `/dev/sda` and `/dev/sdaN` is GNU/Linux's SSD and `/dev/sdb` is your 
blank SSD.  In the above example, Guix System is my `sda` and `sdb` is my spare 
SSD. To double check your spare SSD's device name, run the above command with 
your SATA dongle connected and disconnected.  Once you have your spare SSD's 
device name, flash your hurd image to it. Here's the command that worked for me:
+
+    # dd if=debian-hurd*.img of=/dev/sdb bs=1m status=progress
+
+Note do not write `/dev/sdb1`.  Write it as `/dev/sdb`.  The vm image already 
contains the partitions.
+
+#### Expand your hurd filesystem partitions.
+
+    $ lsblk | grep sdb
+    NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
+    sdb             8:16   0 238.5G  0 disk
+    ├─sdb1          8:17   0   953M  0 part
+    ├─sdb2          8:18   0     1K  0 part
+    └─sdb5          8:21   0     4G  0 part
+
+Sweet!  Flashing was successful! You cannot really tell here, but my Hurd 
partitions are `sdb1` swap, `sdb2` extended, `sdb5` ext2.  We need to expand 
the `sdb2` and `sdb5` and resize the filesystem to take up all available space 
(please be aware of the [[partition size limits|faq/2_gib_partition_limit]]). 
That's easily achieved via:
+
+    # parted /dev/sdb
+    (parted) resizepart 2 100%
+    (parted) resizepart 5 100%
+    (parted) quit
+    # resize2fs /dev/sdb5
+    $ echo new let's check out work!
+    $ lsblk | grep sdb
+    NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
+    sdb             8:16   0 238.5G  0 disk
+    ├─sdb1          8:17   0   953M  0 part
+    ├─sdb2          8:18   0     1K  0 part
+    └─sdb5          8:21   0 237.5G  0 part
+
+It looks like our ext2 filesystem has expanded to about 240G.  Now we can 
unplug our SATA dongle, install the SSD to a [[supported Hurd 
machine|faq/drivers]] and boot!  Our [[hurd/running/x]] page gives some good 
window manager recommendations!
+
diff --git a/hurd/running/qemu.mdwn b/hurd/running/qemu.mdwn
index c56292c8..b6cfbc70 100644
--- a/hurd/running/qemu.mdwn
+++ b/hurd/running/qemu.mdwn
@@ -433,6 +433,11 @@ Note that, contrary to [[GRUB]]'s configuration file, you 
don't specify
 "`argv[0]`" here, and it's fortunate that neither ext2fs nor exec need a comma
 on their command line...
 
+---
+# Flashing your qemu image to real hardware
+
+If you have a working Hurd distribution running on qemu, then you can [[flash 
that image to a spare SSD|hurd/running/flash_qemu_img]].  You could then 
install that spare SSD to a [[machine that can run the Hurd|faq/drivers]].  
This is an easy way to install the Hurd on real hardware.
+
 ---
 # Related Links
 
-- 
2.52.0


Reply via email to