環境重建是 dotfile 管理的最終目的:拿到一台空白機器,能在可預期的時間內還原成你熟悉的工作環境。這件事有兩條根本不同的路線,選哪條決定了你之後所有的管理策略。

拍照:VM 快照與磁碟映像

第一種是拍照。VM 快照和磁碟映像(Clonezilla、dd)做的事是把整台機器某一刻的完整狀態凍結存檔——整個虛擬硬碟的 block-level 複製,有時連記憶體狀態都包含。還原就是把映像寫回去,系統回到那一刻,像時光倒流。Docker 的 docker commit 也屬於這個方向:把正在跑的 container 的檔案系統快照成一個 image。

拍照產出的是黑盒子。一個磁碟映像是二進制檔案,沒人能看出裡面到底做了什麼設定、裝了什麼、改過什麼。它大(動輒 GB 級)、跟硬體耦合(換不同架構或不同顯卡可能開不起來)、無法做 diff 或 code review。

重建指令:Dotfile repo + install script

第二種是重建指令。Dotfile repo + install script 描述的是「怎麼從一台空白機器組出這個環境」,每次都從零開始執行。Dockerfile 也是重建指令——一份「照著做就能重現」的食譜,描述每一步該安裝什麼、複製什麼、怎麼啟動。

重建指令產出的是白盒子。每一步都是可讀的文字——這行裝 zsh、那行設定 Hyprland 的 keybind——可以被 review、被 diff、被另一個人讀懂。它小(通常幾十 KB)、跨硬體(同一份 script 加 OS 判斷就能跑在不同機器)、可以進版控走 PR 流程。

dotfile 管理選的是重建指令這條路。代價是你必須把環境建構的過程記錄清楚——每裝一個新工具、每改一個配置都要同步更新 repo。回報是任何一台機器、任何時間點,都能用一份 Git repo 重現你的工作環境。

場景判讀

需求VM 快照Dotfile 重建
保留某一刻的完整系統狀態適合(block-level 完整備份)不適合(只管配置層)
在新機器還原工作環境不適合(硬體耦合、映像大)適合(跨硬體、輕量)
讓環境可被他人重現(onboarding)勉強(黑盒子、難維護)適合(白盒子、可 review)
在多台機器維持一致不適合(每台都要拍照)適合(一份 repo、多台 apply)
做實驗後回滾(改壞了想恢復)適合(秒級回滾)要靠 git revert + 重新 apply
讓桌面配置進 review 流程不適合(二進制映像無法 diff)適合(純文字、可 diff、可 PR)

兩者不互斥——常見的組合是:用 dotfile 管理配置(長期可維護的基線),VM 快照用於短期實驗保護(改爛了可以秒回)。