2017年2月26日 星期日

在Dell Latitude E7470,安裝Win10, CentOS7 dual boot

建議先看前篇
http://usehand.blogspot.tw/2017/02/virtualbox-win10centos7-multi-boot.html

步驟

1. 硬體 DELL E7470

2. 主板韌體DELL OEM  UEFI

3. original OS: Win10 pro, target OS: CentOS7
    CentOS7則利用Rufus將iso檔內容寫入隨身碟建立可安裝碟
    https://rufus.akeo.ie/?locale=zh_TW

4. Partition status
 
Win10的Partition比較特別,會有一個MSR,是保留來給一些會用到BIOS的舊程式用的,但是在windows的虛擬磁碟管理介面裡面只會看到一個沒有名字的槽,要確認的話要用其他工具

    https://en.wikipedia.org/wiki/Microsoft_Reserved_Partition

5. ESP of windows
 
在安裝時要確定好,用grub shell或是進到linux後確認

6. bootloader of CentOS
 
在安裝CentOS時先不安裝bootloader(grub2),因為會變成有兩個ESP,而且也沒辦法直接選擇安裝在win10的ESP內,在安裝畫面的角落有小字可以選擇,但是這也就造成CentOS安裝完沒辦法開機,等於是安裝完就處於待搶救狀態

7. Installation configuration of CentOS7
 
只設定了root和home兩個partition,swap取消,ESP也取消(不安裝bootloader)

8. The feature CentOS7 support: Power sleep, audio driver when boot up
 
CentOS7在開機的時候會喇叭會有怪音,然後目前看來似乎有支援關上螢幕進入睡眠

9. CentOS 安裝畫面下所偵測到的sdb,但是開機時會偵測成sda,所以手動啟動的時候要注意
 
因為我有額外裝USB這些儲存裝置,而 Linux開機時認到的順序可能會和安裝時不同,所以要注意


10. 不安裝bootloader,以及/boot/efi預設掛載問題

雖然安裝的時候沒安裝bootloader,但是實際上開機後會發現/boot/efi目錄裡還是會有grub2,但是該目錄實際上不在ESP內

11. 手動啟動CentOS後安裝bootloader

將win10的ESP掛載上/boot/efi後,/boot/efi內就只看得到win10 ESP的內容,原本grub2的部份會暫時看不到,使用yum進行grub2的安裝

12. windows下設定bcdedit

結論

其實安裝一次就成功了,雖然第一次安裝就把swap、ESP都取消掉有點冒險,因為不知道會不會有什麼其他的副作用,但是目前看來都ok


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