<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Snapshot on Tarragon</title><link>https://tarrragon.github.io/blog/tags/snapshot/</link><description>Recent content in Snapshot on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/snapshot/index.xml" rel="self" type="application/rss+xml"/><item><title>拍照 vs 重建指令：環境重建的兩種思路</title><link>https://tarrragon.github.io/blog/linux/dotfile/08-sync-bootstrap/snapshot-vs-rebuild/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/08-sync-bootstrap/snapshot-vs-rebuild/</guid><description>&lt;p>環境重建是 dotfile 管理的最終目的：拿到一台空白機器，能在可預期的時間內還原成你熟悉的工作環境。這件事有兩條根本不同的路線，選哪條決定了你之後所有的管理策略。&lt;/p>
&lt;h2 id="拍照vm-快照與磁碟映像">拍照：VM 快照與磁碟映像&lt;/h2>
&lt;p>第一種是&lt;strong>拍照&lt;/strong>。VM 快照和磁碟映像（Clonezilla、&lt;code>dd&lt;/code>）做的事是把整台機器某一刻的完整狀態凍結存檔——整個虛擬硬碟的 block-level 複製，有時連記憶體狀態都包含。還原就是把映像寫回去，系統回到那一刻，像時光倒流。Docker 的 &lt;code>docker commit&lt;/code> 也屬於這個方向：把正在跑的 container 的檔案系統快照成一個 image。&lt;/p>
&lt;p>拍照產出的是&lt;strong>黑盒子&lt;/strong>。一個磁碟映像是二進制檔案，沒人能看出裡面到底做了什麼設定、裝了什麼、改過什麼。它大（動輒 GB 級）、跟硬體耦合（換不同架構或不同顯卡可能開不起來）、無法做 diff 或 code review。&lt;/p>
&lt;h2 id="重建指令dotfile-repo--install-script">重建指令：Dotfile repo + install script&lt;/h2>
&lt;p>第二種是&lt;strong>重建指令&lt;/strong>。Dotfile repo + install script 描述的是「怎麼從一台空白機器組出這個環境」，每次都從零開始執行。Dockerfile 也是重建指令——一份「照著做就能重現」的食譜，描述每一步該安裝什麼、複製什麼、怎麼啟動。&lt;/p>
&lt;p>重建指令產出的是&lt;strong>白盒子&lt;/strong>。每一步都是可讀的文字——這行裝 zsh、那行設定 Hyprland 的 keybind——可以被 review、被 diff、被另一個人讀懂。它小（通常幾十 KB）、跨硬體（同一份 script 加 OS 判斷就能跑在不同機器）、可以進版控走 PR 流程。&lt;/p>
&lt;p>dotfile 管理選的是重建指令這條路。代價是你必須把環境建構的過程記錄清楚——每裝一個新工具、每改一個配置都要同步更新 repo。回報是任何一台機器、任何時間點，都能用一份 Git repo 重現你的工作環境。&lt;/p>
&lt;h2 id="場景判讀">場景判讀&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>需求&lt;/th>
 &lt;th>VM 快照&lt;/th>
 &lt;th>Dotfile 重建&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>保留某一刻的完整系統狀態&lt;/td>
 &lt;td>適合（block-level 完整備份）&lt;/td>
 &lt;td>不適合（只管配置層）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>在新機器還原工作環境&lt;/td>
 &lt;td>不適合（硬體耦合、映像大）&lt;/td>
 &lt;td>適合（跨硬體、輕量）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>讓環境可被他人重現（onboarding）&lt;/td>
 &lt;td>勉強（黑盒子、難維護）&lt;/td>
 &lt;td>適合（白盒子、可 review）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>在多台機器維持一致&lt;/td>
 &lt;td>不適合（每台都要拍照）&lt;/td>
 &lt;td>適合（一份 repo、多台 apply）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>做實驗後回滾（改壞了想恢復）&lt;/td>
 &lt;td>適合（秒級回滾）&lt;/td>
 &lt;td>要靠 git revert + 重新 apply&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>讓桌面配置進 review 流程&lt;/td>
 &lt;td>不適合（二進制映像無法 diff）&lt;/td>
 &lt;td>適合（純文字、可 diff、可 PR）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>兩者不互斥——常見的組合是：用 dotfile 管理配置（長期可維護的基線），VM 快照用於短期實驗保護（改爛了可以秒回）。&lt;/p></description><content:encoded><![CDATA[<p>環境重建是 dotfile 管理的最終目的：拿到一台空白機器，能在可預期的時間內還原成你熟悉的工作環境。這件事有兩條根本不同的路線，選哪條決定了你之後所有的管理策略。</p>
<h2 id="拍照vm-快照與磁碟映像">拍照：VM 快照與磁碟映像</h2>
<p>第一種是<strong>拍照</strong>。VM 快照和磁碟映像（Clonezilla、<code>dd</code>）做的事是把整台機器某一刻的完整狀態凍結存檔——整個虛擬硬碟的 block-level 複製，有時連記憶體狀態都包含。還原就是把映像寫回去，系統回到那一刻，像時光倒流。Docker 的 <code>docker commit</code> 也屬於這個方向：把正在跑的 container 的檔案系統快照成一個 image。</p>
<p>拍照產出的是<strong>黑盒子</strong>。一個磁碟映像是二進制檔案，沒人能看出裡面到底做了什麼設定、裝了什麼、改過什麼。它大（動輒 GB 級）、跟硬體耦合（換不同架構或不同顯卡可能開不起來）、無法做 diff 或 code review。</p>
<h2 id="重建指令dotfile-repo--install-script">重建指令：Dotfile repo + install script</h2>
<p>第二種是<strong>重建指令</strong>。Dotfile repo + install script 描述的是「怎麼從一台空白機器組出這個環境」，每次都從零開始執行。Dockerfile 也是重建指令——一份「照著做就能重現」的食譜，描述每一步該安裝什麼、複製什麼、怎麼啟動。</p>
<p>重建指令產出的是<strong>白盒子</strong>。每一步都是可讀的文字——這行裝 zsh、那行設定 Hyprland 的 keybind——可以被 review、被 diff、被另一個人讀懂。它小（通常幾十 KB）、跨硬體（同一份 script 加 OS 判斷就能跑在不同機器）、可以進版控走 PR 流程。</p>
<p>dotfile 管理選的是重建指令這條路。代價是你必須把環境建構的過程記錄清楚——每裝一個新工具、每改一個配置都要同步更新 repo。回報是任何一台機器、任何時間點，都能用一份 Git repo 重現你的工作環境。</p>
<h2 id="場景判讀">場景判讀</h2>
<table>
  <thead>
      <tr>
          <th>需求</th>
          <th>VM 快照</th>
          <th>Dotfile 重建</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>保留某一刻的完整系統狀態</td>
          <td>適合（block-level 完整備份）</td>
          <td>不適合（只管配置層）</td>
      </tr>
      <tr>
          <td>在新機器還原工作環境</td>
          <td>不適合（硬體耦合、映像大）</td>
          <td>適合（跨硬體、輕量）</td>
      </tr>
      <tr>
          <td>讓環境可被他人重現（onboarding）</td>
          <td>勉強（黑盒子、難維護）</td>
          <td>適合（白盒子、可 review）</td>
      </tr>
      <tr>
          <td>在多台機器維持一致</td>
          <td>不適合（每台都要拍照）</td>
          <td>適合（一份 repo、多台 apply）</td>
      </tr>
      <tr>
          <td>做實驗後回滾（改壞了想恢復）</td>
          <td>適合（秒級回滾）</td>
          <td>要靠 git revert + 重新 apply</td>
      </tr>
      <tr>
          <td>讓桌面配置進 review 流程</td>
          <td>不適合（二進制映像無法 diff）</td>
          <td>適合（純文字、可 diff、可 PR）</td>
      </tr>
  </tbody>
</table>
<p>兩者不互斥——常見的組合是：用 dotfile 管理配置（長期可維護的基線），VM 快照用於短期實驗保護（改爛了可以秒回）。</p>
]]></content:encoded></item></channel></rss>