Linux 安裝程式的每個選項都是一個會往後傳遞代價的決策。選錯的後果不會在當下浮現,而是在重開機進不了系統、磁碟某個分區先爆掉、或裝好的機器一重開就斷網時才出現。判斷一個選項該怎麼選,靠的是同一個問題:這台機器是用來幹嘛的。一台用完即丟的測試 VM、一台跑三年的主力機、一台對外服務的伺服器,同一個選項的正確答案可能完全不同。

這篇給每個關鍵選項一條判斷軸,而不是一份「照著點」的步驟。底下用一次具體的安裝當作貫穿例子:在 Apple Silicon 的 UTM 上用 archboot ISO 裝 Arch Linux ARM,目標是一台演練 dotfile 部署的測試 VM。例子是具體的,但判斷軸跨發行版通用——locale、分割、bootloader 這些抉擇在多數 Linux 安裝程式裡都會以類似形式出現。

怎麼建立 VM、燒錄並開機到安裝程式,是跟環境綁定的前置——UTM、VirtualBox、實體機各不相同——不在這條判讀軸的範圍;這篇從「安裝程式已經跑起來、開始問你選項」接手,給的是每個選項的判斷軸,不逐頁帶某個安裝程式的選單怎麼點。底下的指令與選單名稱以 archboot / Arch 呈現,換 Ubuntu(Subiquity 安裝程式)或 Fedora 時,選項的判斷軸一樣成立,但選單長相、套件組名稱、指令會不同。

系統語系與時間

系統語系決定的是錯誤訊息、log、系統工具輸出用哪種語言,不是你日常打字的語言。這兩件事容易混為一談。日常輸入中文是桌面層的字型與輸入法問題,跟系統 locale 無關;系統 locale 影響的是當某個服務崩潰、你在 journalctl 裡讀它吐出來的那行訊息時,那行字是英文還是被翻譯過。

把系統 locale 留在 en_US.UTF-8 的理由是可搜尋性。當你把一段錯誤訊息貼到搜尋引擎或問別人,英文訊息能對上絕大多數的文件、issue、Stack Overflow 答案;翻譯過的訊息往往一個結果都搜不到。這條判斷軸對伺服器、開發機、任何你預期會除錯的機器都成立。會選非英文 locale 的情境通常是給終端使用者的桌面,且該使用者不除錯——那是另一種機器。

時區的選擇影響 log 的時間戳跟排程任務的觸發時刻,挑你所在地即可。另一個相關的決策是「硬體時鐘存 UTC 還是本地時間」:選 UTC。Linux 慣例是硬體時鐘存 UTC、顯示時再換算成時區,這樣跨時區搬機器、或 NTP 校時都不會錯亂。會需要存本地時間的唯一常見情境是跟 Windows 雙開——Windows 預設把硬體時鐘當本地時間——而 VM 或純 Linux 機器沒有這個包袱。

網路

安裝階段的網路設定要回答兩個層次:當下能不能連、以及這份設定會不會帶進裝好的系統。第一層通常很直覺——選到對的網卡、用 DHCP 讓它自動拿 IP。虛擬機的 NAT 網路會自動發 IP,所以選 DHCP、不要手動設 static,省去算網段的麻煩。

第二層是真正會咬人的地方:安裝程式裡設好的網路,不保證會出現在重開機後的系統裡。這是 VM 裝 Linux 常見的斷網點——安裝時明明能上網裝套件,重開機後卻連不出去,因為安裝環境的網路設定沒被複製到目標系統。判讀方式是裝好首次開機後立刻驗證:看網卡有沒有拿到 IP、能不能解析一個域名。

1ip -brief a          # 網卡有沒有 IP、狀態是不是 UP
2ping -c 3 archlinux.org   # 解析成功就證明對外連線 + DNS 都通

DNS 能把域名解析成 IP,本身就證明對外連線是通的(DNS 查詢就是一次網路往返),所以這條 ping 即使對方不回 ICMP 也已經給了答案。在前述的 archboot 例子裡,網路設定確實有被複製進目標系統並由 systemd-networkd 接手,重開機後免再手動設——但這是該安裝程式的行為,不能假設每個安裝程式都這樣。把「首次開機驗網路」當成固定動作,比預設它一定會通安全。

套件鏡像

鏡像源決定你從哪裡下載套件,挑地理上接近的那個。基礎系統加上一套桌面動輒上 GB,選對岸的鏡像跟選同城的鏡像,下載時間差好幾倍。安裝程式給的鏡像清單通常按國家排,往下捲找你所在地區的;找不到完全同國的,就退而求其次選同區域、且穩定的大型鏡像。

這個選擇的另一個作用是順帶確認你裝的是哪個發行版分支。前述例子的鏡像清單全是 archlinuxarm.org,這證實了 archboot 的 aarch64 ISO 裝出來的是 Arch Linux ARM(ARM 移植版),而不是 x86 的 Arch——同一條安裝路徑產出的是哪個分支,鏡像來源會洩漏給你看。

磁碟分割

磁碟分割是整個安裝裡選項最多、也最不可逆的一段,但判斷軸只有一條:這台機器需不需要在分區層面做隔離。需要隔離的情境——多系統共存、加密、資料與系統分離以便重灌不丟資料——每多一個,分割就多一層結構。不需要的情境,多切一刀都只是增加「一邊爆一邊空」的風險。下面逐項拆解,但它們服務的是同一個判斷。

自動分割 vs 手動分割

自動分割(清空整碟、安裝程式幫你建標準佈局)適用於整碟專屬、沒有要保留任何既有資料的機器。測試 VM 的磁碟是全新的、整碟給這個系統用,自動分割沒有任何代價,還省去手動算 EFI 大小、root 大小、對齊、格式化、掛載這一連串容易錯的步驟。

手動分割的價值在你需要非標準佈局時才浮現:多系統共用某個分區、要留一塊不格式化的資料區、要套 LVM 或 LUKS。這些是真實主力機與伺服器會遇到的需求,但對一台「目標是驗證 dotfile 部署」的 VM 是純雜訊——它們屬於另一個主題,不該混進這次的安裝。判讀訊號很簡單:你說得出一個具體的隔離需求,才手動分割;說不出來,自動分割就是對的。

分區識別方式(PARTUUID)

分區識別方式決定 fstab(開機時決定哪個分區掛到哪的設定檔)跟 bootloader 怎麼指涉每個分區,在 GPT(現代 UEFI 機器的分區表格式)磁碟上選 PARTUUID。這個選擇的後果是「重開機後系統找不找得到自己的分區」。PARTUUID 綁在分區本身、跨重開機穩定,而且重新格式化檔案系統也不會變;相對地,檔案系統層級的 UUID 一重格就變,會讓 fstab 失效,而 /dev/vda1 那種 kernel 名稱會隨偵測順序浮動,最不穩。穩定性的排序是 PARTUUID 優於 FSUUID 優於 kernel 名稱,GPT 磁碟用最穩的那個(這三種識別方式的細節見 分區識別卡)。

EFI 分區的掛載點與大小

EFI 系統分區(ESP)放開機載入器與 kernel,掛載點的選擇取決於這台機器是不是單一作業系統。把 ESP 掛在 /boot(單系統佈局)讓 kernel 跟開機檔住在同一個分區、維護最單純;把 ESP 掛在 /efi、kernel 另放(多系統佈局)是為了多個 OS 共用同一個 ESP 才需要的結構。單系統的機器選多系統佈局,只是憑空多一層目錄。

ESP 大小在單系統佈局下要算進 kernel 與 initramfs(開機初期把真正的 root 掛起來之前、用來載入驅動的小型臨時根檔系統)。一個 kernel 加上它的 initramfs(含 fallback)大約一兩百 MB,再加上 FAT32 ESP 約 260 MiB 的實務下限,512 MiB 是在下限之上留餘裕。會需要更大的情境是你要同時保留多個 kernel 版本——但單 kernel 的 VM 用不到,給太大只是浪費。

Swap

Swap 是記憶體不足時的安全墊,大小取決於這台機器的記憶體壓力型態,不是一個固定公式。對一台只有 4 GB RAM、且要在上面從原始碼編譯套件的 VM,編譯瞬間的記憶體尖峰很容易把實體記憶體吃爆、觸發 OOM 把進程殺掉。給 2 GB swap 當緩衝,擋住這種尖峰、避免安裝跑到一半被中斷。

swap 分區的磁碟成本不是一次付清的。mkswap 只寫一個 header,實際沒被換出的頁不會佔用宿主磁碟空間(在稀疏配置的虛擬磁碟上尤其明顯),用到才寫。所以「為了保險多給一點 swap」的代價,比直覺以為的小。判讀軸是看工作負載:會編譯、會跑吃記憶體的服務、RAM 又緊,就給足 swap;純文書、RAM 寬裕,小一點或不給都行。

swap 還有形態的選擇,這裡用分區 swap 是因為在安裝程式階段一併切好最省事,不代表它比另兩種好。swapfile(一個檔案,事後可隨時調大小或移除)避開了「分割最不可逆」的痛點;zram(壓縮記憶體 swap,不碰磁碟)對低 RAM 加編譯尖峰正是設計情境,現代發行版很多預設用它。換句話說,2 GB 這個量是看編譯尖峰定的,而「切成分區」只是配合安裝當下一次到位——若你跳過安裝期的 swap、事後用 swapfile 或 zram 補,是等價的可逆路徑。

