Skip to main content

Diskless mini PC walkthrough

Screenshot placeholders

Images in this tutorial are structured placeholders. Replace them with real screenshots from Proxmox VE, the serial console, and a LAN client when you capture a validation run.

This tutorial turns a small x86 mini PC into a router without installing an OS to its internal disk. The router boots the routerd live ISO, stores configuration on USB, buffers logs in RAM, and flushes a compact archive to USB once per day.

Diskless mini PC flow

What you need

  • A mini PC with at least two network interfaces.
  • A USB stick for routerd persistence.
  • The latest routerd-live.iso.
  • Console access. On Proxmox VE, qm terminal works through the serial console.
  • A WAN network that can provide DHCPv4, or a static WAN address.
  • A LAN switch or isolated test bridge.

1. Prepare the USB stick

Create one partition and format it with a filesystem the live ISO can mount. ext4 is the best default. vfat and exfat also work for simple removable media. Label it ROUTERD so the ISO can find it automatically.

Example from a Linux workstation:

sudo mkfs.ext4 -L ROUTERD /dev/sdX1

Replace /dev/sdX1 with the actual USB partition. Do not format the wrong device.

2. Boot the live ISO

Download the fixed latest URL:

curl -LO https://github.com/imksoo/routerd/releases/latest/download/routerd-live.iso
curl -LO https://github.com/imksoo/routerd/releases/latest/download/routerd-live.iso.sha256
sha256sum -c routerd-live.iso.sha256

Boot the mini PC from the ISO. The same image works on a video console and a serial console.

PVE VM creation placeholder

For Proxmox VE:

qm create 200 \
--name routerd-live-demo \
--memory 1536 \
--cores 2 \
--ostype l26 \
--serial0 socket \
--vga serial0 \
--boot order=ide2 \
--ide2 local:iso/routerd-live.iso,media=cdrom \
--net0 virtio,bridge=vmbr0 \
--net1 virtio,bridge=vmbr490
qm start 200
qm terminal 200

Use an isolated LAN bridge for early DHCP and RA testing.

PVE ISO mount placeholder

3. Run the wizard

Log in as root. The live ISO starts the setup wizard.

Serial console placeholder

The wizard asks for:

  • router name
  • WAN interface
  • WAN IPv4 mode
  • LAN interface
  • LAN address
  • DHCPv4, DNS, NTP, RA, firewall, and NAT44 choices
  • management placement
  • USB persistence

Wizard WAN and LAN placeholder

When asked about USB persistence, choose yes and select the USB partition. If the partition is labeled ROUTERD, it should be listed automatically.

Wizard USB persistence placeholder

Enable the daily USB flush job unless you are only testing. The default log buffer is 100 MiB under /run/routerd/logs.

The live helper detects ext4, vfat, and exfat with blkid. It mounts USB persistence with async,noatime by default to reduce writes. If you need synchronous writes for a specific test, add routerd.usb_mount=sync to the kernel command line.

4. Confirm the first apply

After confirmation, the wizard writes:

/usr/local/etc/routerd/router.yaml

It then runs:

routerd validate --config /usr/local/etc/routerd/router.yaml
routerd plan --config /usr/local/etc/routerd/router.yaml
routerd apply --config /usr/local/etc/routerd/router.yaml --once

Check status:

routerctl status

routerctl status placeholder

The phase should become Healthy.

5. Test a LAN client

Connect a client to the LAN interface or test bridge.

The client should receive:

  • an IPv4 address from the configured DHCPv4 pool
  • default route through the router
  • DNS server pointing at the router
  • NTP server pointing at the router, when enabled

Basic checks:

dig @192.168.10.1 www.google.com A +short
curl -4 https://www.google.com/generate_204

LAN client curl placeholder

Adjust the address if you chose a different LAN prefix.

6. Reboot and confirm persistence

Reboot the mini PC with the USB stick still attached.

At boot, the live ISO:

  1. mounts the USB device
  2. restores routerd/router.yaml
  3. prepares /run/routerd/logs as tmpfs
  4. applies the router configuration
  5. starts the live routerd daemon

Log in and run:

routerctl status

The router should converge without rerunning the wizard.

7. How log persistence works

Logs are written to RAM first:

/run/routerd/logs

The daily flush job copies these artifacts to USB:

  • current router.yaml
  • routerd state snapshot
  • compressed log archive

This avoids constant writes to USB flash. If the tmpfs buffer exceeds the configured limit, older files are removed first.

You can flush manually:

/usr/share/routerd/live-persistence.sh flush

Before physically removing the USB device, flush and unmount it:

/usr/share/routerd/live-persistence.sh flush
/usr/share/routerd/live-persistence.sh umount

If the device is removed without unmounting, routerd keeps running from RAM and prints a warning. New logs remain in tmpfs until the USB device is available again.

Troubleshooting

The wizard does not list the USB stick

Check the partition from the shell:

blkid
lsblk -f

If needed, pass the device explicitly on the kernel command line:

routerd.usb=/dev/sdb1

The router boots into wizard mode again

The ISO did not find a saved config. Mount the USB device and check:

mount /dev/sdX1 /mnt
ls -l /mnt/routerd/router.yaml

Logs are missing after reboot

Logs are buffered in RAM. They persist only after the daily flush job runs or after a manual flush.

The LAN client has no address

Check that the LAN interface is the one selected in the wizard:

routerctl status --json
ip addr

If you are testing in Proxmox VE, confirm the client and router LAN NIC are on the same isolated bridge.