On Tuesday 04 September 2007, maximilian attems wrote:
> second initramfs-tools does _not_ shipp kpartx.
> third the hooks to add kpartx are in multipath-tools-initramfs
> thus reassigning.
> fourth you didn't paste the actual error message.

The issue is seen during boot in initrd and can't be captured at that stage. 
I'd have to do serial console redirection on my laptop to get the error and 
I'm a bit lazy to get the exact error messages. :-)

Since, I've already worked on this issue (at work), I can instead explain it.

Here's where the problem happens.

maybe_break mount
log_begin_msg "Mounting root file system..."
. /scripts/${BOOT}
parse_numeric ${ROOT}
mountroot
log_end_msg

In initrd's init, when the flow reaches here, it tries to mount the root 
device to /root. This is where it fails because the root device is said to be 
busy. That's the error message you'll get even if you ask me to take a 
picture of it. There's no additional message apart from it.

Root-causing it earlier, I tried to figure out if there was any process 
holding the root device busy. But that wasn't the case. Both, lsof and fuser 
showed no process holding the root device.


In SLES, this is just a small part of how root device is handled in /init of 
the initrd.

# check filesystem if possible
if [ -z "$rootfstype" ]; then
    echo "invalid root filesystem -- exiting to /bin/sh"
    cd /
    PATH=$PATH PS1='$ ' /bin/sh -i
elif [ -x /bin/fsck.${rootfstype} ]; then
    # fsck is unhappy without it
    echo "$rootdev / $rootfstype defaults 1 1" > /etc/fstab
    fsckopts="-V -a"
    # Check external journal for reiserfs
    [ "$rootfstype" = "reiserfs" -a -n "$journaldev" ] && fsckopts="-j 
$journaldev $fsckopts"
    fsck -t $rootfstype $fsckopts $rootdev
    # Return the fsck status
    ROOTFS_FSCK=$?
    export ROOTFS_FSCK
    ROOTFS_FSTYPE=$rootfstype
    export ROOTFS_FSTYPE
    if [ $ROOTFS_FSCK -gt 1 -a $ROOTFS_FSCK -lt 4 ]; then
        # reboot needed
        echo "fsck succeeded, but reboot is required."
        echo "Rebooting system."
        /sbin/reboot -d -f
    elif [ $ROOTFS_FSCK -gt 3 ] ; then
        echo "fsck failed. Mounting root device read-only."
        read_write=
    else
        if [ "$read_only" ]; then
            echo "fsck succeeded. Mounting root device read-only."
            read_write=
        else
            echo "fsck succeeded. Mounting root device read-write."
            read_write=1
        fi
    fi
fi

opt="-o ro"
[ -n "$read_write" ] && opt="-o rw"
[ "$rootfstype" = "nfs" ] && opt="${opt},nolock"

# tell kernel root is /dev/ram0, prevents remount after initrd
echo 256 > /proc/sys/kernel/real-root-dev
# mount the actual root device below /root
echo "Mounting root $rootdev"
# check external journal
[ "$rootfstype" = "xfs" -a -n "$journaldev" ] && 
opt="${opt},logdev=$journaldev"
[ "$rootfstype" = "reiserfs" -a -n "$journaldev" ] && 
opt="${opt},jdev=$journaldev"
[ -n "$rootflags" ] && opt="${opt},$rootflags"
[ -n "$rootfstype" ] && opt="${opt} -t $rootfstype"
if [ -x /bin/nfsmount -a "$rootfstype" = "nfs" ]; then
    nfsmount $rootdev /root || die 1
else
    mount $opt $rootdev /root || die 1


But in Debian's /init

maybe_break mount
log_begin_msg "Mounting root file system..."
. /scripts/${BOOT}
parse_numeric ${ROOT}
mountroot
log_end_msg


I looked into the scripts folder also but didn't find anything interesting.

How is Debian handling multipathing ?
For cases where "root on multipath" is required, I think Debian will just 
fail.
Especially for cases like iSCSI + multipath + SAN Boot, I don't think the init 
script is designed yet.

Ritesh
-- 
Ritesh Raj Sarraf
RESEARCHUT - http://www.researchut.com
"Necessity is the mother of invention."

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to