LINUX.ORG.RU

grub находит конфиг не на том диске и грузит не то что надо

 


0

1

Добавил sata-диск, ребутнулся, итог:

1) после запуска гуи (lightdm+x11 с автологином) перестаёт работать клавиатура и мышь (alt+prtscr+b работает, ctrl-alt-f1, numlock итд не работают)

2) qemu-system-x86_86 (он в автозапуске) пишет про отсутствующий модуль kvm

Оказалось, что откуда-то запустилось ядро 3.16 вместо 4.19 и от этого всё пошло наперекосяк. В видимом после запуска /boot/ есть только 4.19, и в /boot/grub/grub.cfg тоже прописано 4.19. В биосе в качестве загрузочного на первом месте стоит правильный диск который был и раньше. Добавленный диск виден как sdb. В dmesg правильный диск - «sd 0:0:0:0», неправильный - «sd 1:0:0:0». Но походу grub цепляет с него и конфиг и ядро, хотя дальнейшая загрузка делается с правильного диска. Как так вышло и как исправить?

Этот второй диск - старый системный для текущей ОС, возможно там какие-нить идентификаторы совпадают, но до мая этого года тот диск был подключён вторым и всё работало (но была другая материнка хоть и той же модели - возможно отличается ревизия биоса или какие-то опции в нём). Старые системные разделы просто висели неиспользуемыми (у них тип mdraid, это половина миррора) и ничему не мешали. Никаких обновлений ядер/grub/initramfs за прошедшее время (с отключения диска) не было.

Подозреваю что всё починится если их просто снести и оставить только один нужный, но хочется разобраться в ситуации.

Обновление:

Заметил, что груб с не тем конфигом сам тоже не тот - над меню показывается версия пакета, там deb8. Осталось узнать кто же запускает не тот grub. Или эта строчка в конфиге прописана?

1) grub-install /dev/sda - не помогает (я думал возможно прошитый на sda груб почему-то считает что его домашний раздел на sdb)

2) затирание загрузочного кода в mbr sdb - не помогает (думал может быть биос грузит с sdb несмотря на явное указание грузить с sda)

3) убирание флага активности с sdb1 - не помогает

4) затирание описания раздела sdb1 (то есть этого раздела теперь вообще нет) - помогло, стал грузиться правиьный груб с правильным конфигом итд

Но тему решённой не помечаю, т.к. вопрос никуда не девается: каким образом и кто запускает груб не с того диска. Мастер-бутсектор на старом диске (кроме таблицы разделов) затёрт, то есть грузится точно MBR правильного диска, который в свою очередь вряд ли может по своей инициативе лезть на другой (или может?).

★★★★★

Последнее исправление: firkax (всего исправлений: 7)
Ответ на: комментарий от d

Всмысле как названы? По uuid, они там правильные - это просто старая версия конфига от этой же ОС.

Да, id-ы миррора и id-ы файловой системы на правильном диске и на старом одинаковые, но раньше это ничему не мешало, да и сейчас ядро всё видит правильно, а груб почему-то нет.

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

У меня не то, ядро всё видит правильно всегда и юзерспейс грузится тот что надо. Неправильно видит grub и тоже стабильно всегда. Никакого рандома.

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

Хватит демагогию, лучше по теме ответь.

Вопрос в том почему так происходит. И повторю - происходит детерминистично без всяких рандомов, то есть зависит от какой-то вполне конкретной штуки.

firkax ★★★★★
() автор топика

Есть ещё BIOS и EFI. Отключи физически диски и запусти компьютер, чтобы полюбоваться, что осталось от загрузчика.

Следующий момент это как система определяет порядок использования дисков, когда их несколько в компьютере. И тут вы делали методом научного тыка, старый диск с записями оказался на первом месте. Поздравляю, Шарик, ты балбес!

И в завершении, вам уже ответили про UUID.

Но вы же настолько умный, аж ★★★★★
Воткнули диск не глядя, что на нём, а потом удивляетесь, откуда ядро 3.16 вместо 4.19? Как-то энергетику сказал, что я же читал ПУЭ, на что он мне ответил в хорошем смысле, что одного прочтения не достаточно, нужно понимать написанное. В данном случае чтение было чисто техническое и применение написанного методом совпадений, то есть, без понимания. Именно так устанавливают Arch Linux и Gentoo, а потом гордятся нереальными достижениями по сравнению с убунточкой или виндой.

У меня всё.

wonit
()

А у Вас точно BIOS, а не UEFI? Если UEFI - так он имеет 2 варианта загрузки (обычно настраивается, нужно ли использовать один какой-то или оба):

  • CSM (Legacy Boot), как раз с помощью MBR
  • EFI - в этом случае наличие MBR на диске не имеет значения, а загрузка будет идти со специального раздела, называемого EFI System Partition; а чтобы загрузка с него стала возможна, в энергонезависимую память добавляется запись (со ссылкой на раздел и на файл загрузчика на разделе), причём эту запись UEFI вроде как и сам может добавить при подключении нового диска.

