LinuxForum.Fans
Тема

Помогите справиться с Grub

Автор: suvolod 40 сообщений 5304 просмотров
#158020

Вчера/сегодня пытаюсь обновить ядро на Ubuntu 10.10. Цель - исследовательская, просто понять как это делается.
На диске стоит только Ubuntu, есть ntfs-раздел, но он без винды - на нем просто несколько папок с win-дистрибутивами.
На всякий случай вот разметка:

[console]Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 623 4999168 82 Linux своп / Solaris
Раздел 1 не заканчивается на границе цилиндра.
/dev/sda2 623 38913 307567457+ 5 Расширенный
/dev/sda5 26135 38913 102647286 7 HPFS/NTFS
/dev/sda6 623 3113 19998720 83 Linux
/dev/sda7 3113 26134 184920064 83 Linux[/console]
Обновление ядра делал по такой схеме:

1.Качаем новое ядро с www.kernel.org и распаковываем
2.В терминале переходим в папку с распакованным ядром
3. Конфигурируем через menuconfig:
4. Собираем ядро
make dep
make bzImage
make modules
4.Устанавливаем новое ядро
make modules_install
make install
5. Обновляем загрузчик
update-grub

Вроде как и ядро, и модули скомпилировались/инсталировались без ошибок, но на последнем пункте меня ждала засада:
Перезагружаюсь, выполняю uname -r, и консоль мне выдает что я использую старое ядро 2.6.35-28-generic (а ставил я 2.6.38.4).
Тогда я стал разбираться с GRUP, почитал вот этот мануал - http://ru.wikibooks.org/wiki/Grub_2 , а также некоторое множество других.
Вроде все понятно - grub.cfg не трогать, а править etc/default/grub, затем update-grub и пользуемся. Только вот при перезагрузке
как не появлялось у меня grub-меню, так и не появляется... Не знаю даже уже куда дальше рыть. Прошу помощи. На всякий случай
вот мой grub-файл:

text
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=30
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=30
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

остальные строки не привожу, т.к. закомментированы.. И еще - может поможет. Ради интереса открыл /boot/grub/grub.cfg - так вот там упоминания про версию ядра 2.6.38.4 вообще нет, хотя команда update-grub выдает такое эхо:

[console]Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.38.4.old
Found kernel: /boot/vmlinuz-2.6.38.4
Found kernel: /boot/vmlinuz-2.6.35-28-generic
Found kernel: /boot/vmlinuz-2.6.35-22-generic
Found GRUB 2: /boot/grub/core.img
Found kernel: /boot/memtest86+.bin
Updating /boot/grub/menu.lst ... done[/console]
На всякий случай опять-же: строчка про 2.6.38.4.old появилось потому-что когда уже все попытки вызвать grub-меню потерпели фиаско, я попробовал еще раз проинсталлировать ядро через make install...

#158031

есть такая старая поговорка : ".. снявши головы по волосам не плачут ..." , так вот это как раз ваш случай .
раз уж вы взялись пересобирать ядро , вы должны изучить(так ради интереса почитать) как вся кухня работает в целом .
1. (к сведению) Само ядро в ванильных установках знает только один инструмент себя-установки-то-биш-вызова-при-загрузке - этот инструмент LILO .
2. (следствие из №1) а раз так , то .. при выполнении команды make install образ ядра , карта системы и т.д. копируются в каталог /boot и автоматически вызывается команда lilo , которая должна обновить загрузчик LILO в MBR согласно файлу /etc/lilo.conf ..
3. (выводы из №2) ... ОМГ - "Лёлик все пропало шеф нас убьёт .."© :O . Что происходит ? в бубунте(которая ну такая бубунта) лилы нет ! т.е. его нужно конфигурировать и устанавливать руками , в следствии чего , при завершении скрипта make install , система плюнется ошибкой на невозможность вызвать lilo и на этом остановит выполнение где то ближе к третьей четверти всех необходимых операций, т.е. получившееся ядро будет не функционально ...
4. (извечный вопрос "Что делать") можно поставить LILO ,собрать и грузануться с нового ядра и вернуть граб , или пойти таким путём - тыц , тоже очень хороший вариант(имхо) .

#158089

Спасибо за комментарий.. я вообще-то по статье делал (вроде не самой старой - декабрь 2010 года). Вот она - http://www.k-max.name/linux/upravlenie-yadrom-linux-sborka-kompilirovanie-konfigurirovanie/ . В ней про Lilo упоминанания вообще нет..

gramozeka, пробовал сделать по твоей ссылке на английский мануал(насколько хватило моего знания английского)
Во первых, если я правильно эту инструкцию, то из моего порядка действий шаги 3, 4 можно выкинуть и вместо них выполнить всего две команды:

make
make modules_install

далее из папки с исходниками скопировать (с переименованием) три файла:
linux-2.6.38.4/.config >> 2.6.38.4
linux-2.6.38.4/arch/x86/boot/bzImage >> vmlinuz-2.6.38.4
linux-2.6.38.4/System.map >> System.map-2.6.38.4

