進階

本章收錄進階使用者介面——偶爾才會用到、而非每天使用的功能。內容包括:以 回復個人檔案夾… 把機器的家目錄回復到較早的一次開機;內建的 ext4 檔案瀏覽器,無須啟動 VM 就能直接在 Mac 上開啟機器的磁碟映像檔;原生的檔案系統檢查;以及幾項底層組態預設值。

機器(在設定編輯器中稱為工作區)把資料存放在兩個 Linux ext4 磁碟映像檔中:系統磁碟與家目錄映像檔。本章內容皆假設你已熟悉機器與資源設定中所描述的儲存模型。

回復機器的家目錄

每當機器成功啟動,Bromure 都會為其家目錄映像檔建立一個寫入時複製的檢查點——也就是存放你的專案簽出、dotfiles、.ssh、shell 歷史記錄與代理程式狀態的 /home/ubuntu。檢查點依分層方式保留:最近幾次開機,接著一週內每天一個,再來一個月內每週一個。只有當目前的家目錄與它們產生差異時,才會真正佔用磁碟空間。

回復個人檔案夾… 是日常使用它們的方式:

  1. 在側邊欄中開啟 虛擬機器,點按該機器那一列上的 ⋯ 按鈕。
  2. 選擇 回復個人檔案夾…。會開啟一個標題為 回復「‹機器›」的家目錄 的表單:「每個時間點都是該次開機開始時的家目錄。下次啟動會從你選取的時間點開機;目前的家目錄會保留為一個新的時間點,因此可以在這裡復原。」
  3. 在清單中選取一個時間點。每一列會顯示日期與時間、距今多久,以及該檢查點在磁碟上的大小。
  4. 點按 回復。
回復「Web app」的家目錄表單,說明每個時間點都是該次開機開始時的家目錄,並顯示訊息「尚無回復時間點——這台機器每次啟動時都會建立一個」,以及取消與回復按鈕

完成後,表單會顯示「完成——「‹機器›」下次啟動會從它在 ‹日期› 的家目錄開機。」其他一切都不會改變:系統磁碟、機器的設定及其憑證都維持原樣。

注意事項:

  • 機器必須處於關機狀態。 家目錄映像檔會整個替換,因此不能在使用中。機器執行時,表單會顯示「機器正在執行——使用中的家目錄無法替換。請先將它關機。」並提供 關機 按鈕;在機器關機之前,回復 都會保持停用。
  • 回復可以復原。 替換之前,目前的家目錄會成為同一份清單頂端的一個新回復時間點。若要復原,再次開啟 回復個人檔案夾… 並選取它即可。
  • 尚無時間點。 從未開機過或剛建立的機器會顯示「尚無回復時間點——這台機器每次啟動時都會建立一個。」
  • 較舊的機器。 仍把家目錄放在 Mac 上某個檔案夾中的機器(舊版的共用檔案夾家目錄)沒有可回復的映像檔;表單會顯示「這台機器把家目錄放在 Mac 上,而非映像檔中——沒有可回復的內容。」請先從 資源 窗格升級它的儲存方式。
  • 遠端機器。 在富用戶端的鏡像視窗中,回復個人檔案夾… 的運作方式相同,只是作用於伺服器的檢查點。

其他儲存操作

機器的 資源 窗格(⋯ › 編輯… › 資源)保留了較舊的、依層區分的操作。機器的視窗開啟時,這些操作會停用(「請先關閉工作階段視窗。」):

按鈕層作用
還原家目錄…家目錄(ext4)與 回復個人檔案夾… 相同的回復,以帶有時間點彈出式清單的警示呈現:還原 / 取消。會先為目前的家目錄建立檢查點。
清除家目錄…家目錄清除 /home/ubuntu 下的一切——專案複製、shell 歷史記錄、快取、機器的 SSH 金鑰對。由 Bromure 管理的檔案(.bashrc、.gitconfig、CLI 設定)會在下次啟動時依機器的設定重建。
重置為基礎…系統磁碟從基礎映像重新複製系統磁碟。用 apt 安裝的任何東西,以及 /etc、/var、/usr、/opt 下的變更都會遺失;家目錄會保留。

機器的 ⋯ 選單也有 重置磁碟,即同樣的系統磁碟重置。完整窗格請參閱資源設定。

ext4 檔案瀏覽器

macOS 沒有原生的 ext4 支援,因此一般而言,要查看機器磁碟映像檔內容的唯一方法就是啟動 VM。Bromure 以自家無相依性的 ext4 讀寫器避開這一點:它直接剖析磁碟上的格式,並向你顯示目錄樹。

工作區 › 開啟 ext4 檔案… 會在類似 Finder 的視窗中開啟任何 ext4(也支援 ext2 或 ext3).img——無論是原始檔案系統或 MBR/GPT 分割的磁碟。不會掛載任何內容、不會啟動 VM,也不需要提升權限。

