Khởi động Windows từ Grub2 bằng dòng lệnh

Grub2 là một bộ nạp khởi động mạnh mẽ và hỗ trợ khởi động hầu hết các hệ điều hành. Bài viết này sẽ hướng dẫn bạn khởi động Windows từ Grub2 bằng dòng lệnh.
Trong trường hợp Windows của bạn bị lỗi tệp tin khởi, động, bạn có thể sử dụng cách này.
Lưu ý: Nếu bạn lỡ làm lung tung điều gì đó thì nhập lệnh reboot để khởi động lại máy
            Lệnh help để xem hỗ trợ

Dòng lệnh Grub2

Tất nhiên là chúng ta sẽ sử dụng trình đơn thay vì khởi động Windows từ Grub2 bằng lệnh. Nhưng có một vài lý do khiến bạn không thể truy cập vào trình đơn của Grub2. Mà lý do thường gặp là bạn đã vô tình xóa phân vùng đang chứa tệp tin cấu hình của Grub2. Sử dụng dòng lệnh của Grub2 là cách duy nhất trước khi bạn phải sử dụng các thiết bị cứu hộ khác.
Khi bạn xóa phân vùng chứa tệp tin cấu hình của Grub2 (grub.cfg) và các mô-đun của nó, Grub2 sẽ dừng lại ở chế độ rescue. Nếu các mô-đun của Grub2 đã được tải sẵn thì bạn vẫn còn cơ hội để khởi động vào Windows. Cụ thể là chúng ta cần tải mô-đun ntldr ở chế độ Legacy BIOS và mô-đun chainloader ở chế độ UEFI. Theo kinh nghiệm của tôi, trên Ubuntu, Linux Mint, Debian và các hệ điều hành Linux khác thì các mô-đun này chỉ được tải sẵn khi bạn khởi động ở chế độ UEFI. Có nghĩa là các mô-đun này đã được nhúng vào tệp grubx64.efi.
Đây là màn hình Grub2 dừng lại ở chế độ rescue.
grub rescue
error: no such device:
error: unknown filesystem.
Entering rescue mode...
grub rescue>
Đầu tiên chúng ta sẽ sử dụng lệnh search để tìm phân vùng chứa tệp tin BCD. Phân vùng này cũng chứa tệp bootmgr hoặc bootmgfw.efi. Sau đó chúng ta sẽ load tệp tin này để khởi động vào Windows.

UEFI

Đối với UEFI, tệp tin BCD sẽ nằm ở đường dẫn /EFI/Microsoft/Boot/BCD trên phân vùng EFI. Phân vùng này cũng chứa tệp tin /EFI/Microsoft/Boot/bootmgfw.efi. Sử dụng lệnh chainloader để chainload tệp tin này.
search -s root -f /EFI/Microsoft/Boot/BCD
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
boot

Legacy

Đối với Windows Vista, Windows 7 đến Windows 10, tệp tin BCD sẽ nằm ở đường dẫn /Boot/BCD. Phân vùng này cũng chứa tệp tin /bootmgr. Sử dụng lệnh ntldr để load tệp tin này.
search -s root -f /Boot/BCD
ntldr /bootmgr
boot
Đối với Windows XP/2003, bạn sẽ tìm phân vùng chứa tệp tin /ntdetect.com và load tệp /ntldr. Bạn cần sử dụng lệnh drivemap để MAP đĩa cứng mà bạn đã cài Windows XP/2003 thành đĩa cứng đầu tiên nếu nó đang không phải.
search -s root -f /ntdetect.com
drivemap -s hd0 $root
ntldr /ntldr
boot
Bạn sẽ thấy các lỗi sau nếu các mô-đun tương ứng chưa được tải sẵn như đã nói ở trên.
Unknown command 'search'.
error: unknown filesystem.
Unknown command 'chainloader'.
Unknown command 'ntldr'.
Unknown command 'drivemap'.
Nếu các tệp tin không được tìm thấy trên tất cả các phân vùng, bạn sẽ thấy một trong các lỗi sau:
error: no such device: /EFI/Microsoft/Boot/BCD.
error: no such device: /Boot/BCD.
error: no such device: /ntdetect.com.