далее создаем файл /etc/modprobe.d/usb.conf для корректного подключения usb и прочих устойств
(забегая вперед - этот шаг я пропустил, но подключение usb-флешек у меня после обновления работает)

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

затем генерируем boot/grub/grub.cfg через
grub-mkconfig -o /boot/grub/grub.cfg

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

Перезагружаюсь - и вот оно - окошко с вариантами загрузки разных ядер, которое я так долго ждал... Анализируя свою же последовательность действий, пришел к выводу, что можно было, наверное, и по моей инструкции обновиться (во всяком случае ядро-то с модулями я не стал перекомпилировать, а взял те, которые сделал вчера), но "добить" установку мне помогла команда
grub-mkconfig -o /boot/grub/grub.cfg, которая в моей инструкции не было совершенно. Свою догадку я прямо сейчас проверить не могу (вчера ядро + модули больше 3-х часов компилировались), но обязательно проверю.

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

#158095
suvolod написал:
А расписал процесс для того, чтобы лучше самому понять, что и как я сделал... ну и буду рад, если подскажете, где в моих шагах допущены грубые ошибки.. все-таки понять ту английскую инструкцию с недельным багажом опыта в убунту все-равно полностью не смогу

ну что там вы делали это вам виднее , комментировать не стану т.к. не знаю что .
единственное замечание - после команды make команда make modules_install обязательна , она устанавливает модули вновь собранного ядра и файлы inclide , без них ядро будет работать не правильно и возможны проблемы ..
а по теме - сборка ядра не очень сложный процесс , главное поменьше полагаться на всякие "добрые советы" в сети , а почаще читать /usr/src/linux/doc и /usr/src/linux/README , процесс описан достаточно и очень подробно для того чтобы собрать ядро самому , ну ессно аглицкий знать нужно , иначе все эти потуги не приведут ни к чему кроме очередного фейла wink
инструкция по моей ссылке достаточно подробна , раз вы поняли что да как и смогли выполнить свою задачу значит всё сделали правильно , остальное дело опыта , так что удачи , что не понятно спрашивайте ..

#158192

[console]Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 623 4999168 82 Linux своп / Solaris[/console]
а зачем swap загрузочный???

#158413

Сам только сейчас заметил :).. Вообще, в книге вычитал, что swap для оптимизации надо помещать в начало или конец диска (конечно, если отдельный диск под него не выделяешь). Вот и поместил в начало... а мастер видимо пометил его автоматом загрузочным.

#158417

У меня вопрос по компиляции ядра как таковой... насколько это вообще целесообразно. Я админ виндовой сетки, но к концу года в рамках легализации ПО должны перейти на свободный линукс, так что начал активно изучать эту тему. Так вот, как я понял, компиляция ядра будет эффективной, если перед этим ручками соптимизируешь ядро под свое железо, для чего надо долго лазать через menuconfig и разбираться в параметрах ядра, отключаяя все ненужное. Но если учесть, что сейчас у меня зоопарк из 20+ ПК от целеронов с IDE-интерфейсом и 512Mb памяти до самых последних пентиумов, и надо оптимизировать ядро индивидуально под каждую из машин.. да ядро соберется нормально раза с пятого.. это-же рехнуться можно! Получается, компиляцию ядра как часть оптимизиции проще выкинуть и забыть?

#158424
suvolod написал:
У меня вопрос по компиляции ядра как таковой... насколько это вообще целесообразно.
suvolod написал:
Получается, компиляцию ядра как часть оптимизиции проще выкинуть и забыть?

Ну вот сами себе и ответили, если учесть ещё что ядро обновляется постоянно из реп то ваша компиляция коту под хвост.
Компиляция ядра на Debian \ Ubuntu - это неверный подход - так только для себя знать что можешь...
И да для десктопов есть такая штука как Zen хотя не знаю может рановато вам. Тут я чирканул об этом.

#158431
Termo написал:
а зачем swap загрузочный???

это не важно :P
если конечно загрузчик в MBR.

suvolod написал:
Вообще, в книге вычитал, что swap для оптимизации надо помещать в начало или конец диска (конечно, если отдельный диск под него не выделяешь)

расскажите, а с чем это связано? (ссылку?)
кстати, размер и положение swap'файла не играет сегодня никакой роли, многие его вообще не делают. Причина проста, он почти никогда НЕ используется на десктопе.

suvolod написал:
насколько это вообще целесообразно.

моё мнение - прикольно. нужно. если делать нечего. кот яйца лижет, линуксоид ядро компиллит. Эффект в общем-то один wink

suvolod написал:
Так вот, как я понял, компиляция ядра будет эффективной, если перед этим ручками соптимизируешь ядро под свое железо, для чего надо долго лазать через menuconfig и разбираться в параметрах ядра, отключаяя все ненужное.

1) если не лезть, получится как в оригинале.
2) не столько отключать, сколько настраивать.

suvolod написал:
Но если учесть, что сейчас у меня зоопарк из 20+ ПК от целеронов с IDE-интерфейсом и 512Mb памяти до самых последних пентиумов, и надо оптимизировать ядро индивидуально под каждую из машин.. да ядро соберется нормально раза с пятого.. это-же рехнуться можно! Получается, компиляцию ядра как часть оптимизиции проще выкинуть и забыть?

ну вы можете поднять ЧСВ здесь, и у ваших коллег smile

#158433
newzenon написал:
Компиляция ядра на Debian \ Ubuntu - это неверный подход

+1

#158474

ну не надо так категорично про компиляцию...
Но скорее так: ядро компилить стоит, если есть действительно на то причины.
Например надо пропатчить ядро чтоб что-то заработало, убрать лишнее чтоб получить ускорение в 1% в лучшем случае(если на то есть причины или делать нечего), или уменьшить размер ядра(если малый носитель) - этот вариант более оптимистичен - деб-пакет падает в размере до 2 раз и более, если порезать все модули которые вам не нужны.
Но считать компиляцию ядра как основу по пользованию линукса - это чересчур.
Резон компилить есть разве что под сервер или ноутбук. У обоих более-менее стабильный набор железа на протяжении всей жизни, а внешние устройства - ну что накомпилите, то и будет работать. Тем более что для сервера не так часто надо компилить ядра ибо стабильность превыше всего...
Зачем оно надо?
Ну из простого - зачем в ядре поддержка всех типов видеокарт, если известно что в сервере или ноуте - один тип всего? Звук тоже один а в сервере даже не планируется к примеру? ТВ? вайфай для сервера? или Фибрченел для ноута? и т.д...
А сколько там ускоспециализированного железа...
Ну чисто теоретически при выборе процессора вашей конфигурации будет прирост какой-то мизерный, ну еще можно всякие аппарморы и пр. моменты безопасности порезать в надежде, что ускорится общая работа...
Но общий прирост будет мизерный, особенно учитывая мощности современных процов, а вот надежность будет падать...
Когда я компилил для целерона900 ядро я надеялся что быстрее будет работать, но не замечал особо, но для малого ссд(16гб) мне было очень полезно компилить ядро - оно меньше ставало. и 16+мб все таки какой-то плюс...

ПиСя: Главное правило инженера: если работает - не трогай!

#158558

Харитон, а зачем ядро компилить? Не проще поставить новое с реп? Тут, в ветке, и ссылка туда есть.
Заходите и забираете, какое понравится smile

#158575
Харитон написал:
(если малый носитель) - этот вариант более оптимистичен - деб-пакет падает в размере до 2 раз и более

у вас ещё остались гибкие диски? oO

Харитон написал:
Резон компилить есть разве что под сервер

глупо. смотрите - ВНЕЗАПНО находят дыру, вы всё бросаете, и СРОЧНО пересобираете своё ядро. Ага, в воскресенье, первого января в 3 часа ночи.

Харитон написал:
Тем более что для сервера не так часто надо компилить ядра ибо стабильность превыше всего...

на КАЖДУЮ дыру надо. а их достаточно часто находят.
причём СРОЧНО.

Харитон написал:
Ну из простого - зачем в ядре поддержка всех типов видеокарт, если известно что в сервере или ноуте - один тип всего?

вы не понимаете: поддержка видеокарт реализована модулями, и никто не заставляет вас включать все модули. обычно всего один модуль включен, а остальные где-то "в дистрибутиве". вам его даже качать необязательно.

Харитон написал:
Звук тоже один а в сервере даже не планируется к примеру? ТВ? вайфай для сервера? или Фибрченел для ноута? и т.д...

причём тут ядро?

Харитон написал:
оно меньше ставало. и 16+мб все таки какой-то плюс...

проще, быстрее, и меньше потерь в производительности - тупо снизить размер блока ФС до 2К. или ещё что-то вроде этого (например форматирование с ключом -m0, использование LVM и т.п.)

#158596

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

#158597

вы ядро компили? видели модули поддержки разных видеокарт? зачем оно мне надо если у меня встроенная видяха?
поддержка хвуковых карт от А до Я видели в менюконфиг? зачем оно мне надо? отключив все это ядро ументшается до двух раз...

дискеты не пользую, но ссд например бывает на нетбуках от 4Гб до 16Гб... и если раздел root ограничен, то приходится жить в этих рамках. битва идет за каждый мегабайт. и не только размер блока полезен, но и уменьшение области зарезервированной под рута и пр...

#158602
Харитон написал:
как это при чем ядро? а поддержку звука? а модули вайфая, фибрчанела?
модули могут быть как встроенные в ядро так и подгружаемые...

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

#158603
Харитон написал:
и если раздел root ограничен, то приходится жить в этих рамках. битва идет за каждый мегабайт.

простите, но это не битва, а онанизм.

#158611

Док, человек имеет на это право
не тебе его осуждать wink

#158620

drBatty,
значит Вам не приходилось биться...

Похоже тема переростает в кернелсрач, чем в полезность для топикстартера.

#158721

Харитон, доки прав. За звук у вас отвечает отдельный пакет alsa. С ядром он связан через пятое колено smile
Wi-Fi,ethernet,ADSL также управляются отдельными пакетами. (pppoe,pptp...)

Войдите или зарегистрируйтесь, чтобы ответить.