附註: 映像檔預設以唯讀方式開啟——即使某個 VM 仍掛載著該磁碟也很安全。編輯是一個獨立且明確受管制的步驟(請參閱 編輯映像檔)。

可以開啟的內容

機器位於 ~/Library/Application Support/BromureAC/profiles/<uuid>/ 之下。其中有兩個映像檔值得瀏覽,還有它們的回復檢查點:

映像檔瀏覽器所顯示的內容工具列資訊列顯示
disk.imgUbuntu 系統根目錄——/etc、/var、/usr、/opt 等等。此磁碟採用 GPT 配置(一個 EFI 分割區加上 ext4 根目錄);瀏覽器會自動定位 ext4 根目錄。partition @…MiB
home.img客體的 /home/ubuntu,直接位於檔案系統根目錄——dotfiles、專案簽出、.ssh、shell 歷史記錄,以及 Bromure 自己的檔案夾 .bromure/。raw
checkpoints/<ts>.img每次開機時建立的 disk.img 檢查點。partition @…MiB
checkpoints/home/<ts>.img每次開機時建立的 home.img 檢查點——也就是 回復個人檔案夾… 所列出的時間點。raw

家目錄映像檔之所以如此,是因為客體在開機時會把它掛載覆蓋在 /home/ubuntu 上,因此映像檔本身的根目錄就是該家目錄。Kubernetes 節點、登錄庫與訊息連接器則把它們的磁碟放在 kube/<id>/nodes/<uuid>/ 之下,開啟方式相同。

開啟映像檔

  1. 選擇 工作區 › 開啟 ext4 檔案…。
  2. 會出現一個標題為 開啟 ext4 磁碟映像檔 的開啟面板——「選擇一個 ext4 .img 磁碟映像檔(原始或分割)。」——起始於 ~/Library/Application Support/BromureAC。導覽至機器的 profiles/<uuid>/ 資料夾,並選取 disk.img、home.img,或 checkpoints/ 下的檔案。
  3. 瀏覽器會在標題為 ext4 — «檔名» 的視窗中開啟,並顯示檔案系統根目錄。

工具列的資訊列會摘要此磁區:其標籤、總大小、檔案系統是以原始形式還是在分割區偏移處找到,以及其狀態——clean、not cleanly unmounted 或 journal needs recovery。每個映像檔只有一個視窗;重新開啟已開啟的映像檔只會將其視窗移到前景。

瀏覽、預覽與擷取

主檢視是一個三欄表格——名稱、大小 與 類型——目錄會列在前面。類型會區分資料夾、檔案與符號連結,以及特殊的 Unix 節點類型(Char、Block、FIFO、Socket)。

  • 導覽——雙擊資料夾以進入;點按工具列的 向上 箭頭以返回。麵包屑會顯示目前的路徑。
  • 預覽——雙擊檔案,或以右鍵點按並選擇 預覽。文字檔會以文字呈現;二進位檔案會以十六進位傾印呈現。無論哪種方式,預覽都會限制在前 1 MiB,且頁尾會回報所顯示的位元組數佔檔案總位元組數的多少。符號連結會以其目標路徑預覽。
  • 擷取——以右鍵點按檔案並選擇 擷取…,透過儲存面板將其完整內容寫入你的 Mac。這是你最常使用的唯讀路徑。

編輯映像檔

編輯功能刻意設有管制關卡。點按工具列中的 啟用編輯…;警示 要啟用此磁碟映像檔的編輯嗎? 會警告:

只能編輯其工作區 VM 已停止的映像檔。對執行中 VM 開啟的磁碟進行寫入會使其損毀。

點按 啟用編輯 後,映像檔會以讀寫方式重新開啟,工具列中會顯示橘色的 編輯中 徽章。接著檔案的內容選單會多出 取代…:選取一個主機檔案,以其內容就地覆寫所選檔案。編輯器會重新計算該 inode 的檢查碼,因此結果會保持一致。

警告: 取代僅限就地進行。新內容必須符合檔案已配置的區塊大小——較大的檔案會被拒絕並顯示 該檔案將需要增長(增長、建立與刪除檔案的功能並未啟用)。內嵌資料檔案無法編輯。當日誌需要復原時,寫入會被拒絕——請先執行 fsck(見下文)。且切勿編輯執行中 VM 所掛載的映像檔。

檢查與修復磁碟