Thêm trình đơn Grub2

Nếu bạn cài đặt Ubuntu hoặc các hệ điều hành Linux khác song song với Windows thì Windows sẽ được tự động thêm vào trình đơn Grub2. Nếu bạn cài đặt Grub2 thủ công, bạn có thể thêm Windows vào trình đơn Grub2 thủ công.
menuentry "Windows" {
 insmod regexp
 set saved_root=$root
 for dev in (*,*); do
 regexp -s device '\((.*)\)' $dev
 if searchindevice "$device" ; then
  probe -s fstype -f $device
  if [ -z "$fstype" ] -o [ "$fstype" == "procfs" ]; then continue; fi
  probe -s tscheme -p $device
  if [ -n "$pc" ] -a [ "$tscheme" == "msdos" ]; then
   if test \
       '(' -f ($device)/bootmgr -a -f ($device)/boot/bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/boot/Bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/boot/BCD ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/Boot/bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/Boot/Bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/Boot/BCD ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/BOOT/bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/BOOT/Bcd ')' \
       -o \
       '(' -f ($device)/bootmgr -a -f ($device)/BOOT/BCD ')' \
    ; then
    set root="$device"
    ntldr /bootmgr
    boot
   elif test \
       '(' -f ($device)/ntldr -a -e ($device)/ntdetect.com -a -f ($device)/boot.ini ')' \
       -o \
       '(' -f ($device)/ntldr -a -e ($device)/ntdetect.com -a -f ($device)/BOOT.INI ')' \
       -o \
       '(' -f ($device)/ntldr -a -e ($device)/NTDETECT.COM -a -f ($device)/boot.ini ')' \
       -o \
       '(' -f ($device)/ntldr -a -e ($device)/NTDETECT.COM -a -f ($device)/BOOT.INI ')' \
       -o \
       '(' -f ($device)/NTLDR -a -e ($device)/ntdetect.com -a -f ($device)/boot.ini ')' \
       -o \
       '(' -f ($device)/NTLDR -a -e ($device)/ntdetect.com -a -f ($device)/BOOT.INI ')' \
       -o \
       '(' -f ($device)/NTLDR -a -e ($device)/NTDETECT.COM -a -f ($device)/boot.ini ')' \
       -o \
       '(' -f ($device)/NTLDR -a -e ($device)/NTDETECT.COM -a -f ($device)/BOOT.INI ')' \
    ; then
    set root="$device"
    regexp -s devnum 'hd([0-9]+)' $root
    if test "$devnum" != "0"; then drivemap -s hd0 $root; fi
    ntldr /ntldr
    boot
   fi
  elif [ -n "$efi" ] -a [ "$fstype" == "fat" ] -a [ "$tscheme" == "gpt" ] -a [ -f ($device)/EFI/Microsoft/Boot/bootmgfw.efi ] -a [ -f ($device)/EFI/Microsoft/Boot/BCD ]; then
   root="$device"
   chainloader /EFI/Microsoft/Boot/bootmgfw.efi
   boot
  fi
  unset tscheme
  unset fstype
 fi
    done
 set root=$saved_root
 if [ "${grub_platform}" == "efi" ]; then set mode="UEFI mode"; else set mode="Legacy BIOS mode"; fi
 echo "Did not find the Windows operating system can be booted in ${mode}."
 echo
 echo -n "Press ESC to return to the menu "
 sleep -i -v 60
}
Trình đơn trên sẽ tự động quét và khởi động vào hệ điều hành Windows đang cài trên máy tính. Hỗ trợ Windows Vista, Windows 7 đến Windows 10 cho cả hai chế độ UEFI và Legacy BIOS. Hỗ trợ Windows XP/2003/2000 ở chế độ Legacy. Tôi nghĩ Windows 98/ME không cần phải được thêm vào.

Trong trường hợp máy tính bạn vẫn không khởi  động được, lúc này bạn cần đến sự hỗ trợ thứ ba của USB BOOT