Windows 10 在使用 UEFI 啟動的狀況下,安裝程式會在空白的磁碟上依序建立下列磁碟分割:

1) Recovery partition (450-650 MiB, depends on Win10 version)
2) ESP(EFI System Partition, 100 MiB)
3) MSR(Microsoft System Reserved, 16 MiB)
4) Primary Windows C: partition

這些磁碟分割的大小據說是根據磁碟本身 physical sector size 以及該版本 Windows 所需要大小決定的。但這些容量並不一定夠用:以 ESP 為例,Windows 需要保留 100 MiB,若安裝其他作業系統(如 linux)就會不夠。而 Recovery partition size 也從 Win10 1709 時的 450 MiB 變成了 1903 的 565 MiB,所以如果直接在 1709 機器上逐步升級到 1909 的話,磁碟上就會出現多個 Recovery partition(通常在尾部),因為在磁碟開頭的 Recovery 大小無法更改。

我是不知道為什麼 Microsoft 在 diskpart 的說明文件裡面 (https://docs.microsoft.com/zh-tw/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions) 表明 Recovery 分割應該放在主分割後面,這樣萬一空間不夠時 Windows 才可以自動縮小主分割、給 Recovery 更多空間,但 Win10 安裝程式卻不這麼幹,總是把 Recovery 放在磁碟最前面,但它這麼幹實在是十分惱人,所以最好能夠在 Win10 安裝時手動建立磁碟分割表,繞過這個問題,不然就得事後花很多功夫調整磁碟區大小了。

在 Win10 安裝時手動改變磁碟分割大小及順序的方式為,在選擇 Windows 安裝磁碟分割時,按 shift-F10 叫出 command prompt,然後依序使用 diskpart 指令:

1) list disk
2) select disk 0 (假設只有一個磁碟--這也是 Win7 之後安裝 Windows 的建議組態,所有其他硬碟都在系統安裝完之後才連接)
3) create partition efi size=1024 (MiB,根據這篇 (https://www.ctrl.blog/entry/esp-size-guide.html) 的講法,每個安裝的作業系統至少需要 100 MiB 的空間,所以如果不會安裝別的作業系統的話,可以流用 Windows 預設的 100,但如果需要安裝別的作業系統,則建議至少設定為 550,這邊是為了數字好看(??)一次就給 1 GiB (1024 MiB))
4) format quick fs=fat32 label="System"
5) create partition msr size=16
6) create partition primary
7) shrink minimum=1024 (MiB,有鑑於 WinRE 所存的救援 wim 會隨著版本更新越來越大,所以先一次給 1 GiB (1024 MiB))
8) format quick fs=ntfs label="Windows"
9) create partition primary
10) format quick fs=ntfs label="Recovery"
11) set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
12) gpt attributes=0x8000000000000001

若是已經在 Windows 安裝程式自動產生之磁碟分割表上安裝好 Windows ,則要用別的方式修改這些磁碟分割大小及位置。

這個過程中主要是使用 gparted (https://gparted.org/) 這個 linux based 工具軟體,同時會用到 EasyUEFI (https://www.easyuefi.com/index-us.html) 對修改磁碟分割表之後產生的後遺症進行修補,以及 Windows RE 修復模式對 EasyUEFI 造成的問題進行再修補...原本是打算使用 DiskGenius (https://www.diskgenius.com/) 這個軟體修改磁碟分割的,但它無法更動 MSR partition 的大小跟位置,迅速搜尋一下之後發現 gparted 可以解決,所以就改用 gparted。

需要注意的一點是 gparted live 是根據 debian/sid 的 live linux distro,對最新的 nVidia 顯示卡支援不是很好,所以如果啟動時發現顯示亂掉的話,通常是因為顯卡無法正常驅動導致,通常換一張較舊的顯卡或使用內顯就會正常。

1) 使用 gparted 或 DiskGenius 縮小 Windows primay partition 大小(例如:縮小 495 MiB),並將多出來的 unallocated space 置於 Windows partition 之前
2) 使用 gparted 將 MSR 及 ESP 位置往後移動 495 MiB
3) 使用 gparted 將 Recovery partition 大小擴大(例如:495 MiB)

基本上這個時候修改就完成了。重開機後 Windows 10 會顯示偵測到磁碟問題,但會自動修復。但修復後會遇到一個問題:主機板 UEFI 韌體(舊稱 BIOS)中的開機選項會變成兩個。

這時候就需要用 EasyUEFI 或 DiskGenius (v5.2.0.884 版本以後)將多出來的 UEFI BIOS entry 刪除。UEFI entry 會顯示該 ESP 啟始位置,選擇啟始位置較前的刪除。但這時如果重開機會發現 Windows 無法啟動,需要手動重新設定 Windows BCD entry 記錄設定。此時需要在 WinRE 環境內(如未自動進入 WinRE 環境,則可使用 Win10 安裝媒體進入 WinRE)開啟 command line:

1) diskpart
2) select disk 1
3) select partition 2 (或先 list partition 列出分割一覽,然後選擇類型為 System 的那個)
4) assign letter=S (指定 ESP 為 S: 槽,指定的原因為後面重建 bcd entry 時會需要使用槽位設定)
5) exit
6) bcdboot C:\Windows /s S: /f UEFI (重建 bcd entry,以前是用 bcdrec /FixBoot 重建 bcd entry,但從 1709 版之後需使用這個指令,指定 bcd entry 來源為 C:\Windows,目標為 S:,/f UEFI 指定此為 UEFI firmware type entry)

這樣應該就可以恢復正常開機,但 WinRE 可能會失效。WinRE 重建步驟另篇敘述。

 

參考資料:

https://www.ctrl.blog/entry/esp-size-guide.html

https://superuser.com/questions/1108243/setting-winre-windows-recovery-environment-flag-on-partitions

https://docs.microsoft.com/zh-tw/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions

https://www.dell.com/support/article/zh-tw/sln300987/how-to-repair-the-efi-bootloader-on-a-gpt-hdd-for-windows-7-8-8-1-and-10-on-your-dell-pc?lang=en

https://docs.microsoft.com/zh-tw/windows-hardware/manufacture/desktop/bcdboot-command-line-options-techref-di

https://www.mbgarage.tw/2019/06/windows-10-bootrec-fixboot-access-is.html

arrow
arrow
    全站熱搜

    origin2 發表在 痞客邦 留言(0) 人氣()