Т.о. я предполагаю следующую ситуацию: при подключении нового диска UEFI обнаружил на нём раздел EFI System Partition, добавил запись о нём (с максимальным приоритетом) и стал с него грузиться по умолчанию.

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

Что значит «как»? Продублирую сюда из заглавного сообщения темы:

1) на первом месте указан правильный диск

2) для надёжности бут-сектор второго я вообще затёр, оставив только таблицу разделов

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от PeleWin

Разумеется у меня традиционная загрузка и никаких efi-разделов нет.

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

В qemu есть урезанный bios. Граб из него получает данные.

Если есть возможность, то нужно при загрузке qemu попасть в консоль граба и посмотреть в каком порядке он видит диски.

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

обычно показывает все диски и их партиции.

Если диски размечены на разное число разделов, то сразу будет понятно какой диск какой.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от firkax

Но при этом одинаковые id файловых систем? В грабе и их можно посмотреть «ls -l (hd0,msdos1)»

У тебя ведь загрузка по uuid? Посмотри что говорит

search --no-floppy --fs-uuid --set=root xxxxx

Посмотреть переменную можно через «echo ${root}»

Если их больше одного, то какой из них выбирает grub - хз.

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

На самом (hd0,msdos1) файловую систему он не видит (да и примонтировать из линукса его напрямую нельзя - там mdadm миррор видимо в формате где метаданные в начале). Зато видит её на (md/0) - ту самую корневую. Этот самый (md/0) разумеется только один и у него таймстамп из 2018 года т.е. это старая половина миррора.

Ядро в dmesg на старте всегда писало что дропает отставшую половину миррора (старый диск). А вот как выбирает grub с какой половины читать? Правильный диск находится раньше в списке, и таймстамп у него более поздний - но он всё равно выбирает не тот? При том что раньше выбирал тот что нужен.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Знания груба об md сильно ограничены и это может аукнуться в любую сторону. Он вполне может что-то не проверять.

С другой стороны - части зеркала имеют одинаковые uuid.

Не совсем понятно как себя ведет груб если он не опознал зеркало и нашел партиции с одинаковыми uuid.

Хуже, если он видит зеркало, но search находит и части зеркала и и само зеркало.

У тебя груб видит зеркало или только его части?

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

Не понял. Части это (hd0,msdos1) (hd1,msdos1), напрямую файловая система на них не рабочая - т.к. там суперблок рейда в начале. Он их видит, но ничего с ними не делает как я понял. Зеркало это (md/0), с него он и читает не то что нужно, потому что он почему-то выбирает читать зеркало с второй его (устаревшей) половины. Раньше читал правильную половину.

Думаю проблема почти выяснена (грубовский драйвер линукс-миррора не умеет правильно выбирать откуда читать и всегда считает что миррор консистентный), остался маленький вопрос почему он теперь всегда выбирает для чтения второго участника, хотя раньше всегда выбирал первого.

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

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

На этом форуме нет разработчиков grub, так что, если хотите копать глубже, смотрите исходники md-драйвера grub'а, в каком порядке он просматривает диски при поиске суперблока raid'а, какие поля проверяет. Может на порядок ещё влияет в какие физические порты материнки диски подключены.

Кстати, а почему ядро дропает старую половину, а не пытается синхронизовать?

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

Не, ничего не менялось, apt/dpkg вообще не трогались за эти полгода.

Почему ядро дропает - не знаю, пишет «kicking non-fresh sdbX from array!» на старте. Насколько я знаю, в линуксе вообще поведение рейдов в плане реакции на сбой меняется в зависимости от версии ядра/mdadm-initramfs/метаданных, возможно это дефолтное поведение для имеющейся конфигурации, а может я тогда что-то настроил чтоб так было (т.к. именно такое поведение было нужно).

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

Ну, если гуглить это «kicking non-fresh", то полно случаев типа моргнул свет и RAID не собрался сам. Причём у дисков в суперблоке состояние clean. По идее, если диск неисправный, то в суперблоке должен быть флаг FAILED, который командой mdadm нужно выставлять. Возможно, md-драйвер в grub смотрит только этот флаг, а, получается, что нужно искать все суперблоки, сравнивать их и определять которые «non-fresh». Это я к том, что разрабы, возможно, и не захоять фиксить подобное поведение.

А старой материнке не могла быть загрузка со второго диска? То есть, если grub перебирает диск по списку BIOS с конца, то тогда он там находил нужную половинку зеркала. Тот диск, который загрузочный в BIOS, ЕМНИП, будет в списке первый (0x80).

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

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

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

А MBR до обнуления загрузчика со второго диска не сохранился? Или просто попробовать скопировать 446 байт с первого, если ничего не менялось, в BIOS поменять порядок загрузки и посмотреть, что произойдёт.

mky ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.