我在远程数据中心托管了硬件专用服务器,运行 CentOS 6.4 版(最终版)和 grub(GNU GRUB 0.97)。服务器有 6 个 2TB 驱动器,上面有 2 个软件 raid - md0 raid 1 用于系统和交换,md1 raid 5 用于数据。以下是 fdisk 和 mdstat 输出:
[root@s3 ~]# fdisk -l
Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0004f1ce
Device Boot Start End Blocks Id System
/dev/sda1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sda2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0008177f
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x0008afb7
Device Boot Start End Blocks Id System
/dev/sdc1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdc2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/sde: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00012b28
Device Boot Start End Blocks Id System
/dev/sde1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sde2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/sdd: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000df271
Device Boot Start End Blocks Id System
/dev/sdd1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdd2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000b6b9e
Device Boot Start End Blocks Id System
/dev/sdf1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdf2 653 243202 1948270592 fd Linux raid autodetect
Disk /dev/md1: 9974.5 GB, 9974471720960 bytes
2 heads, 4 sectors/track, -1859793536 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 2621440 bytes
Disk identifier: 0x00000000
Disk /dev/md0: 5368 MB, 5368643584 bytes
2 heads, 4 sectors/track, 1310704 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/vg_s3-LogVol01: 12.6 GB, 12582912000 bytes
255 heads, 63 sectors/track, 1529 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 2621440 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/vg_s3-LogVol00: 3271 MB, 3271557120 bytes
255 heads, 63 sectors/track, 397 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 2621440 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/vg_s3-LogVol02: 9958.6 GB, 9958615678976 bytes
255 heads, 63 sectors/track, 1210732 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 2621440 bytes
Disk identifier: 0x00000000
[root@s3 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid1 sdc1[2] sda1[0] sdd1[3] sdb1[1] sde1[4] sdf1[5]
5242816 blocks super 1.0 [6/6] [UUUUUU]
bitmap: 1/1 pages [4KB], 65536KB chunk
md1 : active raid5 sda2[0](F) sdd2[3] sdc2[2] sdb2[1] sde2[4] sdf2[6]
9740695040 blocks super 1.1 level 5, 512k chunk, algorithm 2 [6/5] [_UUUUU]
bitmap: 15/15 pages [60KB], 65536KB chunk
unused devices: <none>
如您所见,阵列 md1 处于降级状态,/dev/sda 驱动器出现故障。我之前在其他服务器上更换过许多出现故障的驱动器,但这里 /dev/sda 也是启动驱动器(可能)。这是我的启动 grub 设备图:
# this device map was generated by anaconda
(hd0) /dev/sdb
(hd1) /dev/sdc
(hd2) /dev/sdd
(hd3) /dev/sde
(hd4) /dev/sdf
(hd5) /dev/sdg
由于某种原因,/dev/sda 没有列出,并且列出了 /dev/sdg,而根据 fdisk 的说法,它并不存在。这是 /boot/grub/grub.conf:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/md0
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sdb
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=cf9ba269-255e-4650-a095-87f2cdc5e22e rd_NO_LUKS rd_LVM_LV=vg_s3/LogVol01 LANG=en_US.UTF-8 rd_MD_UUID=596e4bea:c4494ac6:b2007529:1c8053a7 SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_MD_UUID=40df07b4:85b88119:f11dabdf:97836f34 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-358.el6.x86_64.img
它将 hd(0,0) 列为启动驱动器。我认为这是 dev/sda 驱动器,它有故障。因此,如果我现在关闭服务器以更改驱动器,它将无法再次启动。我正在尝试将启动驱动器切换到其他驱动器,我在网上搜索了很多,但我无法弄清楚。我尝试了以下命令:
[root@s3 ~]# grub-install /dev/sdb
/dev/sda1 does not have any corresponding BIOS drive.
[root@s3 ~]# grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> find /grub/stage1
find /grub/stage1
Error 15: File not found
grub> find /boot/grub/stage1
find /boot/grub/stage1
(hd0,0)
(hd1,0)
(hd2,0)
(hd3,0)
(hd4,0)
(hd5,0)
grub> cat (hd0,0)/grub/grub.conf
cat (hd0,0)/grub/grub.conf
Error 15: File not found
grub> quit
quit
交换 /dev/sda 后,我应该对 grub 进行哪些更改才能启动。HDD 启动顺序可能也必须在 BIOS 中进行修改。
答案1
当使用软件 RAID 时,所选的启动驱动器完全取决于 BIOS(以及它如何枚举驱动器)。
要拥有可启动的机器,只需更换故障驱动器,然后使用grub-install
在 BIOS 启动驱动器上安装引导加载程序,或者更好的是,全部参与 RAID1 阵列的驱动器。
请看这里了解更多信息。