Khôi phục lỗi mất thông tin khởi động của UEFI Partition trên Windows 8+

Lỗi mất thông tin khởi động của Windows khiến bạn không thể thởi động vào hệ thống, thậm chí nó còn báo rằng chưa cài đặt hệ điều hành nào cả. Vấn đề này phần lớn xảy ra khi bạn cài thêm một hệ điều hành khác ghi đè thông tin khởi động hoặc xóa bỏ nó khiến cho không thể khởi động vào Windows nữa. Trong nhiều trường hợp, người dùng chỉ còn cách cài đặt mới lại Windows để tiếp tục sử dụng, tuy nhiên bạn hoàn toàn có thể khôi phục lại các thông tin này mà không cần phải cài lại.

Trong trường hợp của tôi, lỗi này xảy ra khi tôi dùng script để tự động cài đặt Arch Linux sau khi chuyển đổi đĩa cứng từ MBR sang GPT, script tự động nhận phân vùng EFI và định dạng lại phân vùng này khiến cho mất hoàn toàn thông tin để khởi động và đương nhiên GRUB không thể nhận ra Windows để đưa vào danh sách lựa chọn.
Để xử lí vấn đề này, bạn cần phải có bộ cài đặt Windows 8 (hoặc 8.1) bằng USB hoặc DVD để có thể khởi động vào chế độ Repair Your Computer.
Các bước tuần tự như sau:

  • Khởi động vào Repair Your Computer từ bộ cài đặt Windows, lưu ý với đĩa cừng GPT thì cần chọn UEFI Boot.
  • Chọn lần lượt Troubleshooting > Advanced Options > Command Prompt để mở Windows Command Promt, hoặc có thể bấm tổ hợp phím Shift + F10
  • Chạy phầm mềm diskpart

Windows Command Prompt
Windows Command Prompt

Chúng ta phải dùng diskpart trước khi tiến hành khôi phục thông tin khởi động do phân vùng EFI không được tự động gán nên chúng ta sử dụng diskpart chọn, gán ổ đĩa cho phân vùng EFI để thao tác được trên phân vùng này.

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E                       DVD-ROM         0 B  No Media
  Volume 1     C                NTFS   Partition    195 GB  Healthy    Boot
  Volume 2         WINRE        NTFS   Partition    400 MB  Healthy    Hidden
  Volume 3                      FAT32  Partition    260 MB  Healthy    System

Thông thường phân vùng EFI có định dạng FAT32 và gắn cờ (flag) System. Ta chọn và gán tên cho nó và thoát khỏi diskpart.

DISKPART> sel vol 3

Volume 3 is the selected volume.

DISKPART> assign letter=b:

DiskPart successfully assigned the drive letter or mount point.

Exit

Tùy theo từng phiên bản hoặc bộ cài mà thông tin khởi động được lưu tại các vị trí:

  • B:\Boot\
  • B:\EFI\Microsoft\Boot\
  • B:\ESD\Windows\EFI\Microsoft\Boot\

Tùy theo vị trí, bạn chuyển đến thư mục Boot và dùng các lệnh sau để khôi phục:

  1. bootrec /fixboot
  2. bootrec /fixmbr
  3. bootrec /rebuildmbr

Đối với vấn đề của tôi, bị định dạng lại mất hoàn toàn thông tin nên cần nhận dạng lại hệ điều hành:

bootrec /scanos
bootrect /rebuildbcd
bootcfg C:\Windows /l en-us

Cần lưu ý ổ đĩa chứa thư mục (đã cài đặt) Windows của bạn có thể khác theo danh sách phân vùng ở trên.
Sau đó khởi động lại và khởi động vào Windows. Chúc bạn may mắn 🙂
Bổ xung 03.05.2015

Xóa bỏ các bootloader bị thừa thông tin khởi động

Nếu cài đặt quá nhiều công cụ hỗ trợ khỏi động như Grub, Clover, rEFIt, ... không làm ảnh hưởng đến hệ thống nhưng khá rối mắt và bất tiện khi quản lý. Nếu phần nào không cần thiết có thể xóa bỏ nó sau khó xóa bỏ các gói và tập tin cấu hình tương ứng.
Trong trường hợp này tôi muốn xóa bỏ rEFIt

# efibootmgr -v
Timeout: 10 seconds
BootOrder: 0000,0007,0006,0008
Boot0000* rEFInd	HD(2,1b8,64000,f1b7598e-baa8-16ea-4ef6-3ff3b606ac1e)File(\EFI\refind\refind.efi)
Boot0006* Hard Drive	BIOS(2,0,00)SATA: ST32000542AS            .
Boot0007* CD/DVD Drive	BIOS(3,0,00)PATA: HP DVD Writer 1040r     .
Boot0008* INTERNAL EFI SHELL: ST32000542AS	ACPI(a0341d0,0)PCI(1f,2)ATAPI(1,0,0)HD(2,1b8,64000,f1b7598e-baa8-16ea-4ef6-3ff3b606ac1e)File(\EFI\BOOT\BOOTX64.EFI)

# efibootmgr -b 0000 -B

Rất đơn giản phải không? ?