Иногда бывает ситуация, когда есть несколько накопителей с установленными операционными системами. Одна из них, допустим, Linux, которая установлена на GPT раздел и, соответственно, загружается в UEFI режиме. И есть Windows, но установленная на диск с MBR. Это начальные условия. Теперь можно поговорить про проблему загрузки Windows из grub, которая заключается в том, что при установке Linux, не добавляется опция загрузки Windows в меню grub.
По разным источникам в интернете было выяснено, что загрузчик может загружать только те системы, которые находятся в том же режиме, что и сам загрузчик. Но при этом legacy загрузчик не сможет загрузить UEFI систему, потому что о ней он естественно не знает.
Для того, чтобы UEFI загрузчик смог загрузить legacy систему, в legacy системе нужно сформировать загрузочную конфигурацию. В Windows это делается так
bcdboot C:\Windows /s C: /f uefi
, где /s — параметр, определяющий букву тома, назначенную целевому системному разделу, в который копируются файлы среды загрузки. По умолчанию используется системный раздел, который определяется микропрограммой,
/f uefi — в сочетании с командой /s, это указание типа встроенного ПО целевого системного раздела.
Команда создаст EFI папку на диске C: и поместит туда файлы, необходимые для успешного чтения UEFI загрузчиком
Теперь осталось добавить пункт меню в grub. Раз через os-prober это не получается, то пишем в файл /etc/grub.d/40_custom следующую конфигурацию:
menuentry "Windows 10" --class windows --class os {
insmod ntfs
insmod chain
set root='hd0,2'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
где «set root=’hd0,2′» — выбор раздела на диске с Windows
chainloader — грузит загрузчик из выбранного раздела, а уже он будет грузить legacy систему.
После этого в списке выбора систем появится пункт про Windows 10 и при выборе этого пункта загрузиться система.