Bug#501359: initramfs-tools: MODULES=dep does not like Xen virtual block devices
On Mon, 22 Dec 2008, Ian Campbell wrote:
> Ferenc seems to be using the xvda1=img1,xvda2=img2 scheme of Xen disks
> (this is what xentools gets you) rather than the whole disk with
> partition scheme.
>
> In the xvda1/xvda2 scheme /sys/block contains:
> # ls /sys/block/
> ram0 ram1 ram10 ram11 ram12 ram13 ram14 ram15 ram2 ram3
> ram4 ram5 ram6 ram7 ram8 ram9 xvda1 xvda2
>
> In the whole disk scheme it contains xvda as you would expect:
> # ls /sys/block/
> loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7 ram0
> ram1 ram10 ram11 ram12 ram13 ram14 ram15 ram2 ram3 ram4
> ram5 ram6 ram7 ram8 ram9 xvda
thanks for the analysis and the explanation.
> I've attached a patch which takes care of this difference. However the
> modules still aren't loaded.
hmm what?
which modules are not loaded?
> Note that the -xen type images seem to have the block driver builtin
> (and therefore work fine) while the -686-bigmem ones have it modular
> (xen-blkfront.ko) and break with MODULES=dep.
argh,
the syswalking doesn't add that one?
could you post output with MODULES=dep for the modular case of
sh -x mkinitramfs -o /tmp/foo
> I've attached ls -lRt of my /sys running -686-bigmem
> and /sys/devices/vbd-51712/modalias contains "xen:vbd" which is present
> as an alias on the xen-blkfront.ko module. Any other info required
> please ask.
thanks for the patch bellow i'll apply it asap,
as it is an improvement anyway
> --- /usr/share/initramfs-tools/hook-functions.orig 2008-12-17 21:48:06.000000000 +0000
> +++ /usr/share/initramfs-tools/hook-functions 2008-12-17 21:53:02.000000000 +0000
> @@ -269,6 +269,14 @@
> root=${root#/dev/}
> block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \
> /proc/mdstat)
> + # Xen virtual device /dev/xvdX
> + elif [ "${root#/dev/xvd}" != "${root}" ]; then
> + block=${root#/dev/}
> + # Xen has a mode where only the individual partitions are registered with the kernel
> + # as well as the usual full disk with partition table scheme.
> + if [ ! -e /sys/block/${block} ] ; then
> + block=${block%[0-9]*}
> + fi
> # classical root device
> else
> block=${root#/dev/}
--
maks
Reply to: