<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://routerd.net/blog</id>
    <title>routerd Blog</title>
    <updated>2026-05-10T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://routerd.net/blog"/>
    <subtitle>routerd Blog</subtitle>
    <icon>https://routerd.net/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[From virtual SDN routing to a diskless mini PC router]]></title>
        <id>https://routerd.net/blog/diskless-minipc-with-routerd</id>
        <link href="https://routerd.net/blog/diskless-minipc-with-routerd"/>
        <updated>2026-05-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[routerd is built for an unusually wide deployment spectrum.]]></summary>
        <content type="html"><![CDATA[<p>routerd is built for an unusually wide deployment spectrum.</p>
<p>At one end, it can route between virtual SDN or VNET segments in a lab. At the
other end, it can boot a small physical mini PC from a live ISO, save its
configuration on USB, buffer logs in RAM, and become a persistent home router
without installing an operating system to an internal disk.</p>
<p>That range is the point. Real routers are not just packet forwarding. They are
DHCP, DNS, prefix delegation, tunnels, NAT, firewall policy, health checks,
logs, service units, sysctl values, and recovery behavior. routerd keeps those
parts in one typed resource graph.</p>
<p><img decoding="async" loading="lazy" alt="Diskless mini PC flow" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5MjAiIGhlaWdodD0iMzYwIiB2aWV3Qm94PSIwIDAgOTIwIDM2MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsbGVkYnk9InRpdGxlIGRlc2MiPgogIDx0aXRsZSBpZD0idGl0bGUiPnJvdXRlcmQgZGlza2xlc3MgbWluaSBQQyBmbG93PC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+QSBtaW5pIFBDIGJvb3RzIHRoZSByb3V0ZXJkIGxpdmUgSVNPLCByZWFkcyBjb25maWd1cmF0aW9uIGZyb20gVVNCLCBidWZmZXJzIGxvZ3MgaW4gdG1wZnMsIGFuZCBzZXJ2ZXMgV0FOIGFuZCBMQU4gbmV0d29ya3MuPC9kZXNjPgogIDxyZWN0IHdpZHRoPSI5MjAiIGhlaWdodD0iMzYwIiBmaWxsPSIjZjhmYWZjIi8+CiAgPHJlY3QgeD0iNDAiIHk9IjgwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjkyIiByeD0iMTAiIGZpbGw9IiNlMGYyZmUiIHN0cm9rZT0iIzAzNjlhMSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTIwIiB5PSIxMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE4IiBmaWxsPSIjMGYxNzJhIj5XQU48L3RleHQ+CiAgPHRleHQgeD0iMTIwIiB5PSIxNDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMzM0MTU1Ij5ESENQIC8gc3RhdGljPC90ZXh0PgogIDxyZWN0IHg9IjM4MCIgeT0iNTQiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTQ4IiByeD0iMTQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzQ3NTU2OSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iNDgwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IkludGVyLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMwZjE3MmEiPk1pbmkgUEM8L3RleHQ+CiAgPHRleHQgeD0iNDgwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMzM0MTU1Ij5yb3V0ZXJkIGxpdmUgSVNPPC90ZXh0PgogIDx0ZXh0IHg9IjQ4MCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgZmlsbD0iIzMzNDE1NSI+YXBwbHkgKyBXZWIgQ29uc29sZTwvdGV4dD4KICA8cmVjdCB4PSI3MDQiIHk9IjgwIiB3aWR0aD0iMTc2IiBoZWlnaHQ9IjkyIiByeD0iMTAiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iNzkyIiB5PSIxMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE4IiBmaWxsPSIjMGYxNzJhIj5MQU48L3RleHQ+CiAgPHRleHQgeD0iNzkyIiB5PSIxNDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMzM0MTU1Ij5ESENQIC8gRE5TIC8gTlRQPC90ZXh0PgogIDxyZWN0IHg9IjM0MiIgeT0iMjUwIiB3aWR0aD0iMTMyIiBoZWlnaHQ9IjYyIiByeD0iMTAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iNDA4IiB5PSIyNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMGYxNzJhIj5VU0I8L3RleHQ+CiAgPHRleHQgeD0iNDA4IiB5PSIyOTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJJbnRlcixBcmlhbCxzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmaWxsPSIjMzM0MTU1Ij5yb3V0ZXIueWFtbDwvdGV4dD4KICA8cmVjdCB4PSI1MjAiIHk9IjI1MCIgd2lkdGg9IjE1NCIgaGVpZ2h0PSI2MiIgcng9IjEwIiBmaWxsPSIjZWRlOWZlIiBzdHJva2U9IiM3YzNhZWQiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjU5NyIgeT0iMjc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzBmMTcyYSI+dG1wZnMgbG9nczwvdGV4dD4KICA8dGV4dCB4PSI1OTciIHk9IjI5NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IkludGVyLEFyaWFsLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzMzQxNTUiPmRhaWx5IFVTQiBmbHVzaDwvdGV4dD4KICA8cGF0aCBkPSJNMjAwIDEyNmgxNzIiIHN0cm9rZT0iIzAyODRjNyIgc3Ryb2tlLXdpZHRoPSI0IiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIvPgogIDxwYXRoIGQ9Ik01ODAgMTI2aDExNiIgc3Ryb2tlPSIjMTZhMzRhIiBzdHJva2Utd2lkdGg9IjQiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIi8+CiAgPHBhdGggZD0iTTQzOCAyNTBsMjgtNDgiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIzIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIvPgogIDxwYXRoIGQ9Ik01NzAgMjAybDE4IDQ4IiBzdHJva2U9IiM3YzNhZWQiIHN0cm9rZS13aWR0aD0iMyIgZmlsbD0ibm9uZSIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KICA8cGF0aCBkPSJNNTM4IDI1MGMtMzAtMjgtNzItMjgtOTggMCIgc3Ryb2tlPSIjNjQ3NDhiIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiIHN0cm9rZS1kYXNoYXJyYXk9IjYgNiIvPgogIDx0ZXh0IHg9IjQ4OCIgeT0iMjM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iSW50ZXIsQXJpYWwsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMiIgZmlsbD0iIzQ3NTU2OSI+Zmx1c2g8L3RleHQ+CiAgPGRlZnM+CiAgICA8bWFya2VyIGlkPSJhcnJvdyIgbWFya2VyV2lkdGg9IjEwIiBtYXJrZXJIZWlnaHQ9IjEwIiByZWZYPSI4IiByZWZZPSIzIiBvcmllbnQ9ImF1dG8iIG1hcmtlclVuaXRzPSJzdHJva2VXaWR0aCI+CiAgICAgIDxwYXRoIGQ9Ik0wLDAgTDAsNiBMOSwzIHoiIGZpbGw9IiM0NzU1NjkiLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KPC9zdmc+Cg==" width="920" height="360" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-a-diskless-router">Why a diskless router?<a href="https://routerd.net/blog/diskless-minipc-with-routerd#why-a-diskless-router" class="hash-link" aria-label="Direct link to Why a diskless router?" title="Direct link to Why a diskless router?">​</a></h2>
<p>Small N100 or NUC-like PCs are good router hardware. They are fast enough for a
serious home network, inexpensive, and easy to replace. But many users do not
want another full Linux installation to maintain.</p>
<p>The routerd live ISO gives you a middle ground:</p>
<ul>
<li>boot from ISO</li>
<li>answer a text wizard</li>
<li>store <code>router.yaml</code> on a USB stick</li>
<li>keep logs in tmpfs</li>
<li>flush compressed logs and state to USB once per day</li>
<li>reboot back into the same router state</li>
</ul>
<p>It is close to an appliance experience, but the source of truth is still a
normal YAML file you can read, copy, and version.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it-in-proxmox-ve-first">Try it in Proxmox VE first<a href="https://routerd.net/blog/diskless-minipc-with-routerd#try-it-in-proxmox-ve-first" class="hash-link" aria-label="Direct link to Try it in Proxmox VE first" title="Direct link to Try it in Proxmox VE first">​</a></h2>
<p>The same ISO works well as a lab VM. Create a VM with one WAN NIC and one
isolated LAN NIC, mount <code>routerd-live.iso</code>, and use the serial console:</p>
<p><img decoding="async" loading="lazy" alt="PVE VM creation placeholder" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgdmlld0JveD0iMCAwIDEyODAgNzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+UFZFIFZNIGNyZWF0aW9uIHBsYWNlaG9sZGVyPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+UGxhY2Vob2xkZXIgZm9yIGEgUHJveG1veCBWRSBWTSBjcmVhdGlvbiBzY3JlZW5zaG90LjwvZGVzYz4KICA8cmVjdCB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGZpbGw9IiNmNGY2ZmIiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxMTg0IiBoZWlnaHQ9IjYyNCIgcng9IjE4IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiNjN2QwZTMiLz4KICA8cmVjdCB4PSI0OCIgeT0iNDgiIHdpZHRoPSIxMTg0IiBoZWlnaHQ9IjU4IiByeD0iMTgiIGZpbGw9IiMyNDMyNGIiLz4KICA8dGV4dCB4PSI4MCIgeT0iODYiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyNCIgZmlsbD0iI2ZmZmZmZiI+aW1hZ2U6Ly9wdmUtdm0tY3JlYXRlPC90ZXh0PgogIDxyZWN0IHg9IjgwIiB5PSIxNDIiIHdpZHRoPSIyODAiIGhlaWdodD0iNDg2IiByeD0iMTIiIGZpbGw9IiNlZGYyZmEiLz4KICA8cmVjdCB4PSIzOTYiIHk9IjE0MiIgd2lkdGg9Ijc4MCIgaGVpZ2h0PSI3MCIgcng9IjEwIiBmaWxsPSIjZTdlZWY4Ii8+CiAgPHJlY3QgeD0iMzk2IiB5PSIyNDIiIHdpZHRoPSI3ODAiIGhlaWdodD0iNzAiIHJ4PSIxMCIgZmlsbD0iI2U3ZWVmOCIvPgogIDxyZWN0IHg9IjM5NiIgeT0iMzQyIiB3aWR0aD0iNzgwIiBoZWlnaHQ9IjcwIiByeD0iMTAiIGZpbGw9IiNlN2VlZjgiLz4KICA8cmVjdCB4PSIzOTYiIHk9IjQ0MiIgd2lkdGg9Ijc4MCIgaGVpZ2h0PSI3MCIgcng9IjEwIiBmaWxsPSIjZTdlZWY4Ii8+CiAgPHRleHQgeD0iNDEyIiB5PSIxODQiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyOCIgZmlsbD0iIzI0MzI0YiI+Q3JlYXRlIFZNOiAyIHZDUFUsIDE1MzYgTWlCIFJBTSwgc2VyaWFsIGNvbnNvbGU8L3RleHQ+CiAgPHRleHQgeD0iNDEyIiB5PSIyODQiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyOCIgZmlsbD0iIzI0MzI0YiI+V0FOOiBicmlkZ2Ugdm1icjAgb3IgdXBzdHJlYW0gdGVzdCBuZXR3b3JrPC90ZXh0PgogIDx0ZXh0IHg9IjQxMiIgeT0iMzg0IiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiMyNDMyNGIiPkxBTjogaXNvbGF0ZWQgYnJpZGdlIGZvciBESENQIGFuZCBSQSB0ZXN0aW5nPC90ZXh0PgogIDx0ZXh0IHg9IjQxMiIgeT0iNDg0IiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiMyNDMyNGIiPkJvb3Qgb3JkZXI6IGxpdmUgSVNPIGZpcnN0PC90ZXh0Pgo8L3N2Zz4K" width="1280" height="720" class="img_ev3q"></p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">qm create </span><span class="token number" style="color:rgb(247, 140, 108)">200</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--name</span><span class="token plain"> routerd-live-demo </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--memory</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1536</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--cores</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--ostype</span><span class="token plain"> l26 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--serial0</span><span class="token plain"> socket </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--vga</span><span class="token plain"> serial0 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--boot</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(191, 199, 213)">order</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ide2 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--ide2</span><span class="token plain"> local:iso/routerd-live.iso,media</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">cdrom </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--net0</span><span class="token plain"> virtio,bridge</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">vmbr0 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--net1</span><span class="token plain"> virtio,bridge</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">vmbr490</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">qm start </span><span class="token number" style="color:rgb(247, 140, 108)">200</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">qm terminal </span><span class="token number" style="color:rgb(247, 140, 108)">200</span><br></span></code></pre></div></div>
<p>The wizard runs on both framebuffer and serial consoles:</p>
<p><img decoding="async" loading="lazy" alt="Serial console placeholder" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgdmlld0JveD0iMCAwIDEyODAgNzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+U2VyaWFsIGNvbnNvbGUgcGxhY2Vob2xkZXI8L3RpdGxlPgogIDxkZXNjIGlkPSJkZXNjIj5QbGFjZWhvbGRlciBmb3IgcW0gdGVybWluYWwgc2VyaWFsIGNvbnNvbGUgb3V0cHV0LjwvZGVzYz4KICA8cmVjdCB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGZpbGw9IiMwZDExMTciLz4KICA8dGV4dCB4PSI0OCIgeT0iNzIiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjMwIiBmaWxsPSIjN2VlNzg3Ij5pbWFnZTovL3NlcmlhbC1jb25zb2xlPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNDIiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij5yb3V0ZXJkIGxpdmUgSVNPIGJvb3RlZDwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTk4IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIyOCIgZmlsbD0iI2M5ZDFkOSI+bG9naW46IHJvb3Q8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjI1NCIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiNjOWQxZDkiPlN0YXJ0aW5nIGluc3RhbGwuc2ggY29uZmlndXJlLi4uPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIzNTAiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjNThhNmZmIj5Sb3V0ZXIgbmFtZSBbcm91dGVyZC1saXZlLWRlbW9dOjwvdGV4dD4KPC9zdmc+Cg==" width="1280" height="720" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="persist-only-what-matters">Persist only what matters<a href="https://routerd.net/blog/diskless-minipc-with-routerd#persist-only-what-matters" class="hash-link" aria-label="Direct link to Persist only what matters" title="Direct link to Persist only what matters">​</a></h2>
<p>When you enable USB persistence, routerd writes this small layout to the USB
partition:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">routerd/</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  router.yaml</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  logs/</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  state/</span><br></span></code></pre></div></div>
<p>The live helper detects <code>ext4</code>, <code>vfat</code>, and <code>exfat</code>, mounts with
<code>async,noatime</code> by default, and uses Alpine <code>lbu</code> to preserve selected local
state.</p>
<p><img decoding="async" loading="lazy" alt="USB persistence placeholder" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgdmlld0JveD0iMCAwIDEyODAgNzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+VVNCIHBlcnNpc3RlbmNlIHBsYWNlaG9sZGVyPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+UGxhY2Vob2xkZXIgZm9yIFVTQiBwZXJzaXN0ZW5jZSB3aXphcmQgcHJvbXB0cy48L2Rlc2M+CiAgPHJlY3Qgd2lkdGg9IjEyODAiIGhlaWdodD0iNzIwIiBmaWxsPSIjZjdmYWZjIi8+CiAgPHJlY3QgeD0iMTcwIiB5PSIxMzIiIHdpZHRoPSI5NDAiIGhlaWdodD0iNDU2IiByeD0iMjIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iI2M3ZDBlMyIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTk4IiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzAiIGZpbGw9IiMxZjI5MzciPmltYWdlOi8vd2l6YXJkLXVzYi1wZXJzaXN0ZW5jZTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI4MiIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjMwIiBmaWxsPSIjMjQzMjRiIj5TYXZlIGNvbmZpZyB0byBVU0I/IHllczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjM1MCIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjMwIiBmaWxsPSIjMjQzMjRiIj5EZXZpY2U6IC9kZXYvc2RiMSAgZXh0NCAgUk9VVEVSRDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjQxOCIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjMwIiBmaWxsPSIjMjQzMjRiIj5EYWlseSBmbHVzaDogeWVzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNDg2IiBmb250LWZhbWlseT0iQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMzAiIGZpbGw9IiMyNDMyNGIiPkxvZyB0bXBmcyBsaW1pdDogMTAwTTwvdGV4dD4KPC9zdmc+Cg==" width="1280" height="720" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="check-the-result">Check the result<a href="https://routerd.net/blog/diskless-minipc-with-routerd#check-the-result" class="hash-link" aria-label="Direct link to Check the result" title="Direct link to Check the result">​</a></h2>
<p>After the wizard applies the generated config, <code>routerctl status</code> should report
a healthy router:</p>
<p><img decoding="async" loading="lazy" alt="routerctl status placeholder" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgdmlld0JveD0iMCAwIDEyODAgNzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+cm91dGVyY3RsIHN0YXR1cyBwbGFjZWhvbGRlcjwvdGl0bGU+CiAgPGRlc2MgaWQ9ImRlc2MiPlBsYWNlaG9sZGVyIGZvciByb3V0ZXJjdGwgc3RhdHVzIG91dHB1dC48L2Rlc2M+CiAgPHJlY3Qgd2lkdGg9IjEyODAiIGhlaWdodD0iNzIwIiBmaWxsPSIjMGQxMTE3Ii8+CiAgPHRleHQgeD0iNDgiIHk9IjcyIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIzMCIgZmlsbD0iIzdlZTc4NyI+aW1hZ2U6Ly9yb3V0ZXJjdGwtc3RhdHVzPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNDIiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij4kIHJvdXRlcmN0bCBzdGF0dXM8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjIxMCIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiNjOWQxZDkiPnBoYXNlOiBIZWFsdGh5PC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIyNjYiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij5yZXNvdXJjZXM6IEFwcGxpZWQ8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjMyMiIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiNjOWQxZDkiPmRoY3A0OiBSdW5uaW5nPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIzNzgiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij5kbnM6IFJlYWR5PC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSI0MzQiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij5uYXQ0NDogSW5zdGFsbGVkPC90ZXh0Pgo8L3N2Zz4K" width="1280" height="720" class="img_ev3q"></p>
<p>Then attach a LAN client and check DNS plus outbound HTTPS:</p>
<p><img decoding="async" loading="lazy" alt="Client curl placeholder" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgdmlld0JveD0iMCAwIDEyODAgNzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+Q2xpZW50IGN1cmwgcGxhY2Vob2xkZXI8L3RpdGxlPgogIDxkZXNjIGlkPSJkZXNjIj5QbGFjZWhvbGRlciBmb3IgTEFOIGNsaWVudCBkaWcgYW5kIGN1cmwgb3V0cHV0LjwvZGVzYz4KICA8cmVjdCB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGZpbGw9IiMwZDExMTciLz4KICA8dGV4dCB4PSI0OCIgeT0iNzIiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjMwIiBmaWxsPSIjN2VlNzg3Ij5pbWFnZTovL2NsaWVudC1jdXJsLXJlc3VsdDwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTUwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIyOCIgZmlsbD0iI2M5ZDFkOSI+JCBkaWcgQDE5Mi4xNjguMTAuMSB3d3cuZ29vZ2xlLmNvbSBBICtzaG9ydDwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMjA2IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIyOCIgZmlsbD0iI2M5ZDFkOSI+MTQyLjI1MC4xOTYuMTAwPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIzMDAiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjI4IiBmaWxsPSIjYzlkMWQ5Ij4kIGN1cmwgLTQgLUkgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9nZW5lcmF0ZV8yMDQ8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjM1NiIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjgiIGZpbGw9IiNjOWQxZDkiPkhUVFAvMiAyMDQ8L3RleHQ+Cjwvc3ZnPgo=" width="1280" height="720" class="img_ev3q"></p>
<p>For the full step-by-step guide, see
<a href="https://routerd.net/docs/tutorials/diskless-minipc-walkthrough">Diskless mini PC walkthrough</a>.</p>]]></content>
        <category label="routerd" term="routerd"/>
        <category label="live-iso" term="live-iso"/>
        <category label="diskless" term="diskless"/>
        <category label="proxmox" term="proxmox"/>
        <category label="router" term="router"/>
    </entry>
</feed>