2017年2月26日 星期日

VirtualBox 安裝win10及CentOS7 dual boot


目標:

1. 先在VirtualBox上進行multi boot模擬,然後在預載Win10的筆電上安裝 CentOS7

2. 確實了解安裝細節,以期能解決筆電實機和虛擬機環境不同所造成的可能的未知問題

重點:

1.使用GPT partition table

因為目前主要都是用GPT,而且目標筆電本身預載Win10也是用GPT

2.硬體電源控制相容性

因為Linux並不見得完整支援特製的硬體的電源管理功能(筆電或OEM機種)

(鳥哥)
http://linux.vbird.org/linux_basic/0157installcentos7.php#centos_9

3.關閉快速啟動(在 windows下設定)和禁用安全啟動(在BIOS或UEFI設定)

(文件連結)
https://read01.com/jND7m.html


實作步驟:

1. 開啟VirtualBox 的UEFI

2. 安裝win10企業版試用

由MS網站直接下載iso檔,直接掛載iso安裝

3. 安裝CentOS7

由官方網站下載everything版本的 iso 檔(CentOS-7-x86_64-Everything-1511.iso),同樣直接掛載iso安裝

(CentOS安裝教學: 鳥哥)
http://linux.vbird.org/linux_basic/0157installcentos7.php

3. 安裝完後重開機可以在開機選單選擇作業系統

假如選擇啟動win10,之後重開機就沒有選單直接進入win10,CentOS7的bootloader儲存在UEFI的設定似乎被修改掉了,也有可能是CentOS7原本在Win10的ESP有做設定調整,但是Windows Boot Manager 自己在開機時又修改回原本的

假如選擇啟動CentOS,那就沒什麼問題

這樣直接安裝記得應該會產生兩個ESP,一個是原本 win 10的,一個是CentOS的

==以下開始為重新安裝grub2於win10建立的ESP,相當於CentOS無法啟動的手動救援==

4. 掛載CentOS7安裝光碟,開機按住F12進入UEFI,設定開機順序為CD/DVD優先

5. 進入CentOS7安裝選單,看最下面的說明,按'c'進入grub shell

6. 使用指令前先按TAB,列出所有可用指令

因為很多參考文件的指令都是grub legacy的指令,或是比較舊的grub2指令,,CentOS7內附的是比較新版的grub2,詳細的說明要直接去看隨附的manual

(grub2官方文件,但是指令是舊的,具參考價值)
https://www.gnu.org/software/grub/manual/grub.html

7. 輸入指令"ls" 列出所有的partition

8. 輸入 "ls (hd0,gptX)/" 指令

指令中的"gpt"可省略,X代表partition編號,可以直接讀取支援的檔案系統的partition內容,用來確認root和boot資料夾的位置在哪一個partition,還有確認ESP是哪個partition

(grub2參考文件,也是舊指令)
https://www.openfoundry.org/tw/foss-programs/9267-linux-grub2-fixing

9. 直接使用grub 手動將CentOS7開機

    指令範例

          linuxefi (hd0,gpt6)/vmlinuz-3.......... root=/dev/sda7
          (設定linux kernel路徑,還有initramfs的root參數)
       
          initrdefi (hd0,gpt6)/initramfs..........img
          (設定initramfs.img的路徑)
       
          boot
          (啟動作業系統)

10. linuxefi指令(新指令)是指定linux kernel的位置

通常linux kernel 是在boot底下,檔名後面空一格,接root的裝置檔案partition位置,開機時似乎是被當成initramfs(initial ram filesystem)的參數輸入,所以這邊是用/dev/sda7這種Linux裝置檔案方式表示,而不是(hd0,gpt7),沒有指定root的話,開機就會halt,整個就會當掉

11. initrdefi指令(新指令)是指定linux 的init ram filesystem的映象檔案

開機時的early userspace,通常也是在boot底下

(initramfs文件)
https://wiki.archlinux.org/index.php/Arch_boot_process#initramfs

12. boot指令是啟動作業系統

假如前面linuxefi和 initrdefi沒先設定的話,會有錯誤提示

13. 在操作grub shell時盡量不要做多餘的行為

因為有可能導致不可預期的開機失敗,例如剛開完機,welcome to CentOS7,然後馬上就自動開始準備關機

14. Linux開機後,將UEFI的ESP掛載上/boot/efi,ESP內含windows boot manager(windows bootloader)

(掛載教學)
http://linux.vbird.org/linux_basic/0230filesystem.php#mount

15. 重新安裝grub2

連上網路,刪除grub相關設定檔後,使用yum進行reinstall grub的動作,這會在ESP內安裝grub2的bootloader 檔案,然後輸入指令grub2-mkconfig進行開機進入點entry的自動偵測和設定,grub2會自動把win10的chain loading設定好,並加進grub2的boot menu

(reinstall grub2教學)
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Reinstalling_GRUB_2.html

16. 實際使用結果

要從win10切換到CentOS7,必須要完全關機後再重開,才會進入grub2的boot menu,假如只是直接重新開機的話,再開機後會直接進入win10,所以可以觀察到win10對於"關機"和"重新開機"在底層所進行的步驟是有些微不同

17. 避免這個問題

必須到win10內使用bcdedit這個內建工具來將windows設定的bootloader 切換到grub2,但是不確定會產生什麼副作用

(bcdedit教學)
http://askubuntu.com/questions/235567/windows-8-removes-grub-as-default-boot-manager




沒有留言:

張貼留言