Window10和Ubuntu 18.04雙系統安裝的引導問題解決


  作為碼農

  首先,建議了解下grub2的啟動順序和邏輯。可以參考這篇文章,grub.cfg詳解

  從執行順序倒推,如下如果全部執行成功,則會進入grub的啟動菜單;如果最后一步,沒有找到grub.cfg或者執行grub.cfg出錯,則進入grub普通模式;如果倒數第二步,家在normal.mod模塊失敗,則進入grub secure模式。

GRUB2在BIOS平台上的常規啟動步驟是這樣的:BIOS --> boot.img[MBR] --> core.img[MBR gap/embedding area/BIOS Boot Partition] --> 設置"prefix root cmdpath"環境變量 --> 加載"normal.mod"模塊[同時還包括它所依賴的 terminal crypto extcmd boot gettext 模塊] --> 執行"normal $prefix/grub.cfg"命令

GRUB2在UEFI平台上的常規啟動步驟是這樣的:UEFI --> core.img[BOOTX64.EFI/BOOTX86.EFI] --> 設置"prefix root cmdpath"環境變量 --> 加載"normal.mod"模塊[同時還包括它所依賴的 terminal crypto extcmd boot gettext 模塊] --> 執行"normal $prefix/grub.cfg"命令

  

  這里我們分別介紹兩種模式下的解決方式:

  • Grub普通模式
    • 手動引導進入系統
      • ls 可以看到形如 (hd0, gpt2)之類的硬盤分區, ls (hd0,gpt2)/root/之類的可以看到文件系統結構;
      • 找到要啟動的系統路徑,主要是grub目錄、vmlinux、initrd,如下圖
        •   
          # ll /boot/
          總用量 135336
          drwxr-xr-x  4 root root     4096 7月  10 22:22 ./
          drwxr-xr-x 24 root root     4096 7月  10 22:20 ../
          -rw-r--r--  1 root root  1536934 4月  24 12:56 abi-4.15.0-20-generic
          -rw-r--r--  1 root root  1537050 5月  24 00:54 abi-4.15.0-23-generic
          -rw-r--r--  1 root root   216807 4月  24 12:56 config-4.15.0-20-generic
          -rw-r--r--  1 root root   216807 5月  24 00:54 config-4.15.0-23-generic
          drwxr-xr-x  3 root root     4096 1月   1  1970 efi/
          drwxr-xr-x  5 root root     4096 8月   5 07:38 grub/
          -rw-r--r--  1 root root 55988734 7月  10 22:20 initrd.img-4.15.0-20-generic
          -rw-r--r--  1 root root 53910349 7月  10 22:22 initrd.img-4.15.0-23-generic
          -rw-r--r--  1 root root   182704 1月  28  2016 memtest86+.bin
          -rw-r--r--  1 root root   184380 1月  28  2016 memtest86+.elf
          -rw-r--r--  1 root root   184840 1月  28  2016 memtest86+_multiboot.bin
          -rw-r--r--  1 root root        0 4月  24 12:56 retpoline-4.15.0-20-generic
          -rw-r--r--  1 root root        0 5月  24 00:54 retpoline-4.15.0-23-generic
          -rw-------  1 root root  4038188 4月  24 12:56 System.map-4.15.0-20-generic
          -rw-------  1 root root  4039393 5月  24 00:54 System.map-4.15.0-23-generic
          -rw-r--r--  1 root root  8249080 4月  27 10:40 vmlinuz-4.15.0-20-generic
          -rw-------  1 root root  8257272 5月  24 01:49 vmlinuz-4.15.0-23-generic

           

      • 設置grub boot環境,其中root的地址為要啟動的linux系統(如Ubuntu)所在的硬盤分區節點名。hd0對應sda,hd1對應sdb,以此類推。。。(hd0,gpt1)對應sda1,(hd1, gpt2)對應sdb2以此類推。。。
        • grub> set boot=(hd0,gpt2)
          grub> linux /boot/vmlinuz-4.15.0-23-generic root=/dev/sda2
          grub> initrd /boot/initrd.img-4.15.0-23-generic
          grub> boot

           

    • 修復引導
      • 一般為了避免進入系統后,下次再進入還要輸入以上命令,可以用如下方法
        • # sudo update-grub
          # sudo grub-install /dev/sda

           

      • 然而我發現,這個方式在我的case里不生效,嘗試找下根本原因    
  • Grub Secure模式
    • 手動引導進入系統, LInk
    • 修復引導


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM