<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Immutable - 标签 - 半瓶斋</title>
        <link>https://blog.plz.ac/tags/immutable/</link>
        <description>Immutable - 标签 - 半瓶斋</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>chris@lesscrowds.org (Chris Su)</managingEditor>
            <webMaster>chris@lesscrowds.org (Chris Su)</webMaster><lastBuildDate>Thu, 12 Nov 2026 08:00:00 &#43;0800</lastBuildDate><atom:link href="https://blog.plz.ac/tags/immutable/" rel="self" type="application/rss+xml" /><item>
    <title>Volatoo：Gentoo 上的不可变根和 generation 更新</title>
    <link>https://blog.plz.ac/posts/volatoo/</link>
    <pubDate>Thu, 12 Nov 2026 08:00:00 &#43;0800</pubDate><author>
        <name>Chris Su</name>
    </author><guid>https://blog.plz.ac/posts/volatoo/</guid>
    <description><![CDATA[<p>Volatoo 是我（bushi，其实是 AI）今年在写的一个发行版，名字来自 volatile 和 <a href="https://www.gentoo.org/" target="_blank" rel="noopener noreferrer">Gentoo</a>。它基于 Gentoo，系统按 generation 组织。仓库在 <a href="https://github.com/Volatoo/Volatoo" target="_blank" rel="noopener noreferrer">github.com/Volatoo/Volatoo</a>，现在的 <code>v0.1-dev</code> 预览版能启动 <a href="https://github.com/OpenRC/openrc" target="_blank" rel="noopener noreferrer">OpenRC</a> 和 <a href="https://systemd.io/" target="_blank" rel="noopener noreferrer">systemd</a> 两个目标。</p>
<p>Volatoo 是一个不可变系统：根文件系统来自只读的 <a href="https://docs.kernel.org/filesystems/squashfs.html" target="_blank" rel="noopener noreferrer">SquashFS</a> 镜像，运行时的写操作进 <a href="https://docs.kernel.org/filesystems/tmpfs.html" target="_blank" rel="noopener noreferrer">tmpfs</a>，重启就丢掉。</p>
<p>启动时 SquashFS 当 <a href="https://docs.kernel.org/filesystems/overlayfs.html" target="_blank" rel="noopener noreferrer">OverlayFS</a> 的 lower，tmpfs 当 upper，叠成 <code>/</code>。你看到的是一个能正常读写的 Gentoo，写到 <code>/usr</code> 的改动只活在内存里。重启时 upper 丢掉，系统回到镜像。</p>
<p>需要留下的路径（<code>/home</code>、<code>/etc</code>、<code>/var/log</code> 等）在启动时从持久分区接回来；持久分区是可选的。</p>
<p>generation 是这套东西的版本。更新就是生成一份新的只读镜像和它的挂载记录，等对象和 manifest 都写完，再原子地把 <code>current</code> 指过去；回滚就是把 <code>previous</code> 指回来。</p>
<p>这篇主要讲它的启动流程、持久化和更新，最后列一下现在还没做好的地方。</p>]]></description>
</item></channel>
</rss>
