在LVM上安装Gentoo笔记


我是在已有的Linux上安装一个Gentoo,所以其实有没有下载installation CD并不重要,只要下载了stage3的文件和portage就可以了。不过要确保系统中有chroot。我的系统中已经有LVM,所以我安装过程都是在LVM上的分区进行。

在mke2fs -t ext3 /dev/vg/gentoo_usr的时候出现invalid block count的错误,不知道原因。

但是通过mke2fs -j /dev/vg/gentoo_usr解决了问题,成功把/dev/vg/gentoo_usr格式化成ext3。

自己一共编译了两次内核,最终仍然没有成功的让编译出来的kernel成功的mount LVM上的root。

在编译中,涉及Power management的选项在我的台式机上会出现BUG,一共出现了两次。

a. 在启动的时候出现ACPI 相关BIOS的错误,后来通过去掉Power management中的APCI相关的选项去掉了这一问题。

b. 在启动的时候出现MP_BIOS bug: 8254 timer not connected to IO_ACPI错误,后来干脆把整个Power management的选项组都去掉了,因为这个在台式机上貌似没什么作用。然后问题解决。

在第一次kernel编译的时候,使用的是manually compilation的方式。make menuconfig之后直接make && make modules_install。同时LVM的模块是builtin的方式编译进内核。启动的时候出现invalid block device的问题不能挂载LVM上的跟分区。

然后直接使用genkernel initramfs --lvm all的方式,生成initramfs(initrd的新版本)。然后直接启动,出现在scanning modules的时候听在scanning sd_mod的地方然后不再动。怀疑是手动编译的问题,因为现在位置手动编译内核还不是太熟悉,对于有些选项应该是有些冲突的选项的。于是决定第2次重新编译内核,这次使用genkernel的方式。

在第二次编译内核的时候,使用genkernel --lvm --menuconfig all编译内核。在编译之后重新启动,仍然出现6里面的问题。由此怀疑是sd_mod的问题,进入原先的系统,用modinfo sd_mod查看这个模块的信息,是SCSI DISK的驱动,所以决定在启动的时候禁掉scsi设备的监测。

在启动的时候,进入grub之后,编辑gentoo内核的启动选项,增加 noscsi 参数。然后启动,顺利通过scanning modules步骤,但是在检测Volunm group和挂载Root的时候,仍然出错。这个时候可以通过ramfs里面的shell来查看一些ramfs里面的配置。

后来想清楚了之后,自己的硬盘是SATA口连接到电脑的,而一般SATA的硬盘都需要SCSI DISK的驱动,也就是sd_mod。也就是sd_mod如果不load的话,没有办法找出Volunm Group,所以也当然没有办法挂载在VG上的root分区了。

后来在ramfs里面的shell试着手动的modprobe sd_mod,症状和scanning的时候一样,也是会导致kernel 不动。由此得出问题是sd_mod的问题。在网上寻找答案,没有很确定的答案,可能是跟IDE跟新的SCSI驱动之间的编译出现了冲突导致。

在gentoo的official forums上求解了两天,在某人的帮助下终于解决了6中的问题。首先是尝试了将SCSI驱动编译成builtin的模块,这样在启动的时候在scanning之前kernel会有一些debug的输出。这样虽然仍然是停在了sda的监测中,但是由于在kernel的编译中选择了verbose的kernel输出,所以可以看到很多之前没有的信息。由此可以确定是在监测SATA的时候出了问题。然后根据坛子某人的提示,将BIOS中的SATA controller从all enabled改成SATA-1。然后就可以顺利启动了。原来这个问题是和BIOS中的SATA adapter有关,真是玄妙。

相关内容