前言:以下將會嘮叨一大堆內容,建議不要讀直接進入正文。現已安裝了一個debian xfce的操作系統,分區表是MBR(l傳統模式引導),
通過寫盤工具燒錄,能在燒錄大多x86的板子上面運行.現有遇到一種奇葩的終端-z8350, 只支持UFFI引導, 看了bios的設置,只有寥寥
幾個選項.最終判斷它真的只能是UEFI引導, 不知道是bios被去掉的原因,還是這個板子或芯片原因. 由於對bios又不熟,只能從系統引導
層入手了(其實這個也不熟).那為什么不直接在8350。這款終端上面直接安裝UEFI引導呢.主要兩方面原因:1原本已經稍好的系統,
做了大量的系統更改,編譯安裝不少軟件,前后升級軟件依賴庫的,再重新安裝巨麻煩,容易漏掉哪個細節而留下bug.2 另一原因
是Debian使用UEFI安裝,無法燒錄到其他板子上,即使是相同型號的板子也不行。但在一些Ubuntu和fedoras的UEFI可以,發現有一
個地方不一樣,fedoras的UEFI的分區表是MBR,而debian的分區表是gpt的,也許是這個原因,以前剛開始做這個debian系統時,
嘗試過安裝debian轉換MBR分區表,要么安裝失敗,要么安裝完又變回gpt分區表,所以就放棄這個想法了。
正文:
1、新建一個EFI分區 (好在之前保留了一個vfat分區,可以直接拿來用,不然就只能縮容了,我的全部分掛載在/
目錄,而且還是非lvm,要對這里動刀十分麻煩。)
(1)新建efi分區,這里使用 fdisk /dev/sdx 命令新建,然后mkfs.vfat格式化。
還有需要將分區標記為efi分區,fdisk這個命令應該可以修改,但我沒折騰,直接裝gparted圖像化工具改(apt install gparted)。
(2)創建/boot/efi,目錄然后將剛新建的efi分區掛載上去。
在/etc/fstab編輯增加, (使用blkid查看分區uuid)
UUID=xxxx-xxxx /boot/efi vfat rw 0 0
# mount -a (掛載/etc/fstab剛填寫的)
2、安裝grub-efi
sudo apt install grub-efi
3、使用grub-install 生成efi引導信息 (如果不安裝grub-efi會報錯缺少modinfo.sh)
# grub-install --boot-directory=/boot/efi --target=x86_64-efi --efi-directory=/boot/efi --removable
會在/boot/efi/生成 EFI/BOOT/BOOTX64.EFI
# grub-install --target=x86_64-efi --boot-directory=/boot/efi --efi-directory=/boot/efi
會在/boot/efi/生成 EFI/debian/grubx64.efi
--boot-directory加不加也不影響最后結果,不加--boot-directory這里執行會可能報錯,提示啥未注冊或者環境不支持類似(記不太清),
報錯沒太大關系,只要/boot/efi 目錄下 生成對應的efi文件,有就可以了
4、重啟進入BIOS
進入BIOS后,找到引導項將會看到一個硬盤名字,一個是UEFI+硬盤名字, 還有一個是 寫着Debian。
(1)硬盤名字:原先的mbr傳統引導
(2)UEFI+硬盤名字: 這個是加了 --removable 用於移動設備,比如U盤
(3)Debian:這個是沒加--removable 參數,個人理解是對於非移動設備
結果3個都可以引導進去。搞那么一個--removable,只是為了兼容性好一點,將做好這個系統,燒錄到z8350也可以通過UEFI成功引導。
拓展記錄:
1,grub-pc 的-pc是指MBR分區傳統引導的對應/usr/lib/grub/i386-pc
2,grub-efi 的是指uefi引導的,安裝了才會有/usr/lib/grub/i386-efi
3,grub-pc和grub-efi這兩個包沖突,只能存在一個,grub-install --target 參數依賴用到
4,網上提到bios是否支持UEFI,查看 /sys/firmware/efi 這個目錄是否存在,其實並不是很正確。
按我實驗所得出的結果是,使用傳統引導就不存在/sys/firmware/efi, 而使用UEFI 引導進去
則才會有這個目錄/sys/firmware/efi ,所以並不能說明bios是否支持UEFI。
linux使用UEFI引導可能需要把secury boot 選項關掉,由於UEFI簽名的問題。
5,由於grub-install 誤操作生成一些其他的文件在/boot/efi/, 那先把這個目錄所有文件清除
6,進入grub>命令行,手動引導方法:
(1)用 ls 查看文件 ,我的機器是列出(hd0) (hd0,msdos1) (hd0,msdos2)
grub> ls (hd0,msdos2)/ 查看哪個是root分區,我這里就是(hd0,msdos2)
grub> set root=(hd0,msdos2)
(2) 加載/boot/grub/grub.cfg 文件,這個命令需要在set root=(hd0,msdos2)之后,不然找不到這個文件
grub> source /boot/grub/grub.cfg 不知這條命令后面會提示no suitable video mode found
(3) 裝載內核:linux /boot/vmlinuz-xxxx root=/dev/sdx (這里的xxxx根據你系統內核版本,按tab就可以補全, sdx 這里是根分區,根據實際情況,不能直接(hd0,msdos2)格式)
grub> linux /boot/vmlinuz-4.9.0-9 root=/dev/sda2
grub> initrd /initrd.img
(4)啟動m 看能否引導到桌面系統,反正我是成功了,如果報其他錯就自行解決了。
grub> boot