mounting fe00 on /newroot failed (rootfs on LVM2 Th boot failure)

Mateusz Korniak mateusz-lists at ant.gliwice.pl
Mon Apr 16 12:34:55 CEST 2012


On Monday 16 of April 2012, Arkadiusz Miśkiewicz wrote:
> On Monday 16 of April 2012, Arkadiusz Miśkiewicz wrote:
> > On Sunday 15 of April 2012, Lukasz Glebicki wrote:
> > > Najłatwiej było by przekonać gruba aby korzystał z /dev/grupa/wolumen
> > > lub /dev/dm-1, ale zawsze je zamienia.
> > > 
> > > pozdrawiam
> > 
> > Wrzuć jeszcze linuxrc z środka geninitrd.
> 
> W ogóle najlepiej było by przenieść dyskusję na pld-devel-en jako, że glen
> może tu pomóc w usprawnieniu tego kodu.

OK.
Here goes my linuxrc too [1].
To state problem again in english:
Boot fails:
mounting fe00 on /newroot failed 
on new Th chroot installed system:
rootfs is on
  ACTIVE            '/dev/vg_single_disk/root' [4.87 GiB] inherit
on simple PV:
  PV /dev/hdb5   VG vg_single_disk   lvm2 [4.88 GiB / 4.00 MiB free]
  Total: 1 [4.88 GiB] / in use: 1 [4.88 GiB] / in no VG: 0 [0   ]

kernel-3.3.1-2.i686

During initrd generation I have [2], during failing boot [3]
Booted using lilo:
root=/dev/vg_single_disk/root


[2]
cat /proc/partitions
major minor  #blocks  name

   3        0   78150744 hda
   3        1     216846 hda1
   3        2   20482875 hda2
   3        3      72292 hda3
   3        4          1 hda4
   3        5     136521 hda5
   3        6    9775521 hda6
   3        7   46941898 hda7
   3        8     522081 hda8
   3       64   78150744 hdb
   3       65     128488 hdb1
   3       66      64260 hdb2
   3       67   10241437 hdb3
   3       68          1 hdb4
   3       69    5116671 hdb5
   3       70    9775521 hdb6
   3       71    9775521 hdb7
   3       72    9775521 hdb8
   3       73   33270583 hdb9
 254        0    5107712 dm-0
   9        6    9775360 md6

[3]:
http://dug.im/3f52a



[1]:
#!/bin/sh
# initrd generated by:
# $Revision: 12530 $ $Date:: 2012-03-30 14:41:13 +0000 #$

[ -f /proc/cmdline ] || mount -t proc none /proc
# builtin defaults from geninitrd
ROOT=/dev/vg_single_disk/root
ROOTFS=ext4
read CMDLINE < /proc/cmdline

