Grub не видит windows 10


Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT

Привет, Хабр! Сегодня мы рассмотрим ситуацию, когда при двойной установке Linux & Windows загрузчик GRUB не стартует, давая возможность выбрать ОС, а автоматически загружается Windows. Немного теории: GRUB (GRand Unified Bootloader) — программа-загрузчик операционных систем. GRUB может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы. Значит с теорией мы немного разобрались (думаю этого будет достаточно), теперь же рассмотрим, какие бывают подводные камни, при установке Dual Boot Windows и Linux на одном компьютере. Эксперимент производился на рабочей станции со следующими характеристиками:

Base Board Information

  • Manufacturer: Acer
  • Product Name: Aspire XC600
Memory Device
  • Size: 4096 MB
  • Type: DDR3
  • Speed: 1333 MHz
  • Manufacturer: Kingston
  • Rank: 2
HDD
  • product: ST500DM002-1BD14
  • vendor: Seagate
  • physical id: 0.0.0
  • bus info: scsi@0:0.0.0
  • logical name: /dev/sda
  • size: 465GiB (500GB)
  • capabilities: gpt-1.00 partitioned partitioned:gpt
Доказано, что проблем с установкой Debian 8.6 Jessie совместно с Windows 10 не обнаружено. Debian корректно прописывается в автозагрузке, GRUB запускается без ошибок и две ОС также работают нормально. Но, как показала практика, не со всеми дистрибутивами такое происходит. При установке Ubuntu 16.04.1 вместо Debian на ту же рабочую станцию вылез первый подводный камень — GRUB не стартовал, и Windows 10 автоматом шла на загрузку. Решение проблемы было найдено спустя недели три-четыре (тогда уже надоело считать, сколько времени убито на решение проблемы). Оно оказалось неожиданным, но в тоже время вся система заработала. Значит, если вы столкнулись с такой же проблемой, приведенная ниже инструкция может вам пригодится и сэкономить кучу времени.

Важно! До начала выполнения инструкции нужно подготовить LiveCD с дистрибутивом Linux Mint — все операции мы будем выполнять на нем (я выбрал этот дистрибутив из-за того, что на него спокойно можно установить Midnight Commander, что сложно сделать на LiveCD с Ubuntu, так мы получаем больше пространства для маневров). Также стоит заметить, что команда из под консоли update-grub вам не поможет, так как она рассчитана на случай, когда GRUB запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.

  1. Через терминал, с правами root смонтировать раздел с EFI в папку /mnt. В моем случае, это была команда mount /dev/sda2 /mnt.
  2. Введите команду sudo -s и подтвердите пароль (он пустой по умолчанию) для последующих операций (многие советуют не делать этого, а вводить sudo и команду для выполнения — я поддерживаю это мнение, но инструкция рассчитана на опытных пользователей системы Linux, которые понимаю, что делают все на свой страх и риск).
  3. Запустить Midnight Commander командой mc.
  4. Найти в файловой системе следующий каталог: EFI в папке /mnt.
  5. Переименовать каталог Microsoft во что-нибудь другое, например в Microsoft2.
  6. Создаем новый каталог с именем Microsoft.
  7. Заходим в только что созданный каталог Microsoft и частично создаем внутри его иерархию папок аналогичную старому Microsoft (тому, что переименовали). В моем случае он имел такую структуру папок: /boot/, затем куча папок и файл bootmgfw.efi рядом с ними. Нужно воссоздать структуру папок ровно до этого файла. Т.е. всё, что лежит рядом с ним — не нужно, а всё, что идет до него (т.е. родительские папки, соседние с ними тоже не нужны) воссоздаем в нашей новой папке Microsoft. В моем случае понадобилось создать только папку /boot, итоговый путь до нового каталога вышел таким: /EFI/Microsoft/boot. Можно просто скопировать все папки и файлы — проверено, это работает и можно не создавать все вручную.
  8. Находим в каталоге из шага 6 папку с именем нашего дистрибутива Линукса, в нашем случае это Ubuntu. Копируем (оригиналы файлов и папку ubuntu на всякий случай оставляем, не помешают) все файлы из данной в папки в итоговый каталог, созданный на предыдущем шаге: /EFI/Microsoft/boot.
  9. В получившейся файловой системе находим файл grubx.efi или grubx64.efi (будет только один из них: в зависимости от разрядности установленного Линукса). Переименовываем его в bootmgfw.efi.
  10. Находим файл /boot/grub/grub.cfg в файловой системе установленного Линукса. Открываем его для редактирования. Внутри него находим слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле.
Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместо openSUSE Leap 42.2 27.01 в части кода: menuentry 'openSUSE Leap 42.2 27.01' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de else search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo 'Загружается Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts echo 'Загружается начальный виртуальный диск …' initrdefi /boot/initrd-4.4.36-8-default } Написать openSUSE The best choice!:): menuentry 'openSUSE The best choice!:)' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de else search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo 'Загружается Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts echo 'Загружается начальный виртуальный диск …' initrdefi /boot/initrd-4.4.36-8-default } Хоть мелочь, а приятно! Остальное в коде советую не трогать. Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root. После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:
  1. После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
  2. Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
  3. Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)
  4. Вставляем файл (или файлы), которые мы скопировали и спокойно идем на перезагрузку. Вот и вся инструкция. Думаю, кому-то пригодится…
