LINUX.ORG.RU
ФорумAdmin

Помогите восстановить загрузчик Lilo

 , ,


1

4

При попытке копирования hdd с Linux как-то повредил исходный hdd. При включении комп выдаёт полный экран 01 01 01 и зависает. Я полагаю что-то с загрузчиком. При монтировании данного hdd в другой рабочей системе никаких изменений не вижу. Файл lilo.conf в запортаченой системе такой же как и в рабочей. На диска два раздела swap и linux (82 и 83). Загрузчик Lilo. Пните, пжалуста, куда копать.

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

А можно подробней для чайника. Гружу другую рабочую систему, примонтирую поломатую, делаю в неё chroot, как установить lilo?

seroga_sod
() автор топика

Подключаете диск к рабочей системе.

Грузитесь в рабочую систему.

Выполняете от рута

# mkdir /r
# mount /dev/sdb1 /r  # где там у вас корень
# for d in dev proc sys; do mkdir /r/$d; mount --bind /$d /r/$d; done
# chroot /r

Бэкапите lilo.conf (снаружи это /r/etc/lilo.conf, изнутри chroot-а это /etc/lilo.conf), правите строку boot, чтобы вместо /dev/sda там был указан ваш диск, как он виден в этой системе, например,
boot = /dev/sdb
Строки image, append, addappend не трогаете.
Записываете загрузчик на место:
# lilo

Возвращаете на место бэкап lilo.conf.
Выключаете машину, ставите диск на место, грузитесь.

bormant ★★★★★
()

01 01 с самого, вообще начала?, тоды енто у тебя самый приглючнейший контроллер на сист платке, и дистр к этому вообще никаким боком.

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

Спасибо. Сделал как написали, только mcdir он мне сделать не дал, эти каталоги там уже были. Теперь другой затык выскакивает: VFS: Cannot root device 08:02 Kernel panic: VFS: Unable to mount root fs on 08:02

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

Kernel panic: VFS: Unable to mount root fs on 08:02

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

Возможные причины:
1) такого устройства (08:0) в железе вообще нет (старт машины без HDD вовсе, поскольку это первый HDD)
2) такое устройство (08:0) не опознано ядром (для контроллера не оказалось в ядре драйвера, вкомпилированного или загруженного из initrd)
3) на устройстве нет такого раздела (08:02)
4) файловая система раздела не опознана ядром (для ФС не оказалось в ядре драйвера вкомпилированного или загруженного из initrd)

Используя LILO, нужно понимать, как он работает.
По команде lilo формируется тело загрузчика и записывается на место (куда указано в boot= или параметром комстроки), поэтому это место должно быть актуальным на момент вызова lilo. При формировании загрузчика вычисляются номера секторов, занятых ядром (image=) и образом начальной загрузки (initrd=), и записываются в сформированный загрузчик, поэтому эти данные также должны быть актуальны на момент вызова lilo.
Записанный код будет выполняться при перезагрузке машины (код в MBR первого (или выбранного) диска будет загружен загрузчиком BIOS, код в BR раздела — каким-либо другим загрузчиком). Получив управление, код загрузчика LILO загрузит по номерам секторов в память ядро, initrd (если указан), сформирует блок параметров ядра и передаст ядру управление. Поэтому все параметры ядра (append=, addappend=, root=, а для initrd также корень, заданный ключом -r команды mkinitrd) должны быть актуальны на момент выполнения кода загрузчика.

Поэтому проще всего ремонтировать загрузчик LILO на той машине, где он будет грузить систему, поскольку не нужно учитывать те самые нюансы от смены номеров устройств.

О какой системе идет речь? Обязателен ли в ней initrd для монтирования корня (ядро не содержит вкомпилированного драйвера коневой ФС)?

Если речь идет про Slackware, то там есть дистрибутивные средства, упрощающие процесс восстановления LILO без перестановки дисков в другие машины. Описывал не раз, например, там:
http://www.slackware.ru/forum/viewtopic.php?t=543#p3289
http://www.slackware.ru/forum/viewtopic.php?f=32&t=1045#p7538
Поиском по тамошнему форуму можно найти еще...

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

выше при загрузке написал: Partition check: hda: hda1 hda2 ещё выше писал: hda: модель жёсткого, ATA DISK Drive hda1 у меня swap hda2 корневой активный раздел

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

подключен hdd в тот же ide в котором был всегда

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

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

Поясню вопрос. Как уже писал выше, LILO запоминает в загрузчике номера секторов с ядром на момент вызова команды lilo. Если обновить файл ядра на диске (данные от старого файла обычно остаются лежать на прежнем месте), но не выполнить lilo, загрузчик продолжит грузить прежнее ядро, даже если файл ядра был удален (до тех пор, пока данные в секторах не будут перезаписаны чем-то еще).

Какая ФС на корне на самом деле? Пусть на другой машине ваш корень смонтирован в /r. Хотелось бы увидеть результат выполнения:

# ls -l /r/boot/image/
# grep -v '^$\|^#' /r/etc/lilo.conf
# cat /r/etc/*release /r/etc/*version

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

Гружусь с флэшки.

Жёсткий в том ide где должен быть.

делаю:

sudo su

mkdir /r

fdisk -l

выдаёт, что жёсткий определился как sda, два раздела sda1 - Linux swap, sda2 - Linux

монтирую:

mount /dev/sda2 /r

for d in dev proc sys; do mount --bind /$d /r/$d; done

chroot /r

всё корректно, никаких ошибок.

изменяю в /r/etc/lilo.conf hda на sda

делаю lilo

выдаёт:

Warning: LBA32 addressing assumed

Added linux *

Added memtst

изменяю обратно в /r/etc/lilo.conf sda на hda

выхожу exit и reboot

жёсткий диск в той же машине, на том же месте что и при выполнении lilo, при загрузке определяется.

В итоге:

hda: hda1 hda2

Cannot root device 08:02

Kernel panic: VFS: Unable to mount root fs on 08:02

ls -l /r/boot/image/ :

-rw-r--r-- 1 root root ... 2.20.cfg

-rwxr-xr-x 1 root root ... linux

-rwxr-xr-x 1 root root ... memtst

-rw-r--r-- 1 root root ... setup.diff

lilo.conf :

boot = /dev/hda root = /dev/hda2 read-only #vga = 0x305 delay = 30

image = /boot/image/linux append = «mem=-8M» label = linux

image = /boot/image/memtst label = memtst

release version ни нашёл

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

Резюме:
 — загрузчик установлен успешно
 — загрузчик успешно загружает ядро и передает ему управление
 — ядро успешно выполняет инициализацию до момента, когда приходит время смонтировать корневой раздел и продолжить загрузку
 — ядру указано монтировать в качестве корня 08:02
 — ядру смонтировать 08:02 не удается

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

Разместите где-то фотку экрана с паникой и приложите ссылку.

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

По фоткам.

Грузится довольно старое ядро Linux, версии 2.2.
Сильно смущает наличие диагностики:

PCI_IDE: unknown IDE controller on PCI bus 00 device fa VID 8086 PID 24d1
Это Intel PIIX/ICH SATA, поддержки которого в ядре нет.
Было бы неплохо и убежавшую за кадр диагностику сфотографировать.

Перенесли старую систему на новое железо и пытаетесь запустить? Если да, почему не сказать об этом в самом начале? В том числе описать, как переносили.

Тем не менее, подозреваю, что hda на известном контроллере, раз прочиталась таблица разделов (но нельзя исключить, что ядру это только показалось, что оно умеет работать с контроллером правильно, нужно обязательно посмотреть вывод диагностики).

Какая файловая система на hda2? Вы уверены, что Linux-2.2 ее знает и поддержка есть в вашем ядре? Должна быть скорее всего ext2. Ни ext3, ни ext4 в Linux-2.2 не могло быть.

Предоставляйте больше информации. В конце концов это вам нужно получить результат.

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

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

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

Загрузчик свою функцию выполняет на ура — ядро загружено и запущено.

Ядро не может смонтировать файловую систему на втором разделе первого диска. Причин может быть много, выше уже перечислял. С учетом старого ядра к ним можно добавить, что во времена Linux-2.2 не было больших дисков, и это может также влиять на ситуацию.

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

1) такого устройства (08:0) в железе вообще нет (старт машины без HDD вовсе, поскольку это первый HDD)

диск есть, при загрузке она его даже видит, что-то там про него пишет 2) такое устройство (08:0) не опознано ядром (для контроллера не оказалось в ядре драйвера, вкомпилированного или загруженного из initrd) как это приоверить?

3) на устройстве нет такого раздела (08:02) ну как нет? fdisk -l мне показывает два раздела swap и linux

4) файловая система раздела не опознана ядром (для ФС не оказалось в ядре драйвера вкомпилированного или загруженного из initrd) как это проверить?

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

3) на устройстве нет такого раздела (08:02)

ну как нет? fdisk -l мне показывает два раздела swap и linux

Вы уверены, что в том, что показано как

Partition check:
 hda: hda1 hda2
hda2 является разделом 08:02 с точки зрения ядра? Что диагностика ide0 at ... относится именно к этому HDD? Для primary master это должно быть так. А вот с 1 или с 0 (как GRUB-legacy) ядро 2.2 считало разделы я сейчас точно не вспомню, но это легко проверить. при загрузке нажать Tab, дописать к имени ядра root=801 или root=/dev/hda2 и посмотреть, загрузится ли.

Сделайте копию оригинала, проверьте, какая ФС на разделе, проверьте саму ФС.

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

исправный клон этой системы работающий на таком-же железе

проверьте и сравните, как настроены в BIOS контроллеры IDE.

Сравните убежавший за экран вывод про первый контроллер, который VID=8086 PID=24db.

В конце концов, сделайте клон всего диска через dd (не ошибитесь с параметрами!!!).

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

fdisk -l смотрю при загрузке с usb hdd при этом определяется как sda (sda1 и sda2) при загрузке с hdd пишет

Partition check: hda: hda1 hda2

ФС проверил - etx2

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

ФС проверил - etx2

Как проверяли?
Что сказал про нее tune2fs -l?
Что сказал про нее fsck?

Tab при загрузке не работает

добавить в /etc/lilo.conf строчку prompt, переустановить lilo.

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

hda2 является разделом 08:02 с точки зрения ядра?

как это проверить?

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

mount | grep «^/dev»

Это не проверка ФС. Хотя, если драйвер ext4 отказывается монтировать что-либо отличное от ext2 в режиме ext2, то с натяжкой может и подойти.

Tab при загрузке не работает

добавить в /etc/lilo.conf строчку prompt, переустановить lilo.
Либо при загрузке машины до активации загрузчика LILO зажать Shift.

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

извиняюсь за тупой вопрос: он мне выдал boot: что я должен написать, сделать?

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

дописать к имени ядра root=801 или root=/dev/hda2

как это сделать?

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

fsck

fsck from util-linux 2.21.2

tune2fs -l /dev/sda2

много чего написал, на экран не влезло, но в том что влезло про тип ФС ничего не вижу

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

всё пошло, в загруженной системе ещё раз lilo переустановил стала грузиться сама без параметров. СПАСИБО БОЛЬШОЕ завтра опять попробую её забэкапить...

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

всё пошло, в загруженной системе ещё раз lilo переустановил стала грузиться сама без параметров.

Значит lilo в современной системе передавал параметр корневого раздела ядру все же чуточку иначе, чем это делалось во времена linux-2.2.

Возвращаясь к проверкам, имелось в виду
 — проверка целостности ФС:
# fsck /dev/sda2
 — параметры ФС, прежде всего Filesystem features, Filesystem state
# tune2fs -l /dev/sda2

Но раз грузится, то всё это отношения к делу не имеет.

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

Что то у меня опять затык.

Пытаюсь сделать копию выше восстановленной системы.

Как делаю:

1. Подключил второй жёсткий ко второму ide.

2. Загрузился с флэшки.

3. Разметил 2-ой hdd так же как исходник 1 раздел swap(82), 2-ой - Linux(83). Не соответствуют только размеры (он поменьше).

4. Отформатировал 2-ой раздел в ext2.

5. mkdir /old; mkdir /new

6. смонтировал mount /dev/hda2 /old; mount /dev/sda2 /new

7. cp -rav /old/* /new

8. сделал chroot в new

9. подправил lilo.conf

10. сделал lilo

11. подправил обратно lilo.conf

12. Выключился

13. Воткнул новый hdd на место исходного

14. Гружусь и опять тот же затык VFS: Unable to mount root fs on 08:02

15. Ручной ввод boot параметра не помогает

Чего не так делаю?

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

Грузишься с LiveCD, монтируешь старый и новый диски, rsync'аешь старый в новый.

НИКОГДА БОЛЬШЕ НЕ КОПИРУЕШЬ РАБОЧУЮ СИСТЕМУ не прочитав man rsync!

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

да я как бы не рабочую копировал, я с live-флэшки грузился

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

нет у меня rsync.

А что rsync от cp чем-то глобально отличается?

Я понимаю ещё dd бы предложили, но у меня новый диск в 2 раза меньше исходника, а dd делает полное побитное копирование

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

Чего не так делаю?
2. Загрузился с флэшки.
6. смонтировал mount /dev/hda2 /old; mount /dev/sda2 /new

Вот тут в п.6, скорее всего, глупость написана. Возможно опечатка на форуме, но гадать не буду.
У вас там под LiveCD точно один hda2, а другой sda?

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

да очепятался, извиняюсь, sda и sdb

6. смонтировал mount /dev/sdb2 /old; mount /dev/sda2 /new

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

Ручной ввод boot параметра не помогает

Почему boot, нужно же root задавать.

Относительно всего ранее описанного. Lilo преобразует параметр ″root=″ в числа Major,Minor. Для hda2 это долно быть 3,2, а 8,2 это sda2 (во всяком случае раньше так было). Если в той системе, где в chroot запускаете lilo устройству /dev/hda2 соответствует 8,2, то ядру предаётся неправильный параметр. Можно прямо в lilo.conf писать:

append=«root=/dev/hda2»

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

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

И ещё, LILO привязывается к BIOS идентификатору диска, поэтому если в момент установки lilo диск был вторым, а при загрузке он стал первым (по другому bios не загрузит), то LILO не загрузится. Там в конфиге нужно указывать:

disk = /dev/sda # то же, что в boot=
  bios = 0x80

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

Во, что-то новое выдал:

http://my-files.ru/87xmg2#codes

Расшифруйте, пжалуста, чего он мне понаписал.

у меня такое чувство, что со старой системой надо из под старого liveCD работать. Завтра буду искать live-старушку.

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

Что там расшифровывать:

EXT2-fs: unsupported inode size: 256

Файловую систему лучше создавать старыми файловыми утилитами, причём не обязательно с LiveCD, вполне можно загрузиться со старого винта (если там есть mke2fs). Можно, конечно, и новыми, но нужно указывать размер инода 128 байт и, возможно, убирать некоторые флаги.

Копировать можно загрузившись с современного LiveCD, можно и прямо со старого диска, только перевести файловую систему в RO ″mount -o remount,ro /″, «поубивав» для этого практически все процессы.

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

Всё, победил. Создал ФС на новом hdd в старой ОС и по выше описанному алгоритму всё получилось. Попробую теперь на флэху её перенести.

seroga_sod
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.