LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 951|回复: 4

lvm on root partition, 启动失败。

[复制链接]
发表于 2010-1-10 02:10:22 | 显示全部楼层 |阅读模式
使用 livecd 做的系统, livecd 可以成功加载 lvm2 分区,只需要 vgchange -ay 就行了。其内核是 2.6.24 ,lvm2 应该是 2.02.25 。内核是用 genkernel 做的,
  1. genkernel --lvm --menuconfig all
复制代码
没有使用 openrc ,没有使用 baselayout-2 。分区情况是 sda1 为启动分区(PPC PReP Boot), sda2 boot 分区, sda3 加上 sdb sdc3 为 lvm 。 root 分区使用 striping 。


就是引导后找不到 root 分区。

进入 shell 后 vgchange -ay 打开失败,提示:
  1. device-mapper: reload ioctl failed: Invalid argument
复制代码

dmesg 中有如下提示:
  1. device-mapper: table: xxx:x: striped: Invalid chunk size
复制代码

gentoo-sources-2.6.31-r6 , lvm2-2.02.51-r1 , device-mapper 据说和 lvm2 合并,事实上没装这个包。关于 Invalid chunk size 的具体含义没有 google 到有价值的信息,只 google 到了源码……我看不懂……还有什么信息可以补充的吗?

由于正在赶时间,所以在这里发个贴子。
发表于 2010-1-10 13:38:39 | 显示全部楼层
1.boot分区不要放在LVM上
2.如果你用~x86,现在会自动迁移到OpenRC
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-10 13:44:57 | 显示全部楼层
Post by timogen;2063262
1.boot分区不要放在LVM上
2.如果你用~x86,现在会自动迁移到OpenRC


boot 分区是独立的,这里是 root 的分区加载不上,使用的是 ppc64 ……
回复 支持 反对

使用道具 举报

发表于 2010-1-12 00:08:27 | 显示全部楼层
不知道楼主解决了没有,前些天我也把根分区放到了LVM里面,是自己手动编译的内核,没有使用genkernel。下面发下我所做的步骤,希望对楼主解决问题有些用处。

   1. 将initramfs放在/usr/src/initramfs

mkdir -pv /usr/src/initramfs/{boot,bin,dev,etc,lib,mnt,proc,root,sbin,sys}

   2. 引导中需要lvm和busybox两个程序,lvm用来识别分区,busybox用来执行 /init脚本,并进行mount等操作

cp /sbin/lvm.static /usr/src/initramfs/sbin/lvm
cp /usr/bin/busybox.static /usr/src/initramfs/bin/busybox

   3. 在 initramfs 中制作必须的几个 dev 文件

cp -a /dev/console /usr/src/initramfs/dev
cp -a /dev/null /usr/src/initramfs/dev
cp -a /dev/zero /usr/src/initramfs/dev
cp -a /dev/mem /usr/src/initramfs/dev

   4. 制作自己的启动脚本

cat > /usr/src/initramfs/init <<EOF

#!/bin/busybox sh

# mdev is for dynamic devices
mini_udev() {
busybox echo /sbin/mdev > /proc/sys/kernel/hotplug
busybox mdev -s
}

# Mount the /proc and /sys filesystems.
busybox mount -t proc none /proc
busybox mount -t sysfs none /sys

# Start UDEV
mini_udev &> /dev/null

# LVM Load
lvm vgscan &> /dev/null
lvm vgchange -a y &> /dev/null

# Mount the root filesystem.
busybox mount -o ro /dev/mapper/linux-root /mnt/root || busybox echo "Mouting Fail"

# Clean up.
busybox umount /proc
busybox umount /sys

# Boot the real thing.
exec busybox switch_root -c /dev/console /mnt/root /sbin/init &> /dev/null

EOF

   5. 最后将新制作的initramfs放到内存中。在内核编译中 Initramfs source file 中填入我们制作系统所在的位置 /usr/src/initramfs,编译并安装新内核

cd /usr/src/linux
make menuconfig


改进思路

busybox中包含很多功能,而启动脚本中只用了很少的几条命令,因此可以在编译busybox时候剔除掉我们不需要的功能。另外使用uclibc编译busybox应该能很大程序减小程序尺寸,并最终减小内核大小,加速启动过程。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-12 05:02:32 | 显示全部楼层
目前还没有解决,我正打算等会把逻辑卷改成 linear 的再启动一下,碰碰运气……

等还不行的话,再试试你的方法吧,我已经检查过 initramfs 的设置了,照理是应该没有问题的才对,搞不懂了……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表