MKINITRD LVM Slackware

MKINITRD LVM Slackware

尝试在 Dell 2950 上安装 Slackware 13.1。我有一张 Perc5 RAID 卡,我的内核将其视为原始设备的 /dev/sda。

我创建了 3 个分区:

/dev/sda1 -- /boot partition type=82
/dev/sda2 -- swap partition  type=83
/dev/sda3 -- my LVM partition type=82

以下是我一直使用的步骤:

1.  pvcreate /dev/sda3 (is this necessary since the partition already exists from fdisk?)
2.  vgcreate vg00 /dev/sda3
3.  lvcreate -L 20G -n root vg00
4.  vgscan --mknodes
5.  vgchange -ay

然后我像往常一样安装 Slackware 13.1,选择 /dev/vg00/root 作为根 (/),选择 /dev/sda1 作为 (/boot),选择 /dev/sda2 作为交换....一切顺利。

安装后,我运行这些命令来制作我的 initrd 映像。

chroot /mnt

mkinitrd -c -k 2.6.33.4 \
-m jfs:uhci_hcd:ehci_hcd:usbhid:hid:megaraid_sas:bnx2 \
-f jfs \
-r /dev/vg00/root \ (also tried /dev/mapper/vg00-root)
-L

此命令运行时没有任何错误,并且我在 /boot 中获得了 initrd.gz 和 initrd-tree

我的 /etc/lilo.conf 的相关部分如下所示:

boot=/dev/sda

image = /boot/vmlinuz-generic-2.6.33.4
  initrd = /boot/vg00/root
  label = linux
  read-only

当我重新启动计算机时,我得到了 LILO 启动管理器。内核加载,但似乎 LVM 从未出现。我收到一条错误消息,指出没有 /root 分区,并且找不到设备 /dev/vg00/root。

我已经使用 Linux 多年了,但从未处理过 mkinitrd,因此我对流程以及驱动程序的提取方式有点陌生。我确实在 /boot/initrd-tree/sbin 目录中看到了 lvm 二进制文件。(dmsetup、lvm、vgchange、vgscan;后两个与 lvm 符号链接)

我还尝试解压并挂载 initrd 来看看,但使用 mount -o loop -t ramfs /dev/boot/initrd /tmp 也无法解决这个问题

非常感谢任何帮助或建议。

答案1

解决...

问题与 PROC 有关...当我运行 mkinitrd 时,在执行 chroot mnt 后,我​​没有有效的 /proc/partitions 表示。以下是我最终让它正常工作的步骤...

使用 Slackware DVD 启动(使用 13.1 64 位内核)

1.  vgscan --mknodes
2.  vgchange -ay

(请注意,由于我使用救援磁盘启动,并且已经按照我的原始帖子进行了安装,因此无需重新安装)。

上述两个命令使我的逻辑卷处于活动状态,并使其显示在 /proc/partitions 中。

3.  mount /dev/vg00/root /mnt
4.  mount /dev/sda1 /boot
5.  mount -t proc proc /mnt/proc (this was the magic step)
6.  chroot mnt (note, don't chroot /mnt just mnt)

重新运行与我原始帖子中所示的相同的 mkinitrd 脚本。这次我收到了有关将 /dev/vg00/root 重命名为 /dev/dm-0 的警告。

运行 lilo,配置与我的原始帖子相同。

重新启动后它就成功了。

需要注意的是,我的以太网驱动程序(bnx2)需要外部固件,而我没有将其包含在我的 initrd 中,这导致了漫长的启动过程,因为 bnx 驱动程序在寻找该固件时超时了......

希望这对其他人有帮助。

答案2

顺便说一下..要查看由 mkinitrd 创建的 initrd.img 文件,步骤如下。

mkdir myrd
cd myrd
cp /mnt/boot/initrd.gz .
gunzip initrd.gz
cpio -i -d < initrd

这些步骤是我在 IBM 网站上找到的。 http://www.ibm.com/developerworks/linux/library/l-initrd.html

答案3

分区值错误:

/dev/sda1 -- /boot partition type=82<BR>
/dev/sda2 -- swap partition  type=83<BR>
/dev/sda3 -- my LVM partition type=82<BR>

应该:

/dev/sda1 -- /boot partition type=83<BR>
/dev/sda2 -- swap partition  type=82<BR>
/dev/sda3 -- my LVM partition type=8e<BR>


82 = Linux swap<BR>
83 = Linux Partition<BR>
8e = LVM partition<BR>

http://www.win.tue.nl/~aeb/partitions/partition_types-1.html

相关内容