5 minute read     Posted on:     Updated on:

Multi System

多系統對於一般非資訊專業人士而言,基本上是一個不需要了解的知識
但是身為一個資訊專業人士,在某些情況下你可能會需要多開系統,比如說

  • 當你的電腦是 MacBook Pro,而老師要求你明天交一個 word 檔
  • 當你的電腦是 MacBook Pro, 而你很想要打遊戲
  • 當你的電腦是 Windows, 你想跑得開源專案只支援 Linux

這時候多數人會選擇使用虛擬機的方式
像是 macOS 可以跑所謂的 Parallel Desktop 的方式運行
如果是 Linux 或是 Windows 系統,你可以使用 VirtualBox
這樣你就可以 同時 跑兩個系統,解決你的使用需求

普通的使用情境下這樣做當然是一個很好的選擇
但上述的操作會對你的機器造成較大的覆載
因為對於作業系統而言,它必須要模擬出上面的那個作業系統
而模擬這件事情是很耗效能的

相比 container 與 host machine 共用 kernel 這件事
顯然每個 VM(Virtual Machine 虛擬機) 都要自己模擬 kernel 會比較吃效能
(可以參考下圖的架構)

Introduction to Dual Boot

既然 虛擬機 會明顯比較吃效能
那有沒有一種方法是可以在一台電腦上裝上兩個系統 在我需要的時候就可以做切換了呢?

Dual Boot 就是這個問題的最佳解了!
在一台機器上安裝兩套系統,可以避免開虛擬機太耗效能的問題

Does Dual Boot Safe?

雙系統會對現有系統造成影響嗎?

先說結論 不會

作業系統本質上就是一堆 檔案
所以在電腦上安裝兩套的作業系統並不會對現有系統有任何影響(前提是你安裝的過程沒有失誤)

Can I Dual Boot at the Same Time?

雙系統跟傳統的虛擬機不同
虛擬機可以同時開很多個
比方說你的主機是 Windows, 你可以多開 Linux

而雙系統的意思是
電腦上安裝了兩套系統,但是 同一時間只能開一套起來使用

Dual Boot Installation

接下來會帶到所有安裝雙系統,你需要做的準備

Partitioning your Disk

這裡講的是單硬碟安裝多系統的情況
如果說你要安裝多硬碟,可以參考 Multiple Disk Installation

理所當然的,如果要在單顆硬碟上安裝多系統勢必要對硬碟做切割
但是你不能直接切個資料夾或是分區什麼的

資料夾真的不能拿來安裝系統

不能直接切分區的原因是因為
在 Windows 裡面,檔案系統預設是使用 NTFS
由於 NTFS 是使用 fixed-size block 進行檔案讀寫的,因此 NTFS 非常容易造成 Fragmentation
導致資料東一塊 西一塊
因此你在切磁碟分區的時候,必須先進行壓縮,將資料全部集中到一起,再切割就沒問題了

有關 Fragmentation, 可以參考 資料庫 - Index 與 Histogram 篇 | Shawn Hsu


一開始先使用 win + x 叫出磁碟管理應用程式(如下圖)

我自己的電腦只有一個硬碟,所以你有看到只有一列(其中包含開機磁區以及 C 槽)

對 C 槽的部份右鍵叫出選單,選擇 壓縮磁區

這裡我想要切 500 GB 出來,所以填 500000 MB

切好之後會長這樣

這樣就好
有些文章會希望你創建新的磁碟區
但是這樣會增加之後的操作的危險性
所以把它弄成為配置的空間即可

Prepare Boot Device

接下來是要準備你的系統的部份
你要準備的東西會是所謂的 映像檔

映像檔當初是為了進行跨裝置大檔案的傳輸所開發出來的格式
你可以將大檔案以無壓縮的方式打包成映像檔(i.e. iso), 之後就可以寫入 CD 或 DVD 之上(用於傳輸或儲存)
當然現在其實很少人在用這種傳統儲存媒體了,多數都是用於製作開機碟相關