檔案系統

檔案系統的選擇是在「簡單可靠」與「進階功能」之間取捨,預設往簡單那邊靠。ext4 簡單、穩、在各平台行為一致、修復工具成熟,對一台只要求「可靠地存取檔案」的機器是零驚喜的選擇。btrfs 提供快照、subvolume、透明壓縮,但代價是要規劃 subvolume 佈局、還要理解它寫時複製(CoW)的一些行為差異;這些功能在你會用快照回滾的主力機上很有價值,在演練 VM 上是雜訊。xfs 同樣穩定,但對這類用途相對 ext4 沒有決定性優勢。更特定的 zfsf2fs 不在一般 VM 的考慮範圍——zfs 在 Arch / ARM 上是非主線 kernel 的 out-of-tree 模組、授權與維護成本高,f2fs 是為快閃裝置設計、VM 用不到。

判讀軸是你會不會用到進階功能。會固定用快照回滾系統狀態——選 btrfs 並接受它的佈局複雜度;只是要一個可靠的檔案系統——ext4。快照這類能力跟下面的獨立 /home 一樣,是真實機器的儲存規劃主題,值得另外深入,但別為了「聽起來比較強」就把它的複雜度帶進一台用完即丟的機器。

獨立 /home vs 單一 root

獨立 /home 分區的價值是「重灌系統不丟個人資料」,這是主力機的需求,不是每台機器都需要。把 /home 切成獨立分區,重裝系統時可以只格式化 root、保留 /home 裡的設定與檔案。一台用完即丟的演練 VM 沒有這個需求——它的整個生命週期就是裝起來、驗證、丟掉。如果你想跨多次實驗保留狀態,VM 情境更貼切的手段是宿主層的快照或共享資料夾,而不是在 guest 裡切獨立 /home——後者解決的是「重灌 OS 保資料」,不是「保留實驗狀態」。

把空間切兩半的隱性代價是失衡風險。假設總共十幾 GB,照預設切一塊給 /、剩下給 /home,所有系統套件(桌面全套依賴都裝在 /usr、算 /)擠在前者、容易先滿,而 /home 那邊空著——典型的一邊爆一邊空。把全部空間當一個池子用的單一 root 佈局,不會人為卡死任一邊,對不需要「重灌保資料」的機器最不容易出事。

Bootloader

開機載入器決定韌體怎麼找到並載入 kernel,在虛擬機上選 GRUB 而非直接用 EFISTUB,理由是可靠性(韌體到 kernel 的整條交棒過程見 UEFI 開機鏈卡)。EFISTUB 讓 UEFI 韌體直接載入 kernel、不經過獨立的 bootloader,最精簡,但它完全依賴寫進 UEFI NVRAM(韌體用來存開機項的非揮發記憶體)的開機項。問題在於 QEMU 系的虛擬機(UTM 底層即是)對 EFI 變數的儲存有時不穩,一旦 NVRAM 裡的開機項掉了,韌體就找不到 kernel、機器開不了——這在 VM 環境是會實際踩到的坑。

GRUB 的容錯來自它(以 removable 模式安裝時)多寫了一份。除了 NVRAM 開機項,grub-install --removable 會在 ESP 的標準 fallback 路徑(aarch64 是 \EFI\BOOT\BOOTAA64.EFI)也放一份,就算 NVRAM 開機項丟了,韌體仍會從 fallback 路徑找到 GRUB;VM 環境的安裝程式通常以這個模式裝 GRUB,正是看上這層保險。它還附帶一個開機選單,當 kernel 或 initramfs 出問題時,可以進選單救援、加開機參數除錯——演練時的容錯空間大很多。

判讀軸是環境的 NVRAM 可靠度。在 NVRAM 穩定的實體機上,EFISTUB 的極簡是漂亮的選擇;在 NVRAM 可能不穩的 VM 上,可靠性優先,GRUB 的「多寫一份 fallback + 救援選單」更穩妥。GRUB 不是唯一的可靠選擇——systemd-boot 同樣是有開機選單、能裝到 fallback 路徑的獨立 bootloader,又比 GRUB 輕,在 VM / 單系統同樣站得住;這裡落在 GRUB 是因為 archboot 安裝程式預設以 removable 模式裝它,不是 GRUB 獨佔可靠性。GRUB 自己的設定檔在 VM 上用預設值即可,不需要額外的 kernel 參數。

下一步

選項選完、系統裝好、重開機進得去之後,先別急著開始用——「裝好了」跟「能用了」之間往往還缺一截:這台最小系統不一定有你需要的基本工具。最小安裝後的工具驗證與補足 就是在補那一截。

從安裝到桌面就緒的完整依賴順序,見 模組零的操作順序指引;本篇是它「安裝作業系統」那一步的展開。