无法安装grub到RAID1(md0)

我的Ubuntu 12.04 LTS有一个RAID1arrays,我的/ SDDA硬盘已经在几天前被replace了。 我用这个命令来replace:

# go to superuser sudo bash # see RAID state mdadm -Q -D /dev/md0 # State should be "clean, degraded" # remove broken disk from RAID mdadm /dev/md0 --fail /dev/sda1 mdadm /dev/md0 --remove /dev/sda1 # see partitions fdisk -l # shutdown computer shutdown now # physically replace old disk by new # start system again # see partitions fdisk -l # copy partitions from sdb to sda sfdisk -d /dev/sdb | sfdisk /dev/sda # recreate id for sda sfdisk --change-id /dev/sda 1 fd # add sda1 to RAID mdadm /dev/md0 --add /dev/sda1 # see RAID state mdadm -Q -D /dev/md0 # State should be "clean, degraded, recovering" # to see status you can use cat /proc/mdstat 

这是同步后的我的mdadm输出:

 /dev/md0: Version : 0.90 Creation Time : Wed Feb 17 16:18:25 2010 Raid Level : raid1 Array Size : 470455360 (448.66 GiB 481.75 GB) Used Dev Size : 470455360 (448.66 GiB 481.75 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Thu Nov 1 15:19:31 2012 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 92e6ff4e:ed3ab4bf:fee5eb6c:d9b9cb11 Events : 0.11049560 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 

build造完成后“fdisk -l”说明我没有有效的分区表/ dev / md0。 这是我的fdisk -l输出:

 Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00057d19 Device Boot Start End Blocks Id System /dev/sda1 * 63 940910984 470455461 fd Linux raid autodetect /dev/sda2 940910985 976768064 17928540 5 Extended /dev/sda5 940911048 976768064 17928508+ 82 Linux swap / Solaris Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000667ca Device Boot Start End Blocks Id System /dev/sdb1 * 63 940910984 470455461 fd Linux raid autodetect /dev/sdb2 940910985 976768064 17928540 5 Extended /dev/sdb5 940911048 976768064 17928508+ 82 Linux swap / Solaris Disk /dev/md0: 481.7 GB, 481746288640 bytes 2 heads, 4 sectors/track, 117613840 cylinders, total 940910720 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/md0 doesn't contain a valid partition table 

这是我的grub安装输出:

 root@answe:~# grub-install /dev/sda /usr/sbin/grub-setup: warn: Attempting to install GRUB to a disk with multiple partition labels or both partition label and filesystem. This is not supported yet.. /usr/sbin/grub-setup: error: embedding is not possible, but this is required for cross-disk install. root@answe:~# grub-install /dev/sdb Installation finished. No error reported. 

一些版本信息:

 grub-install (GRUB) 1.99-21ubuntu3.4 3.2.0-32-generic #51-Ubuntu SMP Wed Sep 26 21:33:09 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux 

所以

1)“update-grub”只查找/ sda和/ sdb Linux,而不是/ md0

2)“dpkg-reconfigure grub-pc”说“GRUB未能安装以下设备/ dev / md0”

我无法加载我的系统,除了从/ sdb1(手工,不自动),并在降级模式…

任何人都可以解决这个问题? 我对此感到头痛。

更新:用零清除新磁盘后,用sfdisk update-grub复制分区说:

 root@answe:~# grub-install /dev/sda error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. Installation finished. No error reported. 

现在update-grub生成相同的错误:

 root@answe:~# update-grub error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. Generating grub.cfg ... error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. Found linux image: /boot/vmlinuz-3.2.0-32-generic Found initrd image: /boot/initrd.img-3.2.0-32-generic ... error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. Found memtest86+ image: /boot/memtest86+.bin No volume groups found error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. Found Ubuntu 12.04.1 LTS (12.04) on /dev/sda1 Found Ubuntu 12.04.1 LTS (12.04) on /dev/sdb1 error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. error: found two disks with the index 2 for RAID md0. done 

警告指出了根本原因。 您用于replace的新磁盘可能曾经有一个文件系统和grub-setup ,现在可能还在其中。

所以,只需擦除磁盘开始处的所有内容,直到第一个分区。 我从fdisk -l输出中得到了62数字。 它说, 63是第一个分区的开始,这听起来像有62扇区之前,你可以清理。

 dd if=/dev/zero of=/dev/sda bs=512 count=62 

然后重新创build分区表:

 sfdisk -d /dev/sdb | sfdisk /dev/sda 

sfdisk可能会抱怨“内核可能使用的是旧的分区表”,但是你可以忽略这个警告,因为你并没有真的改变分区表。

那么你应该可以grub-install /dev/sda

更新:

如果仍然出现错误,请尝试将磁盘从RAID中取出,并从头到尾清零更多数据。 或者只是将整个磁盘清零( dd if=/dev/zero of=/dev/sda )。 然后像从前一样将其重新添加到RAID中,从sfdisk -d /dev/sdb | sfdisk /dev/sda sfdisk -d /dev/sdb | sfdisk /dev/sda 。 并考虑切换到其他一些地方的build议的元数据格式1.0。