[sisyphus] LVM в initrd для ядра 2.6.14-std26-up-alt5
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Пт Мар 10 12:58:58 MSK 2006
On Fri, Mar 10, 2006 at 12:14:04PM +0300, Eugene Prokopiev wrote:
> Половину своей задачи я решил: в initrd все инициализируется правильно,
> но вот переключиться из initrd в настоящую систему я не могу.
>
> Что я сейчас имею: ALM 2.4 + updates + некоторые backports + kernel
> 2.6.14-std26-up-alt5 из Сизифа
...
> Содержимое initroot (взято из оригинального initrd, сгенерированного
> посредством mkinitrd):
>
> #!/bin/sh
>
> EncodeDev()
> {
> echo $(( ($2 & 0xff) | ($1 << 8) | (($2 & ~0xff) << 12) ))
> }
>
> read cmdline </proc/cmdline
> cmdline=" $cmdline "
> if test -z "${cmdline##*[ ]root=*}" ; then
> root="${cmdline##*[ ]root=}"
> root="${root%%[ ]*}"
> if test -z "${root##/dev/*}" ; then
> root="${root#/dev/}"
> (
> read ignored
> read ignored
> while read major minor size name ignored; do
> if test "$name" = "$root" ; then
> EncodeDev $major $minor
> >/proc/sys/kernel/real-root-dev
> break
> fi
> done
> ) </proc/partitions
>
> fi
> fi
Этот кусок - костыль для ядер 2.6.x, которые разучились находить
major/minor по имени устройства из root=... в случае, когда
соответствующий драйвер вынесен в модуль.
> В итоге я получаю:
>
> VFS: Cannot open root devoce "3a00" or unknown-block(58,0)
Однако в данном случае даже этот костыль не сработал, что неудивительно.
Major 58 - это устройства LVM1, использовавшиеся в ядрах 2.4.x; скорее
всего, его подцепил lilo при установке под 2.4.x (lilo передаёт root=... в
виде числа, а код разбора root=... в ядре и в приведённом куске не нашёл
ничего лучше).
LVM2 работает через dm, у которого major/minor динамические, и их даже
нельзя найти в /proc/partitions (точнее, они там видны, но под совершенно
бесполезными именами).
> Please append a correct "root" boot option
> Kernel panic - not syncing : VFS : Unable to mount root fs on unknown
> block(58,0)
>
> Если вместо initroot в linuxrc вписать вызов /bin/bash, то дальше руками
> я смогу смонтировать свои lvm-разделы. Точно также их монтирует штатное
> ядро 2.4.26-std-up-alt13
>
> Что делать дальше?
Если оставлять старый механизм работы с initrd, нужно определить
major/minor нужного устройства в /dev, созданного утилитами lvm, и
записать его в /proc/sys/kernel/real-root-dev.
Можно перейти на новый механизм обработки initrd (root=/dev/ram0, linuxrc
запускается как init (pid==1) и должен смонтировать реальный root, после
чего выполнить pivot_root туда и exec /sbin/init).
Либо перейти на initramfs (примерно то же самое, но вместо pivot_root
выполняется chroot, и хорошо бы зачистить за собой initramfs, чтобы не
занимать память).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20060310/5c5c1de3/attachment-0003.bin>
Подробная информация о списке рассылки Sisyphus