Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

Linux UEFI 開機
post by tommy @ 19 二月, 2014 19:25

原本對於 UEFI 的認識, 認為只要弄一個 FAT32 的 partition, 把 loader 放在 /efi/boot/bootx64.efi 就能夠正常開機了.不過.... 過年後打算更換家裡的主機, 裝起來之後, 因為是用 UEFI 的 BIOS, 所以就打算改用 UEFI 來開機.... 結果, 卡了好幾天...

自己用 sysresccd 來分割並格式化, 再由目前的備份還原, 再 chroot 進去把原本用的 grub-pc 移除, 改用 grub-efi. 原本認為這樣子應該就可以了, 不過... 試了好多次, 怎麼弄都開不了機.... 最後, 弄了 Debian 的光碟來裝, 裝好居然可以正常開機... 實在看不出來是那兒不一樣了....

弄了一星期, 終於發現為什麼了.... 原來.... UEFI 並不是所有 FAT32 的格式都能用.... 它是有可能看不懂 FAT32 的空間, 自然會無法開機.

這與你切的大小或許有關係, 而一般用 gparted 來格式化時, 會看不出警告訊息, 直到自己下指令來格式化, 如:

mkfs.fat -F32 /dev/sda1

有可能會出現

WARNING: Not enough clusters for a 32 bit FAT!

這時, 做出來的 FAT32 就不會被 UEFI 認得.

要避免這個問題, 可以加上 -s2 或 -s1 的參數, 如:

mkfs.fat -F32 -s2 /dev/sda1

就不會有上面那個警告了, 這時做出來的 partition, 在 UEFI 中就會被認得了.

總結一下 UEFI grub 的安裝:

  • 用 sysresccd 透過 UEFI 開機 (非必要, 如果是用傳統的方式開機, 要把 grubx64.efi 放到 /efi/boot/bootx64.efi 才可以)
  • modprobe efivars
  • 把硬碟的 root mount 在 /mnt/custom
  • 把 boot partition mount 在 /mnt/custom/boot
  • 把 efi 的 FAT32 partition mount 在 /mnt/custom/boot/efi
  • mount -B /dev /mnt/custom/dev
  • mount -B /dev/pts /mnt/custom/dev/pts
  • mount -B /dev/proc /mnt/custom/proc
  • mount -B /dev/sys /mnt/custom/sys
  • chroot /mnt/custom /bin/bash
  • 移除原本的 grub-pc
  • apt-get install --reinstall grub-efi-amd64
  • grub-install
  • 一般來說, 上面的 grub-install 不用加參數應該就可以用.
  • update-grub
  • 這樣子應該就會透過 efibootmgr 把開機選項加上了, 開機時就能看到. 如果前面不是用 UEFI 開機進來的, 這個動作會失敗, 這時就要手動把 /boot/efi/debian/grubx64.efi 複製一份到 /boot/efi/boot/bootx64.efi 才可以 (因為預設是看這個檔案)

其實應該比傳統的 grub 好裝.... 只要是 FAT32 沒弄錯的話... :-(

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 136 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS