LINUX.ORG.RU

Перенос системы с hda на sdа с восстановлением загрузчика lilo

 , ,


0

1

Доброго дня. Такая вот задача: Нужно перекинуть систему с старого железа на новое. Раньше диск был hdb. Сейчас нужно запустить линукс с sdа.

Дистрибутив alt-linux допотопной сборки.

Собственно, все уже на новом диске, диск оперделяется как sdb (на sda стоит образ Убунты для восстановления).

Образ системы скопирован с помощью dd.

что делаю:

  1. Загружаюсь с Убунты
  2. Монтирую sdb /mnt/
  3. Меняю в lilo.conf hda на sdb, hda1 на sdb1.
  4. Редактирую fstab. Тут тоже меняю имена дисков. Они у меня в виде hda/sdb без Id
  5. Далее запускаю lilo для компиляции загрузчика

Вот тут у меня проблема. Не понимаю принципа, как правильно сказать #lilo, что диск, на который нужно писать загрузчик должен быть /dev/sdb

Пробую так, но что то не заводится(

root@cat-desktop:/r# chroot /r

[root@cat-desktop /]# lilo

без chroot команда lilo компилит загрузчик с убунты(

/proc/devices: fopen failed: No such file or directory

/proc/devices: fopen failed: No such file or directory

Failed to set up list of device-mapper major numbers

Warning: '/proc/partitions' does not exist, disk scan bypassed

Added ARK

Fatal: Default image doesn't exist.

ARK имя загрузчика в lilo.conf

PS: почему в LORCODE не работает спойлер?( и почему при копировании кода, он его вставляет в одну строчку? приходится ставить переносы.

Раньше диск был hdb. Сейчас нужно запустить линукс с sdа.

Заставило меня открыть календарь и проверить десятилетие.

А зачем lilo, может в «убунтовский» grub добавить строчку для системы?

vvn_black ★★★★★ ()
Последнее исправление: vvn_black (всего исправлений: 1)

Нужно в chroot окружение смонтировать /proc/ и /dev/ (через --bind), как обычно для всех прочих chroot'ов.

что диск, на который нужно писать загрузчик должен быть /dev/sdb

Опция ″boot=″. Если вы захотите установить lilo на другой диск без chroot'а, то нужно правильно указывать все пути к файлам — ″map=″ и пр.

И, если вы грузитесь с одного винта, а загрузчик нужно установить на другой, то нужно прописывать опцию bios:

disk=/dev/sdb
    bios=0x80

Они у меня в виде hda/sdb без Id

А вот это может стать проблемой. При загрузке с того диска, который сейчас sdb, он может стать sda. Или вобще hda, если старое ядро.

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

Дело в том, что у нас много железок, для которых нужно периодически менять накопители с системой, по этому использовать ID весьма проблематично. Раньше вместо накопителя использовались CompactFlash. Сейчас шаманю с SSD и HDD

В Lilo.conf все прописано. А вот дальше проблема с правильной компиляцией.

Можно поподробней на счет этого:

Если вы захотите установить lilo на другой диск без chroot'а, то нужно правильно указывать все пути к файлам — ″map=″ и пр.

Дело в том, что я не знаю, как будет вести себя железо, если я заменю lilo на grub, тем более знаний у меня ниже нижнего.

Я уже столько перечитал статей на счет этого, что в голове все перемешалось.

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

VFS: Cannot open root device "301" or unknown-block(3,1)
Please append a correct "root"=boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(3,1)
Далее перезагрузка(

из этого я понял, что лило не скомпилировал нормальный путь к sdb1

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

/mnt/etc/lilo.conf

disk=/dev/sdb
bios=0x80

compact        # faster, but won't work on all systems.
boot=/dev/sdb
#install=/boot/boot.b
#install=/boot/boot-bmp.b
#message=/boot/splash/message
prompt
delay=10
timeout=10
#default=HDD
default=Flash

vga=normal

# 640x480 (64k)
#vga=0x0311

image=/boot/vmlinuz-2.6.12-std26-up-alt10
        initrd=/boot/initrd-2.6.12-std26-up-alt10.img
        label=l-start
        root=/dev/sdb1
        read-only
        optional
        append="panic=5 splash=silent rootflags=data=journal"

#image=/boot/vmlinuz-2.6.12-std26-up-alt10
#       initrd=/boot/initrd-2.6.12-std26-up-alt10.img
#       label=Flash
#       root=/dev/hdc1
#       read-only
#       optional
#       append="panic=5 splash=silent rootflags=data=journal"

fstab

proc       /proc           proc    gid=19                  0 0
devpts     /dev/pts        devpts  gid=5,mode=620          0 0
tmpfs      /tmp            tmpfs   size=5M                 0 0
/dev/sdb1  /ext3           data=journal                    1 1
/dev/sdb5  /var/local/rw   ext3    data=journal            0 0
#/dev/sdb6      swap    swap    defaults                   0 0

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

Please append a correct «root»=boot option

В командной строке загрузчика нужно указать root=/dev/XXX, а что ставить вместо XXX нужно разобраться. Не помню как называлась эта опция, rootdelay, что-ли. Указываете её в командной строке загрузчика и число побольше, тогда будет пауза перед монтированием корневой ФС, за это время можно понажимать Shift+PgUp и почитать вывод ядра — какие устройства (жёсткие диски) оно нашло.

из этого я понял, что лило не скомпилировал нормальный путь к sdb1

Ну, после того как первый раз хоть как-то загрузитесь (с ручным указанием root=) отредактируете lilo.conf ещё раз и запустите снова. Я не помню точно как ядро ищёт корневую ФС, возможно, что lilo прописывает block(8,17), но такого устройства у ядра нет и block(3,1) вылазит как последний вариант — значение опредлённое при компиляции ядра.

Можно поподробней на счет этого:

lilo пишет себя в boot-сектор и использует некоторые файлы из /boot. Чтобы были нужные файлы, либо ″lilo -r /mnt″, либо ″lilo -C /mnt/etc/lilo.conf-mnt″. А в файле /mnt/etc/lilo.conf-mnt прописывать: map=/mnt/etc/boot/map и т.д. для всех параметров из man'а, касающихся файлов.

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

Это значит, что при загрузке ядро не видит того раздела, что указан в lilo.conf в «root =» для загрузки без initrd, либо того, что указан корнем внутри initrd.
Причин может быть несколько:
1) ядро загружаемой системы видит устройство не там, кде его видит ядро Ubuntu,
2) ядро загружаемой системы не видит устройство к моменту монтирования корня, например, устройство не готово — не успело инициализироваться ядром, см. rootdelay, rootwait. Причем, если загрузка с initrd, то указывать их надо там, где формируется initrd, а не в «image =».

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

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

mount /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
чрутимся в примонтированный раздел
chroot /mnt /bin/bash
инсталим lilo
/sbin/lilo
размонтируемся
umount /mnt/proc
umount /mnt/sys
umount /mnt/dev
umount /mnt/
reboot

Но, снова при загрузке пишет VFS: Cannot open root device «801» (раньше было 301) Почитал в интернетах. Пишут, что проблема в отсутствии поддержки Sata на уровне ядра. Возможно ли такое? http://www.gentoo.ru/node/4199

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

Безвыходная ситуация, т.к. раньше использовали промышленные компы Advantech ARK5260 с накопителем Compact Flash(hda), их сняли с производства, теперь поставляются новые только с интерфейсом SATA. Из-за этого проблемы по ремонту оборудования, т.к. эти ARKшки полное говно(выгорают порты и т.п.).

Вот сижу на карантине и ковыряюсь((

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

Я вам написал, что сначала нужно понять, какие устройства видит ядро, про rootdelay написал. Но, всё что я писал про командную строку загрузчика вы, похоже, не поняли, и проигнорировали.

Похоже, у вас действительно очень мало знаний. Лучше наймите админа. Пусть он решает/пробует, что правильнее — новое ядро в старый дистриубтив, новый дистрибутив + chroot для существующего софта или виртуальная машина. Это при условии, что 2.6.12 действительно не знает имеющийся SATA контроллер. Так во времена 2.6 уже был SATA.

mky ★★★★★ ()
Ответ на: комментарий от goodcat
  • Перечитать внимательно man lilo.conf и связанные с ним маны.
  • Использовать другой загрузчик.
  • Проверить правильность initrd.
  • Пересобрать ядро (хотя вряд ли затачивали ядро под конкретное оборудование, но всякое бывает).
Mixa ()
Последнее исправление: Mixa (всего исправлений: 1)