После переноса виртуальной машины с Windows XP 1) из Virtualbox в Proxmox при загрузке возникла ошибка:
Disk Error
Press any key to restart
Проблема была явно с загрузчиком 2), а поскольку быстро устранить её не удалось (bootrec /fixmbr
и /fixboot
не помогли и вот почему), то это стало отличным поводом вовсе заменить загрузчик курильщика Windows на GRUB. Способ действует не только для Windows XP, но и для современных ОС Windows. Как показала практика, GRUB гораздо более «живуч» при изменениях аппаратной конфигурации компьютера, переносе системы на другое оборудование или миграции виртуальных машин. 3)
В конфигурации GRUB есть недокументированная команда ntldr
4) для передачи процесса загрузки в Windows-загрузчик NTLDR (для Windows XP) или BootMGR (для более поздних версий Windows). Именно ей можно воспользоваться, чтобы заменить штатный загрузчик.
Действия по шагам для загрузчика NTLDR (Windows NT 5.2): 5)
mount /dev/sda1 /mnt
grub-install --boot-directory=/mnt /dev/sda
set default="Windows XP" set timeout=5 menuentry "Windows XP" --class windows --class os { insmod part_msdos insmod ntfs insmod ntldr set root='(hd0,msdos1)' search --no-floppy --set=root --label MULTIKEY search --no-floppy --set=root --fs-uuid 2C08-8FE5 ntldr ($root)/ntldr }
umount /mnt && sync
reboot
Всё то же самое для BootMGR 6) (Windows NT 6.x), только загрузка другого файла: 7)
set default="Windows 7" set timeout=5 menuentry "Windows 7" --class windows --class os { insmod part_msdos insmod ntfs insmod ntldr set root='(hd0,msdos1)' ntldr ($root)/bootmgr }
Загрузить любую версию Windows используя её собственный исправный загрузчик (расположенный в PBR) можно через chainloader
:
menuentry "Start Windows" --class windows --class os { set root='(hd0,1)' search --no-floppy --set=root --label CAVALWIN chainloader '+1' }
Такой способ бывает полезен при «мультизагрузке» 8) нескольких ОС с одного диска.
Если в системе два физических диска, на первом установлен GRUB, а на втором ОС Windows со своим родным загрузчиком, то бывает полезно передать загрузку полностью на второй диск. Такое бывает необходимо, например, для загрузки с зашифрованного с помощью Veracrypt диска (бывший Truecrypt), так как загрузчик Veracrypt не поддерживает «обычную» мультизагрузку.
Чтобы этот способ сработал, BIOS компьютера должен пытаться передать загрузку следующему диску при неудачной попытке на первом. Если BIOS позволяет явно задать порядок загрузки дисков, то нужно указать первым диск с GRUB, вторым с Windows.
Но в большинстве BIOS можно указать только порядок загрузки «устройств», например: первый Hard Disk, второй CD-ROM, третья сетевая карта. В таком случае нужно указать порядок дисков в разделе Hard Disks. Чтобы передать загрузку второму диску достаточно сделать «выход» из GRUB и BIOS сам перейдёт к загрузке со второго диска:
menuentry "Windows Veracrypt" { # Boot from next disk exit }