P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub.

Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».

Метки:
  • Linux
  • GRUB
  • GPT
  • EFI
  • Windows 10
  • OpenSUSE
  • GRUB2

habrahabr.ru

Как починить GRUB (не видит windows 7 после форматирования диска с linux)?

Форматировал диск с Линуксом, в итоге GRUB теперь пишет unknown filesystem.

Параллельно на другом логическом диске стояла винда, все ее файлы и загрузчик по идее в порядке, как вписать ее обратно?

  • Вопрос задан более трёх лет назад
  • 18817 просмотров
Подписаться 5 Комментировать Самое интересное за 24 часа

toster.ru

Как добавить Windows 10 в GRUB

У меня есть два жестких диска в ноутбуке. На одном установлена Windows 10, а на другом Ubuntu 16. Windows 10 устанавливалась как обновление с Windows 7. Windows 7 была предустановлена на заводе. Ubuntu 16 ставилась на чистый жесткий диск.

Для начала посмотрим, что у нас есть:

$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL NAME FSTYPE SIZE MOUNTPOINT LABEL sda 465,8G ├─sda1 vfat 19,5G RECOVERY ├─sda2 ntfs 445,8G Windows 10 └─sda3 ntfs 450M sdb 232,9G ├─sdb1 vfat 512M /boot/efi ├─sdb2 ext2 488M /boot └─sdb3 crypto_LUKS 231,9G └─sda3_crypt LVM2_member 231,9G ├─ubuntu--vg-root ext4 224G / └─ubuntu--vg-swap_1 swap 8G └─cryptswap1 swap 8G [SWAP] sr0 1024M

Тут мы видим два раздела: sdb2 (/boot) и sdb1 (/boot/efi):

$ sudo tree /boot/ /boot/ ├── abi-4.4.0-21-generic ├── abi-4.4.0-34-generic ├── config-4.4.0-21-generic ├── config-4.4.0-34-generic ├── efi │   └── EFI │   └── ubuntu │   ├── fw │   ├── fwupx64.efi │   ├── grub.cfg │   ├── grubx64.efi │   ├── MokManager.efi │   └── shimx64.efi ├── grub │   ├── fonts │   │   └── unicode.pf2 │   ├── grub.cfg │   ├── grubenv │   ├── locale │   │   ├── en_AU.mo │   │   ├── en_CA.mo │   │   ├── en_GB.mo │   │   └── ru.mo │   ├── unicode.pf2 │   └── x86_64-efi ├── initrd.img-4.4.0-21-generic ├── initrd.img-4.4.0-34-generic ├── lost+found ├── memtest86+.bin ├── memtest86+.elf ├── memtest86+_multiboot.bin ├── System.map-4.4.0-21-generic ├── System.map-4.4.0-34-generic ├── vmlinuz-4.4.0-21-generic ├── vmlinuz-4.4.0-34-generic └── vmlinuz-4.4.0-34-generic.efi.signed EFI предназначен для замены BIOS. /boot/efi - это системный загрузочный раздел создаваемый, когда мат. плата ноутбука использует UEFI вместо BIOS (подробнее).

Также я воспользовался скриптом Boot Info Script. Вот его результаты:

Boot Info Script 0.61 [1 April 2012] ============================= Boot Info Summary: =============================== => Windows is installed in the MBR of /dev/sda. => No boot loader is installed in the MBR of /dev/sdb. sda1: __________________________________________________________________________ File system: vfat Boot sector type: Windows 7: FAT32 Boot sector info: No errors found in the Boot Parameter Block. Operating System: Boot files: /bootmgr /boot/bcd sda2: __________________________________________________________________________ File system: ntfs Boot sector type: Windows Vista/7: NTFS Boot sector info: No errors found in the Boot Parameter Block. Operating System: Boot files: /bootmgr /Boot/BCD /Windows/System32/winload.exe sda3: __________________________________________________________________________ File system: ntfs Boot sector type: Windows Vista/7: NTFS Boot sector info: No errors found in the Boot Parameter Block. Operating System: Boot files: sdb1: __________________________________________________________________________ File system: vfat Boot sector type: FAT32 Boot sector info: No errors found in the Boot Parameter Block. Operating System: Boot files: sdb2: __________________________________________________________________________ File system: ext2 Boot sector type: - Boot sector info: Operating System: Boot files: /grub/grub.cfg sdb3: __________________________________________________________________________ File system: crypto_LUKS Boot sector type: Unknown Boot sector info: ubuntu-vg-root': _______________________________________________________________ File system: Boot sector type: Unknown Boot sector info: Mounting failed: mount: unknown filesystem type '' ubuntu-vg-swap_1': _____________________________________________________________ File system: Boot sector type: Unknown Boot sector info: Mounting failed: mount: unknown filesystem type '' mount: unknown filesystem type '' Из этого становится ясно, что Windows установлена в MBR на /dev/sda. А /grub/grub.cfg расположен на sdb2.

Узнаем UUID от раздела с меткой "Windows 10":

$ sudo blkid /dev/sda2

/dev/sda2: LABEL="Windows 10" UUID="8684C04C84C04103" TYPE="ntfs" PARTUUID="76692ca8-02"

Путем экспериментов я выяснил, что в скрипте /etc/grub.d/40_custom срабатывает следующее условие: if [ "${grub_platform}" == "efi" ]; then fi И не срабатывает следующее условие: if [ "${grub_platform}" == "pc" ]; then fi Также в ходе одного из экспериментов я получил ошибку: "/boot/grub/x86_64-efi/ntldr.mod not found" Из этого можно сделать вывод, что у меня UEFI загруза Ubuntu.  Следующая команда это подтверждает (подробнее):

$ [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS UEFI

Я не уверен, что Windows 10 у меня установлена в UEFI режиме. Возможно GRUB может загружать только системы установленные в том же режиме, в котором он сам запущен. Да, действительно Windows работает в устаревшем режиме.
MSINFO32
UEFI - это интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования. Получается Ubuntu у меня работает с новым UEFI, а Windows с legacy BIOS. Установим новую загрузочную конфигурацию на диск C: из под Windows: C:\WINDOWS\system32>bcdboot C:\Windows /s C: /f uefi Файлы загрузки успешно созданы.

Я пробовал добавить в файл /etc/grub.d/40_custom следующую настройку (подробнее), но дальше логотипа Windows 10 загрузка не идет:

menuentry "Windows 10 (BCD-UEFI configuration on system drive /dev/sda2)" --class windows --class os { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod chain set root='hd0,msdos2' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 8684C04C84C04103 else search --no-floppy --fs-uuid --set=root 8684C04C84C04103 fi chainloader /EFI/Microsoft/Boot/bootmgfw.efi } Вот здесь пишут, что нельзя мешать режимы Windows in BIOS/CSM/legacy mode и Ubuntu in EFI/UEFI mode. И нужно переустанавливать одну из ОС. Или как-то по другому переключаться. --

devtype.blogspot.ru

Почему grub не видит винду после параллельной установки?

linux Дело было так: я поставил винду (она работала - все ок), потом поставил opensuse и у меня опять таки все работало и винду видело и сузю в грубе, но сузя мне все-таки не понравилась и я решил вернуться на минт. Переформатировал разделы относящиеся к линуксу и заодно раздел груба (два виндовых раздела не трогал), потом поставил минт на отформатированные разделы и все... После этого винда перестала отображаться в грубе. os-prober установлен, update-grub не помогает и на всякий случай $ sudo fdisk -l Диск /dev/sda: 931,5 GiB, 1000204886016 байтов, 1953525168 секторов Единицы измерения: секторов из 1 * 512 = 512 байтов Размер сектора (логический/физический): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Тип метки диска: gpt Идентификатор диска: 99C8C15C-3D04-4E36-89AE-136595093E20 Устр-во Start Конец Секторы Size Тип /dev/sda1 2048 206847 204800 100M EFI System /dev/sda2 206848 8595455 8388608 4G Linux своп /dev/sda3 8595456 218310655 209715200 100G Linux filesystem /dev/sda4 218310656 1057171455 838860800 400G Linux filesystem /dev/sda5 1057171456 1057204223 32768 16M Microsoft reserved /dev/sda6 1057204224 1953523711 896319488 427,4G Microsoft basic data

P.S. UEFI/GPT

  • Вопрос задан 30 июня
  • 461 просмотр
Подписаться 2 1 комментарий Самое интересное за 24 часа

toster.ru


Смотрите также