我怎么能从一个软件RAID 1arrays启动Linux

我试图做一个现有的Linux Ubuntu安装RAIDarrays。

我正在按照这个教程… http://howtoforge.org/software-raid1-grub-boot-fedora-8

经过一百万次的事物清单后,我终于明白发生了什么事情。 你让RAID设备,在你的新的空盘,复制你的旧/驱动器,设置grub menu.lst,fstab,mtab initrd和grub MBR都指向RAID设备(我已经定义和正在工作),然后重新启动。 一旦你启动,你现在运行在RAID设备(/ dev / md0)然后你只要把你的原始驱动器上的RAIDarrays,同步,并说你完成了。

所以我设置我的menu.lst主要加载从raid设备的内核和initrd,并故障转移到我的原始(仍然完好)旧磁盘。 当我重新启动时,它总是故障切换。 我启动机器,运行我的新的GRUB条目,它说:“找不到错误15文件”。 网上有很多关于它的东西,似乎没有任何帮助。

唯一奇怪的是当我用grub设置MBR时,你会说“root(hd0,0)”,我终于理解它的意思了,它应该说文件系统types是ext2fs,分区types0xfd或类似的东西那。 我没有说什么。 但是当我运行安装程序(hd0)和设置(hd2)时,它说正确的驱动器是正确的。 所以我认为它的工作。 但不能从md0设备加载initrd /内核。

我唯一想到的另一件事情是,grub怎么知道什么是raid设备。 内核没有加载,软件raid模块没有加载,怎么能愚蠢的小grub有什么想法从哪里加载initrd? 所以我在想,好的,从/ dev / md0到/ dev / sdc1(新的raid驱动器)有一个映射,但是我没有看到可能发生的情况。 对于踢,(我做了很多次,以各种组合)我试图设置grub menu.lst尝试从root = / dev / sdc1(我的新驱动器)加载initrd和内核,它仍然说没有find文件。 所以无论是grub mbr安装程序不工作,或者我错过了一些非常简单的东西。

有任何想法吗?

这里有一些更多的信息.​​..

 root @ io:〜#cat / proc / mdstat
个性:[线性] [多重] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
 md0:激活raid1 sdc1 [1]
       18771840块[2/1] [_U]



 root @ io:〜#fdisk -l

磁盘/ dev / sda:20.8 GB,20847697920字节
 255个磁头,63个扇区/磁道,2534个磁道
单位= 16065 * 512 = 8225280字节的柱面
磁盘标识符:0x9d949d94

   设备引导启动结束块Id系统
 / dev / sda1 * 1 2337 18771921 83 Linux
 / dev / sda2 2338 2434 779152+ 5扩展
 / dev / sda5 2338 2434 779121 82 Linux swap / Solaris

磁盘/ dev / sdb:320.0 GB,320072933376字节
 16个磁头,63个扇区/磁道,620181个磁道
单位= 1008 * 512 = 516096字节的柱面
磁盘标识符:0x00000000

   设备引导启动结束块Id系统
 / dev / sdb1 * 1 4064 2048224+ 83 Linux
 / dev / sdb2 4065 620181 310522968 83 Linux

磁盘/ dev / sdc:20.0 GB,20020396032字节
 255个磁头,63个扇区/磁道,2434个磁道
单位= 16065 * 512 = 8225280字节的柱面
磁盘标识符:0x00000080

   设备引导启动结束块Id系统
 / dev / sdc1 * 1 2337 18771921 fd Linux raid autodetect
 / dev / sdc2 2338 2434 779152+ 5扩展
 / dev / sdc5 2338 2434 779121 82 Linux swap / Solaris

磁盘/ dev / md0:19.2 GB,19222364160字节
 2个磁头,4个扇区/磁道,4692960个圆柱体
单位= 8 * 512 = 4096字节的柱面
磁盘标识符:0x00000000

磁盘/ dev / md0不包含有效的分区表



 root @ io:〜#mdadm -E
 mdadm:没有设备要检查



 root @ io:〜#cat /etc/mdadm.conf
 ARRAY / dev / md0 level = raid1 num-devices = 2 UUID = 5248ed76:cba39cc2:3082255a:649c0d18
根@ IO:〜#



 root @ io:〜#cat /boot/grub/menu.lst

默认为0
 #8/14/09加了这个
后备1

 ##超时秒
 #在自动引导默认条目之前,以SEC秒为单位设置超时
 #(通常定义的第一个条目)。
超时3

 ## hiddenmenu
 #默认隐藏菜单(按ESC查看菜单)
 hiddenmenu

 #增加了这个8/14/09 raid引导,注意这将在下一次内核更新时被吹走
 #如果是在魔法标记之后
 #这意味着当有内核升级时,我们将不得不手动更新:-(
 #grub land hd0 = / dev / sda and hd1 = / dev / sdb and hd2 = / dev / sdc我希望
 #我们现在把sdc放在第一位
标题Ubuntu 8.04.3 LTS,内核2.6.24-24-generic(raid)
根(hd2,0)
 #kernel /boot/vmlinuz-2.6.24-24-generic root = UUID = b11d6b08-fdfe-4b0d-adec-4e263455be23 ro
 kernel /boot/vmlinuz-2.6.24-24-generic root = / dev / md0 ro
 initrd /boot/initrd.img-2.6.24-24-generic
安静




标题Ubuntu 8.04.3 LTS,内核2.6.24-24-generic
根(hd0,0)
 kernel /boot/vmlinuz-2.6.24-24-generic root = UUID = d8c402cc-7445-4878-b3aa-c9568b740b51 ro
 initrd /boot/initrd.img-2.6.24-24-generic
安静


标题Ubuntu 8.04.3 LTS,内核2.6.24-24-generic(恢复模式)
根(hd0,0)
 kernel /boot/vmlinuz-2.6.24-24-generic root = UUID = d8c402cc-7445-4878-b3aa-c9568b740b51 ro single
 initrd /boot/initrd.img-2.6.24-24-generic



 root @ io:〜#blkid
 / dev / sda1:UUID =“d8c402cc-7445-4878-b3aa-c9568b740b51”SEC_TYPE =“ext2”TYPE =“ext3”
 / dev / sda5:TYPE =“swap”UUID =“e0509276-30eb-4dcb-8e17-20f8244f5403”
 / dev / sdb1:LABEL =“alt”UUID =“ea1789eb-9d6f-47a9-a074-18121792b30a”SEC_TYPE =“ext2”TYPE =“ext3”
 / dev / sdb2:LABEL =“sp”UUID =“3b6d1173-f9fd-4a3e-8e5d-249fc682355b”SEC_TYPE =“ext2”TYPE =“ext3”
 / dev / sdc1:UUID =“76ed4852-c29c-a3cb-5a25-8230180d9c64”TYPE =“mdraid”
 / dev / md0:UUID =“b11d6b08-fdfe-4b0d-adec-4e263455be23”SEC_TYPE =“ext2”TYPE =“ext3”


关于Grub的一点是,在Linux系统的其他部分(显然)被调用之前 ,所以它不知道你的软件raid。 它只看到裸露的硬盘。

所以,在RAID1arrays的两个驱动器上安装grub是非常重要的。 BIOS将从中select一个启动,如果该驱动器上没有安装grub,它将不会启动。 (我发现这是困难的方式,当我的一个RAID驱动器在RAID1configuration失败 – 系统拒绝启动,说它没有启动分区..安装GRUB的驱动器已经失败,可启动硬盘,安装Grub就可以了)

所以在提示符下打开grub(你可以在linux下运行),并input:

grub 

获取grub提示。

 root(hd0,0) setup(hd0) root(hd1,0) setup(hd1) 

将grub设置为驱动器上的每个第一个分区(如果启动分区位于驱动器上的其他位置,则更改0以反映正确的分区),然后安装程序将安装grub启动文件。

这应该是你需要做的一切。 如果没有正确的工作,你确定你有正确的启动分区,并且你的驱动器是相同的布局?

对于那些最终遭受我所做错误15的人来说,事实certificategrub(hd0,hd1,hd2 …)中的设备命名scheme在grub启动和grub运行系统正在运行。 我花了一个星期的根(hd2,0),因为这是什么grub告诉我,我想要的驱动器被称为。 但是当我在启动时掉到grubshell上时,我惊讶地发现机器启动时的hd2是在启动时是hd1。 所以我改变了menu.lst使用root(hd1,0),它开始工作。 我希望能挽救别人的头发。

Grub 知道你的RAID设备; 它只是从驱动器直接读取(在RAID-1设置中),因为驱动器的整个副本就在那里(不会像在RAID-5或RAID-10上那样碎片化)组态)。

你还没有提供足够的信息来确定发生了什么, 有什么好处的是:

  • 所有驱动器的分区表;
  • RAIDconfiguration细节(/ proc / mdstat,mdadm -E等的输出)