2019年6月26日 星期三

[FreeBSD] UEFI boot loader with http support

最近 FreeBSD 的 uefi boot loader 加上了 http protocol 的支援,

但是剛出來的 code,總是有點 bug,而不幸的是,我剛好踫上了!

make world; make kernel; reboot 之後,機器就卡在 boot loader 的過程,
因為是 load boot loader 階段,所以連進去 boot loader 去 bypass 的機會都沒有。

更難堪的是,跑在小機器上,M2 規格只有一個,不可能裝另外一個 SSD,然後把原本的掛上去偷天換日。

所以想了一下,大概就是用 bootable cd,開起來之後進去 shell 裡面去處理。

因為現在其實很少人會還有燒錄機這種東西,而我也討厭用 usb 去 boot,
所以 N 年前就在同事建議之下,買了拉麵外接盒 (https://24h.pchome.com.tw/prod/DRAB5S-A9005B1NK)
可以直接將 iso 丟進去,讓他模擬成 bootable cd,很環保。

下面是一些步驟,是為了以後遇到同樣的問題,我自己會忘記而記錄下來的。


  • 用 install cd 開機之後,dialog 選 shell,然後用 root login。
  • dmesg 看一看,可以查到自己的硬碟在哪個裝置上(我的機器上是 nvd0)
  • gpart show nvd0
    • 可以列出這個硬碟上面有哪些 partition。
    • 我是把系統都裝在 zfs 上。
    • 理論上第一個應該是 efi,第二個是 freebsd-boot,第三個是 freebsd-swap,第四個就是 freebsd-zfs 了。
  • 再來就是用 gpart 來安裝 boot loader
    • gpart bootcode -b /boot/pmbr -p /boot/loader.efi -i 2 nvd0
    • index 是 2 的原因是, 1 => efi, 2 => freebsd-boot
  • 重開機,boot loader 就是比較舊版本的那個了。


Ref: https://ashish.blog/2018/06/freebsd-uefi-boot/