跳至主要内容

USB 持久化

Diagram showing USB persistence on the live ISO from boot-time config media discovery through mounted router.yaml and secrets restore, tmpfs log buffering, daily or manual flush, and safe unmount

routerd 的 Live ISO 可作為無碟路由器運作。 在此模式下,執行中的系統放置於 RAM, 只有選定的路由器狀態才會儲存至 USB 裝置。

這適合從可移動媒體啟動的 mini PC。 不需要內建磁碟,重新開機後仍可保留設定。

目錄配置

啟用 USB 持久化後,routerd 會在選定分割區上建立以下配置。

routerd/
router.yaml
usb-device
usb-flush-enabled
log-limit
secrets/
logs/
state/

開機時,/usr/share/routerd/live-persistence.sh init 會搜尋設定媒體。 首先確認已記錄的裝置, 接著確認核心命令列的 routerd.usb=, 最後搜尋標籤為 ROUTERD_CONFIGROUTERD 的裝置。 可寫入的分割區用於持久化。Proxmox 的 media=cdrom 設定 ISO 等唯讀的 ISO9660/UDF CD-ROM 媒體, 僅作為設定匯入用途,寫出(flush)功能會停用。

選定的分割區掛載至 /media/routerd-usb。 輔助程式會優先搜尋主機專屬設定,再搜尋通用設定。

  • /media/routerd-usb/routerd/hosts/<hostname>.yaml
  • /media/routerd-usb/routerd/hosts/<mac>.yaml(MAC 可使用冒號分隔或小寫無分隔格式)
  • /media/routerd-usb/routerd/router.yaml

找到設定後,複製至 /usr/local/etc/routerd/router.yaml, 接著由 Live ISO 的開機程序套用設定。為方便驗收測試與障礙排查, 來源路徑與 SHA256 會分別儲存於 /run/routerd/live-config-source/run/routerd/live-config-sha256。 密鑰會在 apply 前還原。輔助程式按以下順序查找:

  • routerd/hosts/<hostname>/secrets/
  • routerd/hosts/<mac>/secrets/(MAC 可使用冒號分隔或小寫無分隔格式)
  • routerd/secrets/

檔案會以 mode 0600 安裝到 /usr/local/etc/routerd/secrets。 若無已儲存的設定,且 /usr/local/etc/routerd/router.yaml 也不存在,則啟動設定精靈。

檔案系統

Live 輔助程式使用 blkid 判斷檔案系統,並依判斷結果切換掛載選項。

檔案系統預設掛載選項備註
ext4rw,async,noatime持久化路由器用途的首選。
vfatrw,async,noatime,utf8,shortname=mixed適合一般 USB 隨身碟。無 Unix 權限。
exfatrw,async,noatime適合與桌面作業系統共用的大容量 USB 隨身碟。
iso9660 / udfro,noatime唯讀設定匯入媒體。持久化寫出停用。

FAT32 在 blkid 輸出中通常顯示為 vfat。 Live 輔助程式不會直接以 FAT32 硬式編碼掛載, 而是先判斷檔案系統類型,再選擇對應的選項。

預設使用 async,noatime, 以減少對 USB 快閃記憶體的寫入次數。 若優先考量除錯或保守的寫入確認,請指定以下核心參數。

routerd.usb_mount=sync

若要明確指定預設值,使用 routerd.usb_mount=async

日誌緩衝

執行時日誌暫存於 tmpfs。

/run/routerd/logs

預設上限為 100 MiB。 超過上限時,從最舊的檔案開始刪除。

啟用每日寫出工作後,/etc/periodic/daily/routerd-usb-flush 會將以下內容複製至 USB。

  • 目前的 router.yaml
  • /usr/local/etc/routerd/secrets 下的檔案
  • /var/lib/routerd 的狀態封存
  • /var/db/routerd 的狀態封存
  • /run/routerd/logs 的壓縮日誌封存

也可手動執行寫出。

/usr/share/routerd/live-persistence.sh flush

save-config 也會在 /usr/local/etc/routerd/secrets 存在時,將其複製到持久化裝置的 routerd/secrets/。若長期運作時需要 removable media 本身保留 Unix 權限,請優先使用 ext4,而不是 vfat/exfat。

安全移除

持久化掛載仍有效時,請勿直接拔除 USB 裝置。 請先透過 Live 輔助程式執行寫出與卸載。

/usr/share/routerd/live-persistence.sh flush
/usr/share/routerd/live-persistence.sh umount

目前狀態可透過以下指令確認。

/usr/share/routerd/live-persistence.sh status

即使 USB 裝置意外拔除,routerd 仍會繼續在 RAM 上運作。 Live 輔助程式會輸出警告,在裝置重新插入並掛載前, 不再將 USB 路徑作為持久儲存目的地。

常用指令

列出候選裝置。

/usr/share/routerd/live-persistence.sh list-devices

將設定儲存至 USB。

/usr/share/routerd/live-persistence.sh save-config /dev/sdb1 /usr/local/etc/routerd/router.yaml yes 100M

還原會在開機時自動執行。 若需從 shell 重新執行開機程序,請使用以下指令。

/usr/share/routerd/live-persistence.sh init