LINUX.ORG.RU

Глючит grub при попытке зайти в шиндоус

 , ,


0

1

Всем привет. Имеется пк, на котором на 1 хдд стоят две системы: шиндовс 8.1 и дебиан 9. Выглядит так:

sudo fdisk -l /dev/sda
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 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
Disklabel type: dos
Disk identifier: 0x0eabc478
Device     Boot      Start        End    Sectors   Size Id Type
/dev/sda1  *          2048     718847     716800   350M  7 HPFS/NTFS/exFAT
/dev/sda2           718848  245759999  245041152 116.9G  7 HPFS/NTFS/exFAT
/dev/sda3        245760000 1269759999 1024000000 488.3G  7 HPFS/NTFS/exFAT
/dev/sda4       1269762046 1953523711  683761666   326G  5 Extended
/dev/sda5       1269762048 1328353279   58591232    28G 83 Linux
/dev/sda6       1328355328 1336510463    8155136   3.9G 82 Linux swap / Solaris
/dev/sda7       1336512512 1953523711  617011200 294.2G 83 Linux
Дебиан устанавливал в автоматическом режиме после шиндоус по мануалу с сайта дебиан, чтобы не накосячить и не снести шиндоус.
После установки дебиана то ли os-prober уже был, то ли я ставил, уже не помню. Не суть. Я сделал update-grub, в терминале увидел сообщение об обнаруженной шиндоус 8.1 и решил зайти, проверить как она грузится. Но не тут то было. В грабе после выбора пункта с шиндоус 8.1 исчезает меню граба, остается только фирменный фон дебиана и ничего не грузится. Переключение по тту или как это называется ничего не дает, остаюсь все с тем же фоном.
Я перезагрузился в дебиан, сделал еще один update-grub и теперь у меня обнаружилось уже две шиндоус 8.1, но ситуация все та же. На какой бы пункт в грабе с шиндоус я не нажал, все просто виснет.
Эксперементально установил, что если сделать раз 20 update-grub, а потом перезагрузится, то по одному из двух пунктов шиндоус в грабе в саму шиндоус все же грузит. Но это, так сказать, только по праздникам.
Вопрос в том, как с моими лапками починить граб, чтобы корректно с первого раза грузил шиндоус?
Тут автоматически сконфигурированный конфиг граба - https://pastebin.com/yBK8QVnK
Помогите, пожалуйста.

Предлагаю радикальное решение — отключить os-prober и ручками прописать Windows так, чтобы она грузилась корректно.

  1. Добавляем в /etc/default/grub строчку
    GRUB_DISABLE_OS_PROBER=true
  2. В файл /etc/grub.d/40_custom прописываешь загрузку Windows — тут я сам не делал такого (именно с Windows, Linux прописывал в дуалбут к другому Linux), но по статье https://wiki.archlinux.org/index.php/GRUB#Windows_installed_in_BIOS.2FMBR_mode это вполне реальная задача. UUID выяснишь командой
    blkid -c /dev/null
  3. update-grub
Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Walter_N

Не удалишь, а отключишь (удаление может вызвать проблемы с зависимостями). Если потом захочешь его включить обратно — то удалишь строчку, что его отключила.

В принципе, можешь сделать update-grub после 1 шага, но КМК, то его можно сделать и один раз на шаге 3 в конце, как писал. В любом случае, ничего страшного не должно быть.

И редактировать ручками тебе нужно только два файла — /etc/default/grub и /etc/grub.d/40_custom — и прописывать в них только то, что я сказал. Редактировать руками файл /boot/grub/grub.cfg нельзя, как в нём и написано. При этом обрати внимание, что тебе следует только дописать что-то в 2 файла выше, а не переписать их.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Редактировать руками файл /boot/grub/grub.cfg нельзя, как в нём и написано.

При достаточном умении — можно, но если update-grub/grub-mkconfig триггерится хуками (а в дебиане, убунте и ещё куче дистров оно триггерится при обновлении пакета grub2), то это просто бессмысленно — все изменения перезапишутся.

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

Ответ на удалённый комментарий от Vsevolod-linuxoid от 27.09.2018 20:41:21

бред написал

На самом деле не бред, просто не всегда и не всем нужен данный юзкейс. Для истории прокомментирую.

запретить обновление пакета

Можно просто отключить хук, но как это делается — я не знаю. В генте никаких хуков нет — надо устанавливать (не пакет, а сам grub в MBR/GPT/UEFI) grub руками, что избавляет от автоматизированного факапа.

но зачем?

Например, если /boot//boot/EFI на флэшке, то хук сфейлится, если флэшка не вставлена (хук автоматически монтирует /boot и/или /boot/EFI).

Задача ведь просто Windows загрузить.

Вот поэтому я со своими советами не лезу.

r3lgar ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Сделал вроде как написано. Добавил строку для отключения os-prober'a в /etc/default/grub. Добавил в конец файла/etc/grub.d/40_custom описанный по ссылке блок

if [ "${grub_platform}" == "pc" ]; then
  menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr     
    search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 8EBAE7AFBAE791CF
    ntldr /bootmgr
  }
fi
где 8EBAE7AFBAE791CF - uuid по lsblk -f у раздела, который /dev/sda1 в моем первом посте. Сделал update-grub, ошибок не было. Перезагрузился, пункта с шиндоус нету.

Walter_N ()

Установи вместо дебиана нормальный линукс и забудь про венду как про страшный сон. Ну и граб удали (у тебя же уефи?).

anonymous ()
Ответ на: комментарий от Walter_N

раздела, который /dev/sda1 в моем первом посте

Нужно для /dev/sda2, может быть...

А вот что нету пункта — странно, должен появиться был. Покажи

cat /etc/grub.d/40_custom

Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

if [ "${grub_platform}" == "pc" ]; then
  menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr     
    search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 8EBAE7AFBAE791CF
    ntldr /bootmgr
  }
fi

/dev/sda2 это уже диск C: шиндоус. В вики по ссылке написано, что

Warning: It is the system partition that has /bootmgr, not your «real» Windows partition (usually C:). In blkid output, the system partition is the one with LABEL=«SYSTEM RESERVED» or LABEL=«SYSTEM» and is only about 100 to 200 MB in size (much like the boot partition for Arch).

Walter_N ()
Ответ на: комментарий от Vsevolod-linuxoid

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

anonymous ()
Ответ на: комментарий от Walter_N

Так, я действительно не понимаю, какого черта происходит. Я же сам пользуюсь этим методом на Debian 9.

vsevolod@hp15debian9:~$ cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=30
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="apparmor=1 security=apparmor"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
GRUB_DISABLE_OS_PROBER=true
GRUB_BACKGROUND=/usr/share/images/grub/BonsaiTridentMaple.tga
vsevolod@hp15debian9:~$ cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "Ubuntu 16.04" {
 UUID=1ccdb062-6ee4-49fa-894c-3a9828b3548f
 search --fs-uuid $UUID --set root
 linux /vmlinuz root=UUID=$UUID ro
 initrd /initrd.img
}
vsevolod@hp15debian9:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.5 (stretch)
Release:	9.5
Codename:	stretch
vsevolod@hp15debian9:~$ 

 — усё работает как надо.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

ЯННП, сейчас проблема в том, что пункта нет, или в том, что не грузится винда, когда пункт есть? Могу посоветовать поставить grub-legacy, или lilo и не париться.

DELIRIUM ★★★☆☆ ()
Ответ на: комментарий от DELIRIUM

Скорее в том, почему вообще нету пункта. По моему опыту, если допустить ошибку, то система может не грузиться, но пункт все равно должен быть — а тут его нет. А ты просто на lilo перешел, да?

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Не, мне помогло отключение os_prober'а, я оставил один пункт с win10 и всё. У меня всё грузится. Я думал, более правильно будет dd'ой затереть нужные сектора на диске, но побоялся всё сломать. Потом я решил, что всё же костыльно, и тупо поставил grub-legacy, там всё работает и нет такой херни и километровых конфигов. Lilo, я думаю, тоже бы сработал.

DELIRIUM ★★★☆☆ ()
Ответ на: комментарий от DELIRIUM

я оставил один пункт с win10 и всё

А не проще было тогда вообще удалить Linux и восстановить загрузчик винды? Или ты имел в виду «добавил один пункт»?

У тебя не завалялись конфиги с того раза? Просто странно: у меня всё работает, у тебя тоже, как я понял — а у ТСа нет.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Итак, я добился появления пункта в меню граб. Не знаю, что было не так. Я просто восстановил изначальные конфиги из бекапов и заново внес все необходимые изменения. Теперь пункт есть - https://image.ibb.co/cuwzGp/1_1.jpg
Но пробема остается. Нажимаю на пункт меню - остается фон и никуда не грузится. Переключение по консолям или не работает, или просто везде только фон дебиана. Уже подумываю просто восстановить загрузчик шиндоус...

Walter_N ()
Ответ на: комментарий от Walter_N

Текущий 40_custom:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
  insmod part_msdos
  insmod ntfs
  insmod search_fs_uuid
  insmod ntldr     
  search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 8EBAE7AFBAE791CF
  ntldr /bootmgr
}

Walter_N ()
Ответ на: комментарий от Walter_N

Интересно...

Так, ну во-первых, зачастую UUID определяется неправильно. Единственный способ получить UUID, который есть — это

blkid -c /dev/null

Во вторых, возможно дело в кривой нумерации в GRUB разделов — попробуй заменить

--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
на
--hint-bios=hd0,1 --hint-efi=hd0,1
или как-то ещё попробовать их изменить.

В третьих, при дуалбуте часто советуют отключать быструю загрузку винды.

Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)
Ответ на: комментарий от Vsevolod-linuxoid

Быстрая загрузка выключена. Надоело возиться и я восстановил загрузчик шиндоус, а потом восстановил граб по этой инструкции - https://help.ubuntu.ru/wiki/восстановление_grub. Теперь все работает вроде... Пока... В любом случае, спасибо за помощь.

Walter_N ()