Сразу нужно уточнить, что речь пойдёт про установку Win рядом с linux дистрибутивом. То есть на компьютере должен стоять grub-efi.
Установка возможна только 64 битной Windows системы.
Так как у нас EFI плата, значит есть хотя бы один ФАТ32 раздел на диске.
Так же нам нужно создать раздел, куда мы распакуем образ Win.
/dev/sda1 — EFI раздел
/dev/sda3 — Раздел куда мы распакуем образ, Фат32 минимум 5гб(ну или сколько весит ваш образ)
Копируем образ на диск
Далее подготовительное полотенце:
sudo mkdir /mnt/cdrom
sudo mkdir /mnt/isoExtr
sudo mount -o loop ~/ISO/win7_sp1_64.iso /mnt/cdrom/
sudo mount /dev/sda3 /mnt/isoExtr/
cd /mnt/cdrom/
#Копируем образ на раздел
sudo cp -Rv ./* ../isoExtr/
cd /tmp
sudo umount /mnt/cdrom
Распакуем EFI загрузчик Win
Для этого нам понадобится 7z архиватор, загрузчик хранится в файле sources/install.wim (Windows/Boot/EFI/bootmgfw.efi)
sudo apt-get install p7zip-full
cd /tmp
7z x /mnt/isoExtr/sources/install.wim Windows/Boot/EFI/bootmgfw.efi
Скопируем загрузчик в efi нашего распакованного образа
sudo cp /tmp/Windows/Boot/EFI/bootmgfw.efi /mnt/isoExtr/efi/microsoft/boot/
Узнаем UUID дисков
ls -l /dev/disk/by-uuid/
В моём случае это:
lrwxrwxrwx 1 root root 10 Nov 28 22:29 A18B-57CD -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov 28 22:29 CAA9-A38B -> ../../sda3
Создадим меню в Grub
Добавить в конец /etc/grub.d/40_custom
sudo nano /etc/grub.d/40_custom
menuentry «Microsoft Windows Start» --class windows --class os {
insmod usbms
insmod part_gpt
insmod part_msdos
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --no-floppy --set=root A18B-57CD # < — CHANGE THIS TO YOUR UUID
chainloader (${root})/efi/microsoft/BOOT/bootmgfw.efi
}menuentry «Microsoft Windows x86_64 UEFI-GPT Setup» --class windows --class os {
insmod usbms
insmod part_gpt
insmod part_msdos
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid --no-floppy --set=root CAA9-A38B # < — CHANGE THIS TO YOUR UUID
chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
}
sudo chmod +x /etc/grub.d/40_custom
sudo update-grub
cd ~
sudo umount /mnt/isoExtr
Установка Windows
Перезагружаемся
sudo reboot
Выбираем в грабе «Microsoft Windows x86_64 UEFI-GPT Setup».
Ставим винду на нужный раздел, в процессе установки она попросит перегрузиться.
Видимо, в этот момент она прописывает свой загрузчик(/efi/microsoft/BOOT/bootmgfw.efi) в EFI раздел, при этом не нарушает работу grub-efi
В грабе выбираем «Microsoft Windows Start», система доустановится.
Установка завершена.
Далее, когда вам понадобится винда, выбираете в грабе пункт «Microsoft Windows Start».
Один из недостатков этого метода в том, что нужно разворачивать образ на диск, хотя было бы проще создать новый образ, в котором был бы нужный нам загрузчик, но все мои попытки сделать это не удались.
Достоинством является то, что загрузчик не нужно чинить после установки винды.
П.С.: Если кто-то знает как запустить в grub efi загрузчик из iso, я буду очень благодарен за предоставленную информацию, так как я не смог запустить EFI загрузчик из любых образов linux.
П.С.2: Мне удалось поставить Win7(64bit) дома на живом компе, правда, у меня было два физических диска. В VirtualBox я не смог повторить, так как падал EFI загрузчик винды, выдавал мифические «BlXmiInitialize failed 0xc000009a». Буду рад если кто-то повторит на живой машине, так как еще раз проходить ад-установки винды я не хочу.
Автор: DisDis