Bài này hướng dẫn khôi phục thủ công phân vùng boot EFI Windows bị xóa nhầm trên máy UEFI. Xem cách dễ dàng tạo lại thủ công phân vùng EFI và MSR hệ thống trong Windows, cho phép boot OS sau khi format hoặc xóa nhầm phân vùng EFI. Hướng dẫn áp dụng cho tất cả phiên bản Windows, từ Win 7 đến Windows 10.
Giả sử phân vùng boot EFI trên máy UEFI (non-BIOS) bị xóa hoặc format nhầm (ví dụ khi thử xóa phân vùng recovery OEM). Kết quả Windows 10/8.1/7 không boot đúng, lặp yêu cầu chọn thiết bị boot (Reboot and select proper boot device or insert boot media in selected boot device and press a key). Xem có thể khởi động Windows bình thường sau xóa phân vùng EFI (chứa Boot Manager và cấu hình BCD) mà không cài lại OS không.
Mục lục
- Cấu trúc phân vùng ổ cứng GPT trong Windows
- Thiếu phân vùng EFI trong Windows
- Cách tạo thủ công phân vùng EFI và MSR trên ổ GPT
- Sửa chữa bootloader EFI và BCD Windows
Cấu trúc phân vùng ổ cứng GPT trong Windows
Xem bảng phân vùng mặc định ổ cứng bootable với GUID partition table (GPT) trên máy UEFI nên như sau. Cần ít nhất các phân vùng:
- EFI System Partition (ESP – Extensible Firmware Interface) — 100 MB (loại phân vùng — EFI);
- Microsoft Reserved partition — 128 MB (loại phân vùng — MSR);
- Primary Windows partition (phân vùng chứa Windows).
Đây là cấu hình tối thiểu. Các phân vùng này do Windows Installer tạo khi cài OS sạch trên ổ chưa format. Nhà sản xuất máy tính hoặc user có thể tạo phân vùng riêng chứa, ví dụ Windows Recovery Environment (Windows RE) trong file winre.wim, phân vùng backup image hệ thống do OEM cung cấp (cho phép rollback về trạng thái gốc máy), phân vùng user, v.v.
Phân vùng EFI với hệ thống file FAT32 là phân vùng bắt buộc trên ổ GPT máy UEFI và có GUID c12a7328-f81f-11d2-ba4b-00a0c93ec93b. Kích thước mặc định phân vùng EFI là 100MB (trên ổ advanced format sector 4KB, kích thước EFI là 260MB).
Phân vùng MSR (Microsoft System Reserved) trên ổ GPT dùng đơn giản hóa quản lý phân vùng và dùng cho thao tác dịch vụ (ví dụ chuyển đổi ổ từ basic sang dynamic). Đây là phân vùng dự trữ với nhãn GUID e3c9e316-0b5c-4db8-817d-f92df00215ae. Phân vùng MSR không nhận ký tự ổ đĩa. Phân vùng này không lưu dữ liệu user. Trong Windows 10, kích thước phân vùng MSR chỉ 16 MB (Windows 8.1 kích thước MSR 128 MB), hệ thống file NTFS. Phân vùng MSR phải nằm giữa phân vùng EFI (ESP) và phân vùng hệ điều hành Windows chính.
Phân vùng chính chứa Windows cài đặt, chương trình và dữ liệu user. Có thể có phân vùng dữ liệu bổ sung.
Thiếu phân vùng EFI trong Windows
Phân vùng EFI (tương tự System Reserved partition trên ổ MBR), lưu boot configuration store (BCD) và nhiều file cần boot Windows. Khi máy boot, môi trường UEFI load bootloader (EFI\Microsoft\Boot\bootmgfw.efi) từ phân vùng EFI (ESP) và chuyển điều khiển cho nó. File thực thi bootmgfw.efi khởi chạy Windows Boot Manager, load dữ liệu cấu hình từ BCD. Sau khi BCD load, Windows boot qua winload.efi.
Nếu phân vùng EFI bị xóa hoặc hỏng, không thể boot Windows từ ổ đó. Lỗi UEFI "could not locate \efi\boot\bootx64.efi – not found" xuất hiện, hoặc UEFI Shell trống yêu cầu chỉ định thiết bị boot.
Cũng không boot được Windows nếu phân vùng EFI format với NTFS. Ngay khi cài Windows sạch, sẽ nhận lỗi:
Windows detected that the EFI system partition was formatted as NTFS. Format the EFI system partition as FAT32, and restart the installation.
Cách tạo thủ công phân vùng EFI và MSR trên ổ GPT
Vì hệ thống không boot đúng, cần media cài Windows 10 (Win 8 hoặc 7) image hoặc media boot/rescue khác. Boot từ media cài và ở màn hình cài đầu tiên nhấn Shift+F10. Cửa sổ command prompt mở.
Chạy công cụ quản lý ổ đĩa và phân vùng:
Diskpart
Liệt kê ổ cứng kết nối máy (ví dụ chỉ có 1 ổ, disk 0. Dấu sao (*) cột GPT nghĩa là dùng GUID partition table).
Nếu không có * cột GPT, bảng phân vùng là MBR. Cần chắc chắn trước đó boot máy ở chế độ UEFI native (ngược lại làm theo hướng dẫn này vô nghĩa). Nếu chắc chắn loại bảng phân vùng đã thay đổi, có thể chuyển ổ từ MBR sang GPT.
list disk
Chọn ổ này:
Select disk 0
Hiển thị danh sách phân vùng trên ổ:
List partition
Trong ví dụ, chỉ còn 2 phân vùng trên ổ:
- MSR partition — 128 MB;
- Windows system partition — 9 GB.
Như thấy, phân vùng EFI thiếu (đã bị xóa).
Nhiệm vụ: xóa phân vùng MSR còn lại để có ít nhất 228 MB không gian chưa phân bổ (cho MSR và EFI). Có thể xóa phân vùng này bằng Gparted đồ họa hoặc trực tiếp command prompt (chính chúng ta làm).
Chọn phân vùng cần xóa:
Select partition 1
Và xóa nó:
Delete partition override
Xác nhận chỉ còn phân vùng Windows 9GB (trong trường hợp này):
List partition
Bây giờ tạo lại thủ công phân vùng EFI và MSR. Chạy các lệnh sau trong ngữ cảnh diskpart lần lượt.
Chọn ổ:
select disk 0
Tạo phân vùng EFI 100MB, format FAT32 và gán ký tự ổ đĩa:
create partition efi size=100
Đảm bảo phân vùng 100 MB (dấu sao trước Partition 1) được chọn:
list partition
select partition 1
format quick fs=fat32 label="System"
assign letter=G
Tạo phân vùng MSR kích thước 128 MB (trong Windows 10, tạo 16 MB MSR cũng đủ).
create partition msr size=128
list partition
list vol
Trong trường hợp này, ký tự ổ C: đã gán cho phân vùng Windows chính. Nếu chưa, gán ký tự ổ đĩa:
select vol 1
assign letter=C
exit
Sửa chữa bootloader EFI và Windows BCD
Sau khi tạo cấu trúc phân vùng tối thiểu cho ổ GPT trên máy UEFI, tiến hành copy file boot EFI vào phân vùng mới và tạo file cấu hình bootloader (BCD).
Copy file môi trường boot EFI từ thư mục ổ cài Windows:
mkdir G:\EFI\Microsoft\Boot
xcopy /s C:\Windows\Boot\EFI\*.* G:\EFI\Microsoft\Boot
Xây dựng lại cấu hình bootloader BCD Windows:
g:
cd EFI\Microsoft\Boot
bcdedit /createstore BCD
bcdedit /store BCD /create {bootmgr} /d "Windows Boot Manager"
bcdedit /store BCD /create /d "My Windows 10" /application osloader
Có thể thay caption "My Windows 10" bằng tên khác.
Lệnh trả về GUID entry vừa tạo. Trong lệnh tiếp theo thay GUID này thay cho {your_guid}.
bcdedit /store BCD /set {bootmgr} default {your_guid}
bcdedit /store BCD /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /store BCD /set {bootmgr} displayorder {default}
Các lệnh bcdedit sau chạy trong context {default}:
bcdedit /store BCD /set {default} device partition=c:
bcdedit /store BCD /set {default} osdevice partition=c:
bcdedit /store BCD /set {default} path \Windows\System32\winload.efi
bcdedit /store BCD /set {default} systemroot \Windows
exit
Khởi động lại máy… Trong trường hợp này không boot thành công lần đầu. Thử:
- Tắt PC;
- Rút (vật lý) ổ cứng;
- Bật PC, đợi cửa sổ lỗi boot hiện ra (An Operating System not found) và tắt lại;
- Cắm lại ổ cứng.
Sau đó (test trên VMWare VM với firmware UEFI) phải thêm mục mới vào menu boot bằng cách chọn file EFI\Microsoft\Boot\bootmgrfw.efi trên phân vùng EFI.
Trong một số menu UEFI, tương tự cần thay đổi độ ưu tiên boot phân vùng.
Sau tất cả hành động, Windows sẽ boot đúng.