那開機碟映像檔的內容包含

  • 必要的作業系統檔案系統
  • 必要開機程式

接下來就是選擇你的目標系統映像檔了


為了能夠讓 BIOS 可以用該 iso 檔進行開機
因此我們需要將它寫到 CD 上…嗎?
其實你可以用 usb 隨身碟就可以了(依照過往的經驗大概 8 GB 的就夠了)

你可以使用 rufus 製作開機碟
基本上只要將 裝置 以及 iso 檔案 選擇好
接著讓它跑完,開機碟就製作完成了

\

ref: https://rufus.ie/zh_TW/

BIOS Setting

為了要能夠正確的讀取到剛剛製作好的開機碟
BIOS 的設定是需要做調整的

Fast Boot

快速開機,就是要快速
在 BIOS 層要達成這件事情就是必須得要省去檢查的步驟
當然不是說都不要檢查,而是略過一些相對不太重要的檢查程序
包括但不限於

  • 不做 memory test
  • 不載入外接設備
  • 省去 BIOS 界面等待時間

這樣對於 user 來說,就可以更快的進入到系統辦正事了

但你有沒有發現,如果啟用快速開機
這樣它就不能從 usb 開機(因為 BIOS 不會檢查外接設備直到真正開機完成才會做載入)
所以要將 fast boot 設為 Disabled(如下圖)


注意到這裡的 Fast Boot 跟 windows 內建的快速啟動不一樣
windows 的快速啟動指的是藉由所謂的 假關機 來讓下一次的開機更快
具體來說它就是將你的 應用程式狀態寫到檔案存起來,下一次開機的時候就直接從檔案直接讀取狀態
也就是所謂的 休眠

Secure Boot

顧名思義,安全啟動

據說是為了確保電腦本身只能執行製造商所認可的韌體而設計的
因為我們要安裝第二個系統,需要用到的韌體肯定不會是預裝的
所以要將它 關閉

關於 UEFI 關閉 secure boot 的方法,可以參考 ASUS 主機板 關閉 Secure Boot 及 Fast Boot

CSM

CSM - Compatibility Support Module 是相容性支持模組
有些作業系統不支援 UEFI 開機,所以這個模組的用義是為了支持傳統 Legacy BIOS 開機
如今多數系統是都支援 UEFI 了,但保險起見,你還是可以把它打開(如下圖)

有關 UEFI 與 Legacy BIOS 的差別可以參考 UEFI vs. Legacy BIOS

Boot Order

前面提到過,電腦開機一次只能跑一個系統(撇除 VM 以及 Container 的情況)
那麼如果有兩個可以開機的系統,要如何選擇?
因此 BIOS 裡面會有所謂的開機順序(Boot Order)
必須將開機順序更改
\

ref: The ASUS ROG Maximus X Apex Review: X Marks the Spot, Literally

找到你的 usb 隨身碟裝置(你通常可以透過製造商找到相對應的選項, e.g. SanDisk)
將前面製作的 usb 開機碟放在第一個順位

note: 每一家的 BIOS 都長的不一樣
有的可能是下拉式選單、可以滑鼠拖拉的
會需要找一下設定


全部做完存檔離開就可以進到下一步了

Install

本文將使用 Ubuntu 22.04 LTS 作為第二個系統

首先,先 boot 進去你的開機碟

如果你上述步驟有跟好,應該是沒問題的

接著就可以開始安裝了


如果有網路可以連,沒有也沒差


接下來這個,選擇 Something else(一定要選這個,不然就麻煩了)

在這裡你就可以看到有很多磁碟區
上面我們切了 500GB 的磁碟空間出來
為什麼說不要建立新的磁碟區,讓它保持 free space? 因為你可以從上圖看到,他的代號都會是 /dev/sdx 的格式
而且空間的計算方式會有誤差,所以你看到的空間 不一定是 500 GB, 以這個例子就是 524289 MB
而這個步驟是整個安裝雙系統最危險的地方,多數情況下如果你的磁碟空間分配的平均,如果沒有仔細查看,你可能會不小心選錯

