os-prober и update-grub не могут увидеть / найти работающую установку Windows

Я установил 12.04 рядом с установкой Windows 7 на жестком диске 3 ТБ. Если я использую F12 во время загрузки для проверки параметров загрузки из BIOS, Windows 7 и Ubuntu загружаются нормально, но Ubuntu GRUB дает мне только параметры Ubuntu.

Когда я пробую os-prober, я не получаю никаких результатов; update-grub тоже ничего для меня не делает. Я пытался модифицировать GRUB с помощью Grub Customizer, но, на самом деле, не совсем понимаю его тонкости.

Вот скриншот диска, сделанного с помощью Дисковой утилиты. Первый раздел - Windows, второй - общие данные (MP3, документы, фотографии и т. Д.). FAT 105 МБ - это "системный раздел EFI", а 134 МБ "Неизвестный" помечен как "зарезервированный раздел Microsoft"; 898 ГБ - это Ubuntu, а последние 5 ГБ - подкачка.

Снимок дисковой утилиты

2 ответа

Прошло некоторое время с тех пор, как меня спросили, но я только что столкнулся с той же проблемой, когда os-prober не обнаруживает раздел Windows (с BitLocker). В моем случае это произошло после копирования данных на новый жесткий диск большего размера, что потребовало от меня воссоздания раздела EFI.

Кажется, что os-prober проверяет раздел EFI на жестком диске ( /dev/nvme0n1p1в моем случае) и проверяет bootmgfw.efiфайл в папке:

      $ sudo os-prober
/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi

Но эта папка и файл, очевидно, были недоступны после воссоздания раздела EFI. Так что все, что мне нужно было сделать, это скопировать Microsoftкаталог со старого жесткого диска на новый, а затем os-prober снова запустился, чтобы обнаружить раздел Windows, и Grub отлично его загружает. Смонтирован ли основной раздел Windows или нет, не имеет значения (как предлагается в других сообщениях по этой теме), а также не имеет значения, зашифрован ли основной раздел с помощью BitLocker.

Резюме: если предположить, что раздел EFI старого диска /dev/sda1и раздел EFI (FAT32) нового диска монтируется как /boot/efi, достаточно сделать

      sudo mount /dev/sda1 /mnt
sudo cp -r /mnt/EFI/Microsoft /boot/efi/EFI/
sudo umount /mnt
sudo os-prober
# This should show the Windows partition as above. If ok, update grub.
sudo update-grub

Боковое примечание: по крайней мере, Ubuntu 22.04 (возможно, и некоторые более ранние версии) по умолчанию отключает запуск os-prober по соображениям безопасности:

      $ sudo update-grub
Sourcing file `/etc/default/grub'
...
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

Чтобы заставить его работать, добавьте

      GRUB_DISABLE_OS_PROBER=false

к /etc/default/grubи беги update-grubопять таки:

      $ sudo update-grub
Sourcing file `/etc/default/grub'
...
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

У меня была такая же проблема:
Windows 7 и Linux (Slax с Grub2 и Debian в моем случае) и os-prober не распознает раздел Windows, когда я использовал update-grub; Окна были опущены.

Я исправил проблему. Сначала я протестировал добавление записи для Windows 7 вручную в /boot/grub/grub.cfg (update-grub перезаписывает этот файл всякий раз, когда он запускается, поэтому внесенные в него изменения не являются постоянными).

Я перезагрузился, и Windows 7 появилась в меню и загрузилась нормально, кроме этой ошибки:

error: no suck device: xxxxxxxxxxx (disk ID)

Когда это произошло, я нажал Enter и Windows загрузилась нормально.

Я расследовал исполнение os-prober командные и другие сценарии, участвующие в процессе распознавания ОС, и я проверяю вывод

sudo /etc/grub.d/30_os-prober 2>/dev/null

Windows не указан. Я открыл файловый менеджер Dolphin, чтобы просмотреть раздел Windows, искал UUID раздела и заменил его в /boot/grub/grub.cfg устранить ошибку.

Я выполнил

sudo /etc/grub.d/30_os-prober 2>/dev/null

а винда тогда была в порядке

Я перезагрузил компьютер, пошел в консоль и выполнил

sudo /etc/grub.d/30_os-prober 2>/dev/null

и тогда Windows снова не была в списке.

Я открыл Dolphin, просмотрел раздел Windows, выполнил

sudo /etc/grub.d/30_os-prober 2>/dev/null

снова и Windows была в списке.

Я выполнил update-grub и меню GRUB теперь в порядке.

Я думаю os-prober требуется раздел (в случае NTFS, потому что раздел Debian всегда указан), смонтированный до того, как он сможет его найти. Я не выяснил почему os-prober имеет такое поведение, но решение работает.

Другие вопросы по тегам