出自 Arch Linux 中文维基

重要信息

Windows 在 UEFI 和 BIOS 上的限制

不同版本的 Windows 對固件啟動模式和分區表有不同的需求。以下依版本列出。

注意: 下列情形是 Windows 安裝程序的限制。但 Windows 本身仍可能在安裝程序不支持的環境下正常運行。例如,在繞過相關安裝檢測後,Windows 11 仍可在 BIOS/MBR 的配置上運行。
  • XP 所有版本均只支持從 BIOS/MBR 配置啟動。
  • Vista
    • 32 位所有版本均只支持從 BIOS/MBR 配置啟動。
    • 64 位 RTM 只支持從 BIOS/MBR 配置啟動,SP1 及以上追加支持 64 位 UEFI/GPT 配置。
  • 7
    • 32 位所有版本均只支持從 BIOS/MBR 配置啟動。
    • 64 位支持從 BIOS/MBR 或 64 位 UEFI/GPT 配置啟動。
  • 8/8.1/10
    • 32 位支持從 BIOS/MBR 或 32 位 UEFI/GPT 配置啟動。
    • 64 位支持從 BIOS/MBR 或 64 位 UEFI/GPT 配置啟動。
  • 11 僅支持 UEFI/GPT。

對於預裝系統的計算機:

  • XP、Vista、7(32 位)全是 BIOS/MBR 啟動,無論軟硬體配置如何。
  • 7(64 位)幾乎都是 BIOS/MBR 啟動。僅有極少數晚近的型號是 64 位 UEFI/GPT 啟動。
  • 從 8 開始,都是 UEFI/GPT 啟動。UEFI 和作業系統的位數(32/64)是相同的。

最準確的判斷方式:

  • 啟動到Windows
  • Win+R打開「運行」,運行msinfo32.exe
  • 系統信息->系統摘要->BIOS模式
    • UEFI -> UEFI
    • Legacy -> BIOS

總的來說,Windows 安裝程序基於固件模式強制要求分區,UEFI 啟動只能裝到 GPT 盤,BIOS 啟動只能裝到 MBR 盤。

提示:Windows 10 1703 及以後版本提供從 BIOS/MBR 轉換到 UEFI/GPT 的工具

Linux 內核沒有這樣的限制,但引導加載程序及其設置可能會有影響。如果想要在同一硬碟上啟動 Windows 和 Linux,請考慮上述的 Windows 限制,因為引導加載程序的安裝過程依固件和分區類型可能會有區別。

安裝介質的限制

Intel Atom SoC(Clover 和 Bay)只提供 32 位 UEFI 支持,沒有 BIOS 支持。由於 Arch 官方安裝鏡像沒有 32 位 UEFI 啟動支持,無法直接在這類系統上啟動。可在在 32 位 UEFI 上啟動 64 位內核[損壞的連結:無效的章節]查看變通方法。

UEFI 和 BIOS 引導加載程序的限制

大多數某類(UEFI 或 BIOS 之一)固件上的 Linux 引導加載程序,不能啟動或鏈式加載另一種固件上的引導加載程序。例如,如果 Arch 以 UEFI 模式安裝在一塊硬碟下、Windows 以 BIOS 模式安裝在另一塊硬碟下,Arch 的 UEFI 引導加載程序不能鏈式加載 Windows 的 BIOS 引導加載程序。這與分區表類型無關。反之亦然。

有幾個例外:

  • 裝在蘋果電腦上的 GRUB。這裡,UEFI 模式的 GRUB 可以用appleloader命令啟動 BIOS 模式安裝的作業系統(在非蘋果電腦上無效)。
  • rEFInd 理論上也支持從 UEFI 固件啟動 BIOS 作業系統,但作者稱在非蘋果電腦上不總是正常工作。
  • 一塊硬碟上的 BIOS/GPT Arch 所使用的引導加載程序可以啟動另一塊硬碟上的 BIOS/MBR Windows,如果該引導加載程序本身支持鏈式加載其他硬碟的系統。

UEFI 安全啟動

一切預裝的 Windows 8/8.1/10/11 系統都默認使用 UEFI/GPT 方式啟動且默認啟用 UEFI 安全啟動 (Secure Boot)。對於所有 OEM 預裝系統 Microsoft 都強制要求這麼做。

目前 Arch Linux 的安裝媒體尚不支持安全啟動。參見Secure Boot#Booting an installation medium

目前建議的做法是,在試圖啟動 Arch Linux 之前在固件設置中手動禁用 UEFI 安全啟動。這樣,Windows 8/8.1/10/11 應該 也還能正常啟動。然而, Microsoft 已經明確禁止在預裝的Windows 8/8.1及以上系統中以遠程或編程的方式(從作業系統內部)禁用安全啟動,因此,這種做法的唯一問題是需要操作者能夠親自坐在目標電腦前並直接訪問該電腦。。

注意:
  • 如果使用 BitLocker 加密 Windows 且將密鑰保存在 TPM 內以便啟動時自動解鎖,則一旦禁用安全啟動,Windows 將無法啟動,並顯示 BitLocker 恢復屏幕。雖然如此,該問題並不永久,只要再次啟用安全啟動即可再次啟動 Windows。
  • 如果使用的是 Windows 11,禁用安全啟動將同時導致 Windows Hello、WSM(適用於 Android 的 Windows 子系統以及 Windows Update 無法使用。

快速啟動和休眠

兩個系統都可以休眠,既可以休眠 Windows 而啟動 Linux (或者另一個 OS),又可以休眠 Linux 而啟動 Windows,或者也可以兩個系統都休眠。

警告: 如果在 Windows 休眠時使用雙啟動進入另一 OS 並在二者皆可讀/寫的(如 NTFS)且已經被 Windows 掛載的某個文件系統上做出更改,有可能發生數據損失。(參見[1]。)同樣,如果 Linux 休眠而啟動另一個 OS,也可能出現數據損失,如此之類。在選擇關閉 Windows 時,Windows 也有可能實際上在休眠。參見#Windows 設置

同樣的原因,如果 Windows 和 Linux 使用同一個 EFI 系統分區,如果休眠(或在啟用快速啟動時關閉)Windows 並啟動 Linux,或者休眠 Linux 並啟動 Windows, EFI 系統分區可能遭到破壞。

ntfs-3g 加入了一種 保護機制 以阻止以讀/寫方式掛載已休眠的 NTFS 文件系統,但是 Linux 內核中的 NTFS 驅動並沒有該機制。

一般情況下,Windows 是無法讀取像目前廣泛用於 Linux 的 ext4 之類的文件系統的。除非你為這些 Windows 所不支持的文件系統安裝 Windows 驅動,這些文件系統可以忽略。

Windows 設置

快速啟動在 Windows 8 引入,其在關機時會休眠而非真正意義上關閉 Windows 以加快啟動速度。

在之後的章節中會談到關於快速啟動和休眠的 Windows 設置項。

  • 關閉快速啟動並關閉休眠
  • 關閉快速啟動並啟用休眠
  • 啟用快速啟動並啟用休眠

禁用快速啟動的方法:Windows 8Windows 10, Windows 11。此時無論如何,只要你禁用某項設置,請確保禁用某項設置,關閉 Windows,再安裝 Linux;請注意不應只是重啟。

關閉快速啟動並關閉休眠

這是最安全的方法,並且如果對該問題不確定,那麼推薦使用該方法。因為該方法在重啟進入另一 OS 時對用戶感知要求並不高。這時可以讓 Windows 和 Linux 共享 EFI 系統分區。

關閉快速啟動並啟用休眠

該方法在重啟進入另一 OS 時要求用戶感知。如果你想在 Windows 休眠時啟動 Linux(這種情況很常見)那麼:

  • 必須為 Windows 和 Linux 使用不同的 EFI 系統分區 (ESP),並確保 Windows 在休眠前沒有掛載 Linux 的 ESP。由於每個硬碟只能有一個 ESP,Linux 的 ESP 所處的盤必須與 Windows 的不同。即使在這種情況下, Windows 和 Linux 仍然可以安裝在同一硬碟的不同分區中。
  • 不能在 Linux 下以讀/寫方式掛載任何在 Windows 休眠時已經由 Windows 掛載的任何文件系統。必須非常小心對待此事,對此還應考慮Automount行為。
  • 如果完全關閉 Windows 而非將其休眠,那麼這些文件系統可以讀/寫掛載。
注意: 在 Windows 中將某盤掛載為可移動磁碟並在休眠前將其彈出可以為該盤避免此問題。
啟用快速啟動並啟用休眠

此情況下,應該考慮與「關閉快速啟動並啟用休眠」時同樣的情況。但是由於此時無法將 Windows 完全關閉,而只能將其休眠,在 Windows 休眠時由 Windows 掛載的分區將永遠不能讀/寫掛載。

注意: Windows Update 更新可能導致快速啟動被重新啟用。見[2]

Windows 文件名限制

Windows 限制文件路徑小於260 個字符

由於一些可以追溯到 DOS 的原因,Windows 同時禁止文件名中出現某些字符

  • < (小於號)
  • > (大於號)
  • : (半角冒號)
  • " (半角雙引號)
  • / (反斜槓)
  • \ (斜槓)
  • | (豎槓)
  • ? (半角問號)
  • * (星號)

這屬於 Windows 而非 NTFS 本身的限制——任何使用 NTFS 分區的其它 OS 都不受影響。Windows 將無法檢測到這些文件,並且運行 chkdsk 很可能會使它們被刪除,造成數據丟失的風險。

如果使用windows_names選項,NTFS-3G將會把和 Windows 一樣的限制應用於新文件的名字上:ntfs-3g(8) § Windows_Filename_Compatibility。(見fstab

安裝

設置 Linux/Windows 雙啟動的推薦方式是,先安裝 Windows, 但是只為其分區劃一部分空間。在 Windows 設置完畢後,啟動 Linux 的安裝環境以便為 Linux 創建分區並調整分區大小,但 Windows 分區保持原樣。Windows 的安裝已經創建了一個能夠用於你的 Linux 啟動引導程序EFI 系統分區

先 Windows 後 Linux

BIOS 系統

使用 Linux 啟動引導程序

你可以使用任何具有多啟動支持的 BIOS 啟動引導程序

使用 Windows Vista/7/8/8.1 啟動引導程序

本章節將講述如何在某一分區而非 MBR 上安裝一個 Linux 啟動引導程序、將該程序複製到某個可被 Windows 引導程序讀取的分區,以及用 Windows 引導程序啟動該 Linux 引導程序。

注意: 某些文檔聲明能被 Windows 引導器讀取的分區必須是主分區,但是擴展分區的使用也有成功記錄。
dd if=/dev/disk of=/path/to/linux.bin bs=512 count=1

其中/dev/disk是你安裝啟動引導程序的分區的路徑,/path/to/是你想要 Windows 啟動引導程序可以讀取該拷貝的且已經掛載的文件系統。

  • 現在你的 linux.bin 應該可以在 Windows 下訪問了。以管理員權限運行cmd(進入開始菜單-全部應用程式-(Windows)附件。右鍵命令提示符並選擇以管理員權限運行)並執行以下命令:
bcdedit /create /d "Linux" /application BOOTSECTOR

BCDEdit 將會返回該項的UUID。該 UUID 在下面的步驟中將會用UUID代替。

bcdedit /set UUID device partition=X: (X:為linux.bin所處分區的分卷號)
bcdedit /set UUID path \path\to\linux.bin
bcdedit /displayorder uuid /addlast
bcdedit /timeout 30

重啟之後,Windows 和 Linux 應該都顯示在 Windows 的啟動引導程序當中。

注意: 在某些電腦上,Windows 引導程序用另一電源按鈕啟動另一 OS(例如:Dell Precision M4500)。

參見 https://www.iceflatline.com/2009/09/how-to-dual-boot-windows-7-and-linux-using-bcdedit/

UEFI 系統

如果你已經安裝 Windows,它已經在一張GPT格式的硬碟上創建如下分區:

  • 一個WinRE分區,一般大小為499 MiB,包含啟動 Windows 所需的文件,等同於 Linux 下的/boot分區;
  • 一個具有 FAT32 文件系統的 EFI 系統分區;
  • 一個MSR 分區;
  • 一個格式化為 NTFS 的 Microsoft Basic Data 分區,對應C:;
  • 可能是系統恢復/備份/非主要數據分區(對應D:等);

在 Windows 下,使用磁碟管理工具查看各分區的標籤以及報告的類型。這樣能使人清楚哪些分區屬於必要的 Windows 分區,以及可能隨時改變用途的其它分區。Windows 磁碟管理同樣可以縮小 Windows (NTFS) 分區以便為 Linux 騰出空間。

警告: 上述分區中前 4 種為關鍵系統分區,不能刪除。

現在可以繼續按需進行分區

注意,不應再創建新的 EFI 系統分區,這麼做可能導致 Windows 無法正常啟動直接掛載現有分區即可。

注意: 只有 Linux 被安裝在另一塊硬碟並在磁碟上創建了新的 EFI 系統分區時才會出現此問題。

啟動引導程序須支持鏈式載入其它 EFI 應用程式以進行 Windows-Linux 雙啟動。

提示:rEFIndsystemd-boot都會自動檢測Windows Boot Manager(\EFI\Microsoft\Boot\bootmgfw.efi)並將其顯示於自己的啟動菜單中。如果使用 GRUB,見GRUB#Windows installed in UEFI/GPT mode(手動添加啟動項)或GRUB#Detecting other operating systems(自動生成配置文件)。

預裝較新版本的 Windows 的電腦通常啟用安全啟動。需要進行額外操作以禁用安全啟動或使你的安裝媒體支持安全啟動(詳見上文)。

先 Linux 後 Windows

即使設置 Windows-Linux 雙啟動時一般推薦先安裝 Windows,換成 Linux 在前也可以實現雙啟動。與 Windows 在前的方式相比,這種方式需要在啟動 Windows 安裝之前創建並擱置一個(比如 40GB 或者更高的)Windows 分區,或者預留一些空閒的未分區空間,或者從 Linux 安裝中創建/調整 Windows 分區。

UEFI 固件

Windows 將會使用已有的EFI 系統分區。與之前所述相比,只有單個 Windows 分區而沒有 WinRE 也沒有 MSR 分區的 Windows 是否能正常工作並不明確。

這裡假設安全啟動已禁用。

  1. 啟動 Windows 安裝。注意讓安裝器使用你希望其使用的分區,然後讓它如同沒有安裝 Linux 一樣工作。
  2. 按照#快速啟動和休眠的說明操作。
  3. 恢復 Linux 啟動(可參閱#安裝 Windows 後 Linux 無法啟動)。前面已經提到過,某些 Linux 引導啟動程序會自動檢測Windows Boot Manager。即使較新的 Windows 安裝都有一個能用於啟動到 Linux 的「高級啟動」選項,仍然建議使用 Arch 安裝媒體或 LiveCD 之類的方式啟動 Linux。
Windows 10 和 GRUB

這裡假設使用GRUB作為啟動引導程序(對於其它引導程序大致思路也相似)且 Windows 10 將會安裝到一個已經有 EFI 系統分區的 GPT 塊設備上。詳見這篇 Microsoft 文檔的「系統分區」章節。

gdisk在塊設備上創建如下分區:(更精確的分區大小見[3]

標題文本
最小尺寸 分區類型代碼 分區類型名 文件系統
16 MB 0C01 Microsoft reserved N/A
約 40 GB或更大 0700 Microsoft basic data NTFS
300 MB 2700 Windows RE NTFS

用來自ntfs-3gmkntfs工具在新創建的 Microsoft basic data 和 Windows RE 分區上創建新的 NTFS 文件系統。

將系統重啟到 Windows 10 安裝媒體。選擇「自定義」安裝選項並將 Windows 安裝到先前創建的 Microsoft basic data 分區上。這樣應該也會將 Microsoft EFI 文件安裝到 EFI 分區中。

安裝完畢後(不需要 OOBE 和登錄),重啟進入 Linux 並生成一個 GRUB 配置文件以便 Windows 的啟動管理器在下次啟動時啟動在 GRUB 菜單中。

故障排除

無法創建新分區或無法找到已有分區

#Windows 在 UEFI 和 BIOS 上的限制

安裝 Windows 後 Linux 無法啟動

Unified Extensible Firmware Interface#Windows changes boot order

恢復 Windows 啟動記錄

按照慣例(且為了更簡易的安裝過程),Windows 通常安裝在第一分區並將其分區表和其啟動引導程序的引用安裝到該分區的第一扇區。如果不慎把一個 GRUB 之類的啟動引導器安裝到 Windows 分區上,或者用其它什麼方式弄壞了 Windows 的啟動記錄,就需要使用工具對其進行修復。Microsoft 在他們的恢復光碟(有些時候,安裝光碟)上提供一個叫做FIXBOOT的啟動扇區修復工具和一個名為FIXMBR的 MBR 修復工具。這種方式可以分別更正第一分區的啟動扇區對啟動引導程序的引用以及 MBR 上對第一分區的引用。在此之後需要按原先計劃將 GRUB 重新安裝到 MBR 上(GRUB 可以配置為鏈式加載 Windows 啟動引導程序)。

如果你希望回退到 Windows,你可以用FIXBOOT命令連結 MBR 和第一分區啟動扇區以恢復 Windows 的自動啟動。

有一個叫做ms-sysAUR的工具可以用於安裝 MBR。但是,該工具目前只能寫新 MBR 或 FAT 文件系統的啟動扇區(又稱為啟動記錄;等效於FIXBOOT)。許多 LiveCD 默認都沒有該工具,所以其需要提前安裝,或者可以考慮包含該工具的急救 CD,如Parted Magic

首先,重新寫一遍分區信息(表):

# ms-sys --partition /dev/sda1

接下來,寫 Windows 2000/XP/Server 2003 MBR:

# ms-sys --mbr /dev/sda  #查閱 options 列表以獲取不同版本的信息

最後,寫啟動扇區:

# ms-sys -(1-6) #查閱 options 列表以查找正確的 FAT 記錄類型

ms-sys同樣可以寫 Windows 98/ME 及 Windows Vista/7 MBR。詳見ms-sys -h

Windows 安裝程序留下的 EFI 系統分區過於小

Windows 安裝程序會創建一個 100 MiB 的 EFI 系統分區(在Advanced Format盤上為 300 MiB)。一般來說,這種容量並不足以放下所需要的所有文件。可以嘗試使用各種工具來調整該分區大小,但是已經存在的其它分區往往導致這樣做很難。一種方法是在將 Windows 安裝到盤上之前就用 Arch 安裝媒體創建一個自定大小(且較大)的EFI 系統分區。Windows 安裝程序將會使用你自己創建的 EFI 分區,而非再為自己創建一個。

時間標準

  • 建議:將 Arch Linux 和 Windows 皆設置為UTC(見系統時間#Windows 系統使用 UTC)。某些 Windows 版本在設置為自動同步網絡時間時會將 RTC 回退到 localtime。該問題在 Windows 10 中似乎已解決。
  • 不建議:將Arch Linux的硬體時鐘模式設為localtime並禁用任何時鐘同步服務。這將會使Windows檢查硬體時間的正確性,並且你需要在一年中至少啟動Windows兩次(分別在春季與秋季)以正確應用夏令時。所以請不要忘記啟動 Windows 而在論壇問為什麼時鐘會快/慢一個小時)。

藍牙配對

對於將藍牙設備同時與 Linux 和 Windows 配對,兩個系統均使用相同的 MAC 地址,但是配對過程中會使用不同的 link keys,導致在藍牙設備與其中一個系統配對後就無法連接到另一個系統。如果想要使藍牙設備不用重新配對就在兩個系統下都可用,見Bluetooth#Dual boot pairing

參見