因此這裡就是選擇之前切出來的 500 GB free space 空間
並且 boot loader 的部份,單硬碟的情況下選擇硬碟本身就可以了
多硬碟的情況,可參考 Multiple Disk Installation


這裡針對詞結空間的部份,檔案系統選擇 ext4 日誌系統
掛載目錄選擇 根目錄(i.e. /) 就可以了

有些人會選擇把 /home, /root 個別切開
這裡不建議這樣做,因為如果你切的空間不夠大,導致資料塞滿是沒有得救的(應該不是不行,但會很麻煩啦)
根目錄包含了所有的子目錄(e.g. /home, /root, … etc.), 所以你只要把全部空間都給根目錄就可以了



最後做幾個簡單的設定就可以等它跑

完成之後,恭喜你,你已經成功的安裝雙系統在你的電腦上面了

Restore BIOS Setting

在你完全安裝完成之後
BIOS 的設定必須改回去
其實主要要改的是 boot order, 其他的要不要改沒有什麼差別

不過當你安裝完成之後,系統會提示你將 usb 隨身碟移除
這個時候 boot order 預設的第一個順位就會是 GRUB2 的開機頁面了
就不用在做額外的調整了

CSMSecure Boot, Fast Boot 你可以不用把它改回去
當然要改也是可以,看你

Multiple Disk Installation

多硬碟安裝會需要注意一件事情
就是你的 boot loader

只是需要注意的是你的 boot loader 要裝在 有 Windows 的那顆硬碟上
(或者是硬碟 A 有 Windows boot loader, 硬碟 B 有 GRUB2 boot loader, 然後將 boot order 設為硬碟 B 優先)
只有這樣開機的時候才可以選擇不同的 OS

其他的安裝步驟都是一樣的,可以參考 Dual Boot Installation

Timezone of Dual Boot

你可能會發現,當你切換不同 OS(作業系統) 的時候,時區會亂掉
會亂掉的通常都是 Windows

主要的原因呢
是因為 Hardware Clock 以及 System Clock 的關係
當你在作業系統裡面切換不同的時區(e.g. 台灣是 UTC+8)
它會嘗試將 System Clock 的時間寫入 Hardware Clock
又因為 Linux 與 Windows 對於時間的解讀是不一樣的

  • Linux 將 Hardware Clock 視為是 標準時間
  • Windows 將 Hardware Clock 視為是 當地時間

就是一個奇妙的解讀方式
導致說你在切換不同系統的時候,Windows 的時間永遠都是錯的(以台灣來說,Windows 顯示的時間永遠會慢 8 個小時,因為台灣是 UTC+8)

解決的辦法也很簡單
在 Linux 下這個指令,將 Kernel 設定成讀取 當地時間 就可以了

$ timedatectl set-local-rtc 1
// 設定前
$ timedatectl
        Local time: 四 2022-05-26 02:04:01 CST
    Universal time: 三 2022-05-25 18:04:01 UTC
          RTC time: 三 2022-05-25 18:04:02
      Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: yes
          NTP service: active
RTC in local TZ: no

// 設定後
$ timedatectl
        Local time: 四 2022-05-26 02:04:01 CST
    Universal time: 三 2022-05-25 18:04:01 UTC
          RTC time: 四 2022-05-26 02:04:01 CST
      Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: yes
          NTP service: active
RTC in local TZ: yes

c.f.
UTC: 世界標準時間
CST: CST 可以表示多種時區,不過以這個例子他是指 China Standard Time(i.e. UTC+8)

有關 Hardware Clock 以及 System Clock 的介紹可以參考 Linux Kernel - Clock | Shawn Hsu

GRUB

\

ref: How to Change Grub2 Boot Order in Ubuntu 16.04