Bromure 以自家內建的檢查器檢查與修復 ext4 映像檔——無須安裝任何東西(macOS 並未隨附 e2fsprogs,Bromure 也不使用它)。你會在三個地方遇到它:

  • 開機時自動執行。 當機器因檔案系統錯誤而停止開機時,其舞台會顯示 磁碟錯誤——「系統磁碟未通過開機時的檔案系統檢查,開機無法繼續。」——並提供 修復磁碟 與 重置系統磁碟…。修復磁碟 會停止 VM、對系統磁碟執行檢查器,然後再次開機;不會刪除任何東西。若下次開機再度失敗,重置就是接下來的做法。請參閱疑難排解。
  • 在 ext4 瀏覽器中。 工具列的 執行 fsck… 按鈕。
  • 從命令列。 bromure-cli vm fsck <workspace> [--repair] [--home]——請參閱 CLI、API 與 MCP。

在瀏覽器中,執行 fsck… 會詢問 要檢查此映像檔嗎?——「若檔案系統日誌不乾淨,這會重放日誌並驗證中繼資料。工作區的 VM 必須已停止。這可能會修改映像檔。」——並提供 執行 fsck 與 取消。結果會顯示在標題為 fsck.ext4 的表單中,完整輸出上方有一行摘要:

摘要意義
「檔案系統是乾淨的。」無須任何動作。
「檔案系統已修復;現在已一致。」日誌已重放;映像檔現在與客體核心最後一次提交的內容完全相同。
「檔案系統有此檢查器無法修復的錯誤。」損壞超出了未完成的日誌。

之後映像檔會重新開啟,因此瀏覽器會顯示修復後的狀態。

檢查器會做什麼、不會做什麼:

  • 修復 會重放檔案系統日誌,並清除「需要復原」旗標。對幾乎所有損壞的 Bromure 磁碟而言,這就是全部:映像檔之所以不乾淨,是因為 VM 在寫入途中被停止或當掉,而不是資料老化。
  • 驗證 一律檢查超級區塊與群組描述元的檢查碼,然後從根目錄走訪整棵樹,驗證每個可到達 inode 的檢查碼與 extent 樹。它會回報發現的問題,但不會修補。
  • 對於檢查器無法修復的損壞,真正的解法是在 VM 中使用 Linux 自己的 e2fsck。客體本來就會在每次開機時檢查家目錄映像檔,而 Kubernetes 節點與登錄庫會退而使用一台用完即丟的機器,自動對它們的磁碟執行 e2fsck。至於工作區的系統磁碟,重置為基礎… 會重新複製它,而不動到家目錄。

何時使用這些工具

  • 復原家目錄的損壞——代理程式刪錯了資料夾,或某個 dotfile 的變更弄壞了你的 shell:用 回復個人檔案夾… 回到最後一次正常的開機。
  • 救回檔案——從你不想啟動的機器中,用 擷取… 從 home.img 取出尚未提交的變更或記錄檔。
  • 檢查檢查點——在回復之前確認它包含你預期的內容:在 ext4 瀏覽器中從 checkpoints/home/ 開啟它。
  • 搶救無法開機的機器——讓 修復磁碟 重放日誌;若原因是某個有問題的設定檔,用瀏覽器就地取代它,再執行 fsck。開機失敗的診斷請參閱疑難排解。

開發者預設值

應用程式會從其 UserDefaults 網域 io.bromure.agentic-coding 讀取數個底層設定。在應用程式未執行時以 defaults write 設定它們,接著重新啟動:

鍵效果預設值
vm.homeImageGB新建立 的 ext4 家目錄映像檔的表面(客體可見)大小,單位為 GiB。主機檔案為稀疏檔案,因此一開始不佔用任何空間。範圍限制在 8–1024。舊版家目錄遷移到它的第一個映像檔時,至少會有 64。16
vm.mtu機器 VM 主要 NIC 的 MTU 上限,在每次開機時寫入客體。預設值 1280 對 VPN 是安全的(WireGuard、IKEv2 與企業 PMTU 路徑)。1280
terminal.allowGraphics重新啟用來自客體的終端機內影像算繪(kitty 圖形協定)。預設為關閉,因為這意味著主機要解碼客體提供的影像位元組——而同一個通道也可能在終端機上繪製假造的 UI。只有在你希望代理程式內嵌算繪影像、並願意承擔該風險時才開啟它。NO
ui.terminalBell讓終端機的響鈴發出聲音。預設關閉:代理程式在每一輪結束時都會響鈴,而側邊欄的狀態已經會告訴你。NO

例如,若要讓未來機器的家目錄映像檔顯示為 128 GiB:

defaults write io.bromure.agentic-coding vm.homeImageGB -int 128

附註: vm.homeImageGB 只會影響變更之後建立的家目錄映像檔;既有映像檔會保留其大小。家目錄映像檔日後可以增長,但無法縮小。

提示: 對於真正用完即丟的工作,bromure-cli vm run --rm 會啟動一個 Docker 風格的一次性工作區,其磁碟會在 VM 停止時刪除——詳見 CLI、API 與 MCP。

UserDefaults 鍵與環境變數的完整清單請見附錄。