GRUB не обнаруживает Windows

Вопрос или проблема

Я наконец установил Ubuntu на свой второй диск. Когда я запускаю свой компьютер, GRUB предлагает мне загрузить только Ubuntu, а не Windows 7. Что нужно сделать, чтобы я мог выбирать между Ubuntu и Windows в GRUB?

Когда я нажимаю F12 для меню загрузки при старте и выбираю Windows Boot Manager, он загружает Windows 7.


Я выполнил команду sudo fdisk -l, и вот лог (http://pastebin.com/Cgv1igHc):

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xc3ffc3ff

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1  1953525167   976762583+  ee  GPT
Partition 1 does not start on physical sector boundary.

  1. Загрузите Ubuntu и смонтируйте ваш Windows раздел (просто откройте диск в Nautilus)

  2. Выполните следующее в командной строке (Ctrl+Alt+t):

    sudo os-prober
    
  3. Если ваша установка Windows была найдена, вы можете выполнить:

    sudo update-grub
    

Обратите внимание, что шаг 2 предназначен только для вашего удобства. Вы могли бы просто смонтировать раздел Windows 7 и затем выполнить update-grub.

Связанный вопрос

Если метод os-prober выше не сработал, попробуйте добавить собственный элемент меню grub. Документация здесь.

Первые два шага предназначены для нахождения вашего <UUID>.

  1. Выполните lsblk и найдите имя строки с /boot/efi

Пример вывода (здесь ответ – sda2):

lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0   477G  0 disk 
├─sda1        8:1    0   450M  0 part 
├─sda2        8:2    0   100M  0 part /boot/efi
├─sda3        8:3    0    16M  0 part 
├─sda4        8:4    0    47G  0 part /windows
├─sda5        8:5    0 425,6G  0 part /
└─sda6        8:6    0   3,7G  0 part [SWAP]
mmcblk0     179:0    0  14,9G  0 disk 
└─mmcblk0p1 179:1    0  14,9G  0 part
  1. Выполните sudo blkid /dev/sdaX, где sdaX – это ответ из предыдущего шага (sda2 в моем случае).

Пример вывода (здесь ответ – 58E4-427D):

/dev/sda2: UUID="58E4-427D" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="b81727be-ba90-5f8c-ab98-d3ec67778b7d"
  1. Добавьте следующее в конец файла /etc/grub.d/40_custom:
menuentry "Windows 7" {  
     insmod ntfs  
     set root="(hd0,1)"  
     search --no-floppy --fs-uuid --set <UUID>
     chainloader +1  
}
  1. Выполните sudo update-grub и перезагрузитесь.

У меня возникла проблема с Windows 10, и я затем попробовал двойную загрузку. Как только Ubuntu была установлена, Win 10 не показывалась в моем загрузчике GRUB. Я попробовал следующее —

Прежде всего, я отключил Secure Boot в Win10. Затем выполнил следующие
команды в Ubuntu:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

Все сработало довольно хорошо. После этого смог найти и Windows, и Ubuntu в GRUB.

Я решил аналогичную проблему, следуя шагам из Boot-Repair

Установите boot-repair

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

Нажмите “Рекомендуемое исправление”
И введите в терминал некоторые команды, как это было предложено.

Я думаю, что мой Grub не распознавал Windows из-за неправильного завершения работы, и это решило проблему.

Чуть другой метод, так как я скопировал с рабочего примера на другом компьютере, размещаю для своей записи.

Добавьте следующее в /etc/grub.d/40_custom:

menuentry "Windows 10" {
        insmod part_gpt
        insmod fat
        search --no-floppy --fs-uuid --set <boot_efi_uuid>
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

где <boot_efi_uuid> – это UUID вашего раздела /boot/efi. Для этого:

$ lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT                                                  
sda                 8:0    0 119.2G  0 disk
└─md126             9:126  0 357.7G  0 raid0
  ├─md126p1       259:0    0   499M  0 md
  ├─md126p2       259:1    0   100M  0 md    /boot/efi                                                   
$ sudo blkid | grep md126p2 # Замените на ваше устройство
/dev/md126p2: UUID=<boot_efi_uuid>

Затем, конечно, после того как вы сохранили файл, выполните:

sudo update-grub

Перезагрузите, теперь вы должны успешно загрузить Windows.

Если у вас ранее была установлена RAID, это может вызывать проблемы. В моем случае я собрал свой настольный компьютер в 2010 году и установил два диска по 1,5 Тб с RAID в стиле “лента”. Пользователь gracemercy54 упоминает здесь, что это унаследованные метаданные от прежней конфигурации RAID.

Когда я изначально пытался выполнить шаги от Hermes, я получил ошибку с указанием “неверное количество устройств в RAID-наборе.” Поэтому, если это случится с вами, откройте терминал и выполните:

   sudo dmraid -rE
   sudo os-prober
   sudo update-grub

Это исправило проблему для меня.

У меня возникли проблемы, как здесь выше, и решением было просто добавить ручной элемент, как ниже:

menuentry "WINDOWS10 (на /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    set root="(/dev/sda,msdos1)"
    search --no-floppy --fs-uuid --set=root 688EB92384B85968
    drivemap -s (hd0) ${root}
    chainloader +1
}

где UUID выше (688E…) был получен с загрузочного диска Windows через blkid /dev/sdb1.

ВНИМАНИЕ: дополнительная строка

set root="(/dev/sda,msdos1)"

относится к sda, который виден под Ubuntu как /dev/sdb, даже на самом деле это первый диск в шине SATA, в то время как /dev/sda фактически является вторым диском, смонтированным как корень /.

Может быть, поэтому скрипты grub не могли работать должным образом. У меня не было времени менять физический порядок дисков, но вполне возможно, что это также помогло бы решить проблему.

У меня была та же проблема с Windows 10. Я установил Linux Mint 18.1 Cinnamon 64-бита на свой ноутбук для двойной загрузки с WIN10. После установки GRUB предлагал только загрузить Linux, но не Windows.

Я нашел видео решение для отсутствующей Windows 10 в меню grub и форумную тему Grub не распознает Win10 после обновления/восстановления, но, к сожалению, ни одно не сработало для меня, поэтому я использовал комбинацию этих двух, чтобы решить свою проблему.

Откройте терминал и выполните эти команды, а также откройте файл под названием 40_custom:

sudo gedit /etc/grub.d/40_custom

Добавьте эти строки в конец файла, а затем сохраните и закройте:

menuentry "Windows 10" {
   set root="{hd0,1}"
   chainloader + 1
}

После того как вы сохранили файл, обновите свой GRUB этой командой:

sudo update-grub

Затем перезагрузите машину, чтобы посмотреть, работает ли это.

Надеюсь, это поможет и другим!

Правка: Как указал @Guss, это должно настраиваться в /etc/default/grub, а не в встроенном скрипте.

Следуйте этим шагам, если os-prober показывает Windows, но GRUB не показывает.

  • Отредактируйте /etc/default/grub
    sudo nano /etc/default/grub
    
  • Найдите эту строку
    #GRUB_DISABLE_OS_PROBER=false
    
  • Уберите комментарий (удалите #)
    GRUB_DISABLE_OS_PROBER=false
    
  • Сохраните и выйдите (CTRL+X, Y, Enter)
  • Обновите GRUB
    sudo update-grub
    

У меня была такая же проблема, и я потратил 2 дня на то, чтобы разобраться в этом. Но сегодня утром у меня появилась неожиданная идея, и это сработало.

Вы должны проверить настройки своего BIOS/UEFI. В моем случае я должен был позволить UEFI загрузиться первым. В противном случае я не мог обнаружить Windows из Ubuntu. Я установил порядок загрузки: ubuntu > Windows Boot Manager > DISK1 > DISK2 > DISK3. Вместо DISK1 > ubuntu > Windows Boot Manager > DISK3.

У меня было 2 установки Ubuntu, одна на HDD и другая на SSD. По всей видимости, установка на SSD не отображалась как UEFI по какой-то причине, но я хотел, чтобы загрузился более быстрый диск.

Я не ожидал, что порядок загрузки может повлиять на обнаружение систем grub. Так что это стоит пересмотреть.

У меня была такая же проблема после установки обновлений из Ubuntu. Следующие команды прекрасно сработали для меня:

sudo apt-get install os-prober

Сначала установите os-prober для обнаружения Windows, а затем обновите grub:

sudo grub-mkconfig -o /boot/grub/grub.cfg

В дополнение к ответу Бартоша Дабровски, который помог мне решить мою проблему:

Убедитесь, что если ваш Linux использует UEFI Boot/GPT, что ваша другая ОС (например, Windows в моем случае) также использует UEFI Boot/GPT. При переходе с старой установки Win7 на Win10 жесткий диск все еще имел устаревшую загрузку и MBR. По какой-то причине os-prober и boot-repair имели проблемы с исправлением этого.

Убедитесь, что в BIOS/Порядке загрузки присутствует ваш HDD с ubuntu (например, uefi: ubuntu) и ваш HDD с Windows Boot Manager (например, uefi: Windows Boot Manager).

Если WBM отсутствует, убедитесь, что загрузочный диск windows имеет GPT. Вы можете проверить это в Windows, используя управление дисками (Win + X, затем управление дисками).

Существует инструмент Windows: mbr2gpt, который может преобразовать ваш MBR в GPT. После этого (и загрузки через UEFI) os-prober и, наконец, update-grub смогли обнаружить мою установку Windows и добавить ее в параметры загрузки grub.

Хорошо, у меня была такая же проблема, и я долго не мог найти решение, наконец я его нашел, так что вот моя маленькая крупица песка для мира. Перед тем как попробовать, не забудьте проверить, что вы загружаетесь, используя UEFI, каждый раз, когда это возможно:

По всей видимости, в процессе установки Debian данные Windows внутри EFI-раздела были потеряны, поэтому я выполнил восстановление системы с помощью USB Windows 10 (я пытался исправить загрузку, но по какой-то причине это не сработало, я даже пробовал это в консоли, в любом случае я не потерял данные). После этого теперь я не мог загрузить Debian, поэтому я запустил живый CD Debian, смонтировал все и использовал chroot следующим образом (и не забудьте загрузить USB как UEFI):

mount /dev/your_linux_partition /mnt
cd /mnt
mount -t proc /proc proc/
mount -t sysfs /sys sys/
mount --rbind /dev dev/
mount --rbind /sys/firmware/efi/efivars sys/firmware/efi/efivars/
mount /dev/your_efi_partition /boot/efi/
chroot /mnt /bin/bash

Теперь, здесь os-prober не обнаружил Windows 10, но я решил выполнить grub-install /dev/sda и grub-update в любом случае и перезагрузиться.

Вот в чем дело, теперь я не мог загрузиться в Windows 10, а только в Debian, НО!, я еще раз попытался выполнить grub-update и, наконец, нашел загрузку Windows 10. Это не имеет никакого смысла, честно говоря, но мне все равно. Надеюсь, это поможет кому-то так же отчаянно, как и мне 😀 .

Ответ или решение

Решение проблемы: GRUB не обнаруживает Windows 7

Описание проблемы

Вы установили Ubuntu на второй диск, но после загрузки системы используемая загрузочная программа GRUB предлагает только операционную систему Ubuntu, без возможности выбора Windows 7. При этом, если вы воспользуетесь функцией выбора загрузочного устройства (обычно клавиша F12), вы сможете напрямую загрузить Windows через "Windows Boot Manager".

Возможные причины и решения

Ниже приведены шаги и методы, которые помогут вам настроить GRUB для обнаружения Windows 7.

1. Использование os-prober

Шаги:

  1. Загрузка Ubuntu и монтирование раздела Windows:
    Откройте файловый менеджер (Nautilus) и просто откройте раздел, на котором установлена Windows. Это может помочь в его автоматическом монтировании.

  2. Выполнение команды os-prober:
    Откройте терминал (Ctrl + Alt + T) и выполните следующую команду:

    sudo os-prober

    Эта команда поможет GRUB обнаружить другие операционные системы на ваших разделах.

  3. Обновление конфигурации GRUB:
    Если os-prober обнаружит вашу установку Windows, выполните команду:

    sudo update-grub

2. Настройка GRUB вручную

Если os-prober не работает, вы можете добавить ручную запись для Windows в файл конфигурации GRUB:

  1. Определение UUID:
    Запустите команду:

    lsblk

    Найдите раздел, который содержит /boot/efi, и запишите его имя.

  2. Получение UUID:
    Выполните команду:

    sudo blkid /dev/sdaX

    Замените sdaX на правильный раздел (например, sda2). Это даст вам информацию о UUID.

  3. Редактирование файла 40_custom:
    Откройте файл для редактирования:

    sudo gedit /etc/grub.d/40_custom

    Добавьте следующую запись в конец файла (замените <UUID> вашим найденным UUID):

    menuentry "Windows 7" {
       insmod ntfs
       set root="(hd0,1)"
       search --no-floppy --fs-uuid --set <UUID>
       chainloader +1
    }
  4. Обновление GRUB:
    Сохраните изменения и выполните:

    sudo update-grub

3. Убедитесь в правильности настроек BIOS/UEFI

Настройки загрузки в BIOS могут влиять на то, какие операционные системы обнаруживает GRUB. Убедитесь, что:

  • Правильный порядок загрузки: Поставьте загрузку с диска, где установлен Ubuntu, выше в очереди по сравнению с Windows Boot Manager.
  • Обе ОС используют один и тот же режим: Если Linux установлен в EFI-режиме, Windows также должен быть установлен в режиме EFI. Это можно проверить с помощью утилит Windows, таких как diskpart, или управления дисками.

Если Windows использует MBR, а Linux EFI, возможно, вам придется преобразовать MBR в GPT. Для этого можно воспользоваться утилитой mbr2gpt, доступной в Windows.

4. Установка Boot Repair

Если все вышеперечисленные шаги не помогли, вы можете попробовать использовать утилиту Boot Repair. Выполните следующие команды:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

Следуйте указаниям на экране и выберите "Рекомендуемое восстановление".

Заключение

Проблема с тем, что GRUB не обнаруживает Windows 7, может возникать из-за различных причин: от неправильной конфигурации GRUB и настроек BIOS до проблем с загрузочными разделами. Следуя приведенным шагам, вы сможете настроить GRUB для корректного обнаружения и загрузки обеих операционных систем. Если у вас остались вопросы, не стесняйтесь обращаться за помощью на форумы или в сообщества, посвященные Ubuntu.

Оцените материал
Добавить комментарий

Капча загружается...