Linux 在 raid1 软件 raid 上启动吗?

Linux 在 raid1 软件 raid 上启动吗?

我正在尝试将我的单磁盘启动转换为 raid1 启动

到目前为止我所拥有的是:

  • 我成功地创建了 raid 1,仅使用新驱动器,我复制了其中的所有数据
  • 我可以挂载该 raid 1,查看其文件等
  • 我已经有一个 raid5 在同一个盒子上运行(尽管还不能启动)
  • 我已经在两个驱动器上安装了 grub
  • 当 grub 启动时,它可以正常加载内核,但在内核启动过程中,它无法加载“根块设备”

内核告诉我:1 - 检测到根设备是 md 设备 2 - 确定根设备 3 - 安装根 4 - 在 /newroot 上安装 /dev/md125 失败:输入/输出错误。请输入另一个根设备:...

此时,如果我输入 /dev/sda3(我的“旧”根设备,尚未转换为 raid),一切都可以在没有根的情况下正常启动。 /dev/md125 设备确实已创建,但它似乎是在错误发生后创建的,因为它是在加载设备后创建的,当 mdadm 加载时。

不知怎的,它看起来好像在需要安装之前无法/不会加载 raid 阵列,而且我不知道如何解决这个问题。

我的配置文件(系统以 sda3 作为根设备启动后从系统中获取):

$ cat /etc/mdadm.conf
ARRAY /dev/md/md0-r5 metadata=0.90 UUID=1a118934:c831bdb3:64188b84:66721085
ARRAY /dev/md125 metadata=0.90 UUID=48ec4190:a80d4dde:64188b84:66721085

$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [raid0] [raid10]
md125 : active raid1 sdc3[1]
      477853312 blocks [2/1] [_U]

md127 : active raid5 sdd[0] sdf[3] sdb[2] sde[1]
      4395415488 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>

$ cat /boot/grub/menu.lst
default 0
timeout 8
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 2.6.31-r10
root (hd0,0)
#kernel /boot/kernel-genkernel-x86_64-2.6.31-gentoo-r10 root=/dev/ram0 real_root=/dev/sda3
kernel /boot/kernel-genkernel-x86_64-2.6.31-gentoo-r10 root=/dev/md125 md=125,/dev/sdc3,/dev/sda3
initrd /boot/initramfs-genkernel-x86_64-2.6.31-gentoo-r10

# blkid
/dev/sda1: UUID="89fee223-b845-4e0a-8a0b-e6cf695d5bcf" TYPE="ext2"
/dev/sda2: UUID="a72296a8-d7d4-447f-a34b-ee920fd1a767" TYPE="swap"
/dev/sda3: UUID="97eb0a6a-c385-4a9d-bf74-c0bab1fa4dc1" TYPE="ext3"
/dev/sdb: UUID="1a118934-c831-bdb3-6418-8b8466721085" TYPE="linux_raid_member"
/dev/sdc1: UUID="d36537fd-19a0-b8a3-6418-8b8466721085" TYPE="linux_raid_member"
/dev/sdd: UUID="1a118934-c831-bdb3-6418-8b8466721085" TYPE="linux_raid_member"
/dev/sde: UUID="1a118934-c831-bdb3-6418-8b8466721085" TYPE="linux_raid_member"
/dev/md127: UUID="13a41589-4cf1-4c04-91ca-37484182c783" TYPE="ext4"
/dev/sdf: UUID="1a118934-c831-bdb3-6418-8b8466721085" TYPE="linux_raid_member"
/dev/sdc2: UUID="a1916397-1b48-45d7-9f98-73aa521e882f" TYPE="swap"
/dev/sdc3: UUID="48ec4190-a80d-4dde-6418-8b8466721085" TYPE="linux_raid_member"
/dev/md125: UUID="c947ed64-1d4d-4d1d-b4d2-24669fff916e" SEC_TYPE="ext2" TYPE="ext3"

# mdadm -E
mdadm: No devices to examine

# fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xe975e9fc

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           5       40131   83  Linux
/dev/sda2               6        1311    10490445   82  Linux swap / Solaris
/dev/sda3            1312       60801   477853425   83  Linux

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xe975e9fc

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1           5       40131   83  Linux
/dev/sdc2               6        1311    10490445   82  Linux swap / Solaris
/dev/sdc3            1312       60801   477853425   83  Linux

Disk /dev/md125: 489.3 GB, 489321791488 bytes
2 heads, 4 sectors/track, 119463328 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Disk /dev/md125 doesn't contain a valid partition table

答案1

当 Linux 启动时,它首先从 initramfs 内部启动一个最小的 Linux 发行版。这只是一个带有简单根文件系统的 RAM 磁盘。initramfs 进行一些初始化,加载所有必要的块设备和文件系统驱动程序,然后挂载真正的根文件系统,进入其中并从中启动。看起来您已经在主 Linux 文件系统下正确配置了 raid 设备,但没有在 initramfs 文件系统中配置。

有可能破解您的 initramfs(它只是一个 gzip 的 cpio 存档,对其进行修改并重新存档。我经常通过更改 initramfs 初始化脚本来解决此类问题,只需将其放到 shell 中并找出无法正常工作的地方。您的 initramfs 应该在内核构建的同时创建,并且通常包含引导系统所需的一切。但特别是如果在系统运行后添加了 sw raid,则构建可能未正确添加它。查看此文档中的 sw raid 信息:

http://en.gentoo-wiki.com/wiki/Initramfs

答案2

需要记住的一件事是,Grub 无法识别 RAID 阵列,因此您必须在两个驱动器上都安装 grub。Grub 启动时,通常会从第一个驱动器启动,但如果阵列发生更改,它将尝试从未安装 grub 的第二个 HDD 启动。

相关内容