for arg in $CMDLINE; do
if [ "${arg}" = "debuginitrd" ]; then
DEBUGINITRD=yes
fi
if [ "${arg##debuginitrd=}" != "${arg}" ]; then
DEBUGINITRD=${arg##debuginitrd=}
fi
if [ "${arg##root=}" != "${arg}" ]; then
ROOT=${arg##root=}
fi
if [ "${arg##rootfsflags=}" != "${arg}" ]; then
ROOTFSFLAGS=${arg##rootfsflags=}
fi
if [ "${arg##init=}" != "${arg}" ]; then
INIT=${arg##init=}
fi
done

# make debugshell() invoke subshell if $DEBUGINITRD=sh
if [ "$DEBUGINITRD" = "sh" ]; then
debugshell() {
echo "debug shell disabled by /etc/sysconfig/system: RUN_SULOGIN_ON_ERR 
setting"
}
else
debugshell() {
:
}
fi

if [ "$DEBUGINITRD" ]; then
set -x
fi
insmod /lib/modules/3.3.1-2/kernel/drivers/usb/usb-common.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/usb/core/usbcore.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/usb/host/ehci-hcd.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/mmc/core/mmc_core.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/pcmcia/pcmcia_core.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/pcmcia/pcmcia.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/ssb/ssb.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/usb/host/ohci-hcd.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/hid/hid.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/hid/usbhid/usbhid.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/ide/ide-core.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/ide/atiixp.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/ide/ide-gd_mod.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/md/dm-mod.ko 
insmod /lib/modules/3.3.1-2/kernel/lib/crc16.ko 
insmod /lib/modules/3.3.1-2/kernel/fs/mbcache.ko 
insmod /lib/modules/3.3.1-2/kernel/fs/jbd2/jbd2.ko 
insmod /lib/modules/3.3.1-2/kernel/fs/ext4/ext4.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/usb/host/uhci-hcd.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/i2c/i2c-core.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/hwmon/hwmon.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/i2c/algos/i2c-algo-bit.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/char/agp/agpgart.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/gpu/drm/drm.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/gpu/drm/ttm/ttm.ko 
insmod /lib/modules/3.3.1-2/kernel/drivers/gpu/drm/drm_kms_helper.ko 
echo -n /lib/firmware/firmware.sh > /proc/sys/kernel/hotplug
mount -t sysfs none /sys
insmod /lib/modules/3.3.1-2/kernel/drivers/gpu/drm/radeon/radeon.ko 
: 'Creating /dev'
if ! mount -t devtmpfs -o mode=0755,nosuid devtmpfs /dev > /dev/null 2>&1; 
then
mount -o mode=0755,nosuid -t tmpfs tmpfs /dev
mknod /dev/console c 5 1
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
mknod /dev/random c 1 8
mknod /dev/snapshot c 10 231
mknod /dev/urandom c 1 9
mknod /dev/ptmx c 5 2
mknod /dev/kmsg c 1 11
fi
mkdir /dev/pts
mkdir /dev/shm
: 'Making device nodes'
cat /proc/partitions | (
# ignore first two lines: header, empty line
read b; read b

while read major minor blocks dev rest; do
node=/dev/$dev
mkdir -p ${node%/*}
[ -e $node ] || mknod $node b $major $minor
done
)
# if built with blkid change ROOT=LABEL=something into ROOT=/dev/somethingelse 
-
# parsed by blkid
if [ "${ROOT##LABEL=}" != "${ROOT}" -o "${ROOT##UUID=}" != "${ROOT}" ]; then
ROOT="$(/bin/blkid -t $ROOT -o device -l)"
fi
cat /etc/lvm.conf > /tmp/lvm.conf
ROOTDEV=/dev/vg_single_disk/root
LVM_ROOTVG="vg_single_disk"
LVM_SUSPENDVG=""
# parse rootdev from kernel commandline if it begins with /
case "$ROOT" in
/*)

# rewrite:
        # /dev/mapper/sys-rootfs -> /dev/sys/rootfs
# /dev/mapper/blodnatt-blah--bleh -> /dev/blodnatt/blah-bleh
# /dev/mapper/vg--meaw-root -> /dev/vg-meaw/root
case "$ROOT" in
/dev/mapper/*-*)
# change "--" to / (as "/" is impossible in LV name)
local dev=$(awk -vdev="${ROOT#/dev/mapper/}" 'BEGIN{gsub(/--/, "/", dev); 
print dev}')
local VG=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[1]); 
print v[1]}')
local LV=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[2]); 
print v[2]}')
ROOT=/dev/$VG/$LV
;;
esac

if [ "$ROOT" != "$ROOTDEV" ]; then
ROOTDEV=$ROOT

echo "LVM: Using 'root=$ROOTDEV' from kernel commandline"
local tmp=${ROOTDEV#/dev/}
if [ "$tmp" != "$ROOTDEV" ]; then
LVM_ROOTVG=${tmp%/*}
echo "LVM: Using Volume Group '$LVM_ROOTVG' for rootfs"
fi
fi
;;
esac

# skip duplicate VG
if [ "$LVM_SUSPENDVG" = "$LVM_ROOTVG" ]; then
LVM_VGVOLUMES="$LVM_ROOTVG"
else
LVM_VGVOLUMES="$LVM_SUSPENDVG $LVM_ROOTVG"
fi

# disable noise from LVM accessing devices that aren't ready.
read printk < /proc/sys/kernel/printk
if [ ! "$DEBUGINITRD" ]; then
echo 0 > /proc/sys/kernel/printk
fi

export LVM_SYSTEM_DIR=/tmp
: 'Scanning for Volume Groups'
lvm.static vgscan --mknodes --ignorelockingfailure 2>/dev/null

: 'Activating Volume Groups'
for vol in $LVM_VGVOLUMES; do
lvm.static vgchange --ignorelockingfailure -a y $vol 2>/dev/null
done

echo "$printk" > /proc/sys/kernel/printk

# Find out major/minor
attrs="$(lvm.static lvdisplay --ignorelockingfailure -c $ROOTDEV 2>/dev/null)"
if [ "$attrs" ]; then
majmin="${attrs#*$ROOTDEV*:*:*:*:*:*:*:*:*:*:*:*}"
if [ "$majmin" != "$attrs" ]; then
major="${majmin%:*}"
minor="${majmin#*:}"
fi
fi

if [ "$major" -a "$minor" ]; then
# Pass it to kernel
echo $((256 * $major + $minor)) > /proc/sys/kernel/real-root-dev
fi

unset LVM_SYSTEM_DIR
if [ "${ROOT##/dev/}" != "${ROOT}" ]; then
rootnr="$(busybox awk -v rootnode="${ROOT##/dev/}" '$4 == rootnode { print 256 
* $1 + $2 }' /proc/partitions)"
# fallback to ls
if [ -z "$rootnr" ]; then
rootnr="$(busybox ls -lL ${ROOT} | busybox awk '{if (/^b/) { print 256 * $3 + 
$4; }}')"
fi
if [ -n "$rootnr" ]; then
echo "$rootnr" > /proc/sys/kernel/real-root-dev
fi
fi
ifs=$IFS
IFS="
"
for i in $(export -p); do
i=${i#declare -x } # ksh/bash
i=${i#export } # busybox

case "$i" in
*=*)
: ;;
*)
continue ;;
esac

i=${i%%=*}

[ -z "$i" ] && continue

case "$i" in
ROOT|PATH|HOME|TERM)
:
;;
*)
unset $i
;;
esac
done
IFS=$ifs
                busybox cat /proc/partitions
                busybox ls -la /dev/vg_single_disk/root
                busybox ls -la /dev/mapper/vg_single_disk-root
device=
eval "$(busybox awk -v c="$ROOT" '
BEGIN {
num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
num_pattern = "[0-9a-f]" num_pattern_short;
dev_pattern = "[hms][a-z][a-z]([0-9])+";
partition = "";
min = -1; maj = -1;

sub("^0x", "", c);
if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
if (c ~ "^" num_pattern  "$") {
maj = sprintf("%d",substr(c,1,2));
min = sprintf("%d",substr(c,3));
}
if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
if (c ~ "^" dev_pattern "$") partition = c;
}

partition && $4 == partition { maj = $1; min = $2; }
$1 == maj && $2 == min { partition = $4; }

END {
if (maj >= 0 && min >= 0) {
printf("maj=%s; min=%s;\n", maj, min);
}
if (partition) {
printf("device=/dev/%s;\n", partition);
}
}
' /proc/partitions)"

if [ -z "$device" ]; then
device=$ROOT
fi

if [ "$device" -a ! -b $device ]; then
mknod $device b $maj $min
fi

[ -n "$ROOTFSFLAGS" ] && ROOTFSFLAGS="-o $ROOTFSFLAGS"

mount -t $ROOTFS -r $device $ROOTFSFLAGS /newroot || echo "Mount of rootfs 
failed."
init=$INIT
if [ -z "$init" -o ! -x "/newroot$init" ]; then
init=/sbin/init
fi
: Last shell before umounting all and giving control over to real init.
debugshell
umount /dev
umount /sys
umount /proc
[ ! -e /newroot/dev/console ] && mknod -m 660 /newroot/dev/console c 5 1
exec switch_root /newroot $init ${1:+"$@"}

echo "Error! initramfs should not reach this place."
echo "It probably means you've got old version of busybox, with broken"
echo "initramfs support. Trying to boot anyway, but won't promise anything."

exec chroot /newroot $init ${1:+"$@"}

echo "Failed to chroot!"
debugshell



-- 
Mateusz Korniak
"(...) mam brata - poważny, domator, liczykrupa, hipokryta, pobożniś,
 	krótko mówiąc - podpora społeczeństwa."
				Nikos Kazantzakis - "Grek Zorba"

-- 
Mateusz Korniak


More information about the pld-devel-en mailing list