boot loader 是在作業系統前第一個執行的程式
它主要負責載入 Kernel, 隨後在交由 Kernel 啟動整個作業系統

Windows 有自己的開機程式
而 Linux 則是使用 GRUB2

GRUB 可以提供多個 OS 的開機選項
也就是說 GRUB 不只可以做到開機 Linux, 它也可以開機 Windows(透過 Chain-loading 的方式,亦即呼叫另一個 boot loader)
相反的,Windows 只能做到啟動 Windows

這也就是為什麼有人會說必須先裝 Windows 再裝 Linux 的原因
因為會被蓋掉,導致你沒辦法進入 Linux

GRUB Default Boot and Timeout

你可能會發現,GRUB 的選單如果你沒有手動指定要開哪個作業系統(使用鍵盤方向鍵上下移動),它會在 10 秒之後自動進到第一個順位的 OS
對於常常使用 Windows 而非 Linux 的人來說,如果能夠讓它預設進入 Windows 就太好了對吧

透過修改 config 檔我們可以做到這個功能

$ sudo vim /etc/default/grub
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

這裡我們關心的主要就是兩點
預設啟動 OS 以及選單的 timeout 時間

  • GRUB_DEFAULT
    • 這裡的 0 指的是相對於選單的號碼,由上而下分別是(Ubuntu: 0, Advanced options for Ubuntu: 1, Windows Boot Manager (on /dev/sda1): 2, System setup: 3)
    • 假設你想要預設是啟動 Windows, 就把設定改成 GRUB_DEFAULT=2
  • GRUB_TIMEOUT
    • timeout 指的是在選單停留的時間(不過當你有手動操作的時候就會取消倒數), 他的單位是 seconds
    • 你可以把它改為 1 分鐘(也就是 60 seconds), 設定就會變成 GRUB_TIMEOUT=60

當你全部改完之後要對 GRUB 本身做更新

$ sudo update-grub

就可以了

How about Triple Boot or N Boot?

既然你可以裝雙系統,那麼理所當然的也可以裝多系統對吧

事實上當然可以,而且安裝過程基本一致
唯獨在多硬碟的情況下需要注意一下 boot loader 的位置
詳細可以參考 Multiple Disk Installation

UEFI vs. Legacy BIOS

其實本文對於 BIOS 的描述不算太嚴謹
因為實際上 UEFI 與 BIOS 是兩個不同的東西
不過為了方便起見,這裡都還是以 BIOS 代稱

BIOS

BIOS 或稱之為 Legacy BIOS 是 Basic Input Output System 的縮寫
它主要會在系統啟動之前做必要的檢查並且引導系統進行開機

BIOS 使用 MBR 格式(單一磁碟分割區可以到 16TB, 可以有 4 個 primary partition),並且支援 32-bits 以及 64-bits 的操作系統
如果是稍有年代的電腦,就會配備 Legacy BIOS 的韌體

\

ref: UEFI vs BIOS:有什麼差異以及哪一個更好

UEFI - Unified EFI Forum

相比舊版的 BIOS,UEFI 提供了更漂亮的畫面、更高的安全性、還可以連網
至於 UEFI 會不會做自檢(POST - Power-On Self Test)這件事情
答案是會的,但它其實簡化的 BIOS 的自檢流程

因為早期 BIOS 的年代,BIOS 是沒辦法儲存週邊設備的硬體情況的
導致每次開機都要全部重新做一次 POST
UEFI 可以儲存這些訊息,也就是說不用每次都做自檢(針對不常變動的設備)

UEFI 使用了 GPT 格式(單一磁碟分割區可以到 18EB,可以有 128 個分區),並且支援 32-bits 以及 64-bits 的操作系統
現在多數電腦都配備了 UEFI 開機系統

儲存容量單位:Bit, Byte, KB, MB, GB, TB , PB, EB, ZB, YB

EFI - Extensible Firmware Interface

ref: ASUS ROG Strix B550-E Gaming – BIOS (1)

References

Leave a comment