在raid1软件RAID的Linux启动?

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

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

  • 我成功地创build了raid 1作为单独的新驱动器降级,我复制了所有的数据
  • 我可以安装这个raid 1,看看它的文件等
  • 我已经有一个在同一个盒子上工作的raid5(虽然没有启动)
  • 我已经在两个驱动器上安装了grub
  • 当grub启动时,它加载内核好吧,但在内核启动时,它无法加载“根块设备”

内核告诉我:1 – 检测到根设备是md设备2 – 确定root设备3 – 挂载root 4 – 在/ newroot上挂载/ dev / md125失败:input/输出错误。 请input另一个根设备:…

在这一点上,如果我input/ dev / sda3(我没有转换为raid的“旧”root设备),那么所有的东西都没有根目录就可以正常启动。 / dev / md125设备的确是创build的,但似乎是在错误发生之后创build的,因为在加载设备之后 ,当mdadm被加载时,创build该设备

不知何故,它看起来不能/不加载RAIDarrays之前,它需要挂载,我不知道我怎么能解决这个问题。

我的configuration文件(取自系统,一旦以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 

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

它可能破解你的initramfs(它只是一个gzip'd cpio压缩包,对其进行修改并重新存档)。我经常通过将initramfs初始化脚本更改为shell并找出问题来解决这些问题什么都不起作用,你应该在创build内核的同时创buildinitramfs,通常包含启动系统所需的所有东西,但特别是在系统已经运行之后添加了sw raid的时候,没有正确添加。查看本文档中的swid信息:

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

有一点需要牢记的是,Grub不能识别RAIDarrays,所以你必须在两个驱动器上安装grub。 当Grub启动时,它通常会从第一个启动,但是如果更改了arrays,它将尝试启动第二个硬盘,您将不会安装grub。