我一直在尝试整个周末,以使用带有RAID 1的双硬盘驱动器的英特尔ICH7 / ICH7-R SATA-II控制器,让旧的服务器计算机上的RAID工作。
放弃硬件RAID之后,我转向了软件。
目前,系统将启动罚款两个驱动器,并会引导罚款closuresSDB,但是当我试图启动SDA,我得到一个黑色的屏幕上闪烁的光标。
通过这个,我的意思是物理驱动器。 我删除一个驱动器,启动,它的作品。 更换该驱动器,并删除另一个,启动,它不工作。
我的猜测是我没有在sda上正确安装GRUB。
我删除了sdb硬盘,并将安装盘引导到恢复模式。 然后我装入RAID卷,然后进入shell。
首先,我将尝试一下我在软件RAID中遵循的这个教程告诉我:
# grub grub> device (hd0) /dev/sda grub> root (hd0,0) Filesytem type is ext2fs, partition type 0xfd grub> setup (hd0) Checking if "/boot/grub/stage1" exists ... no Checking if "/grub/stage1" exists ... no Error 2: Bad file or directory type
所以我尝试了不同的东西:
当input:
grub-install /dev/sda
我明白了
Searching for the GRUB installation directory ... found: /boot/grub The file /boot/grub/stage1 not read correctly.
我正在使用ext4分区。
我接下来要做什么?
编辑:
这是 fdisk -l 的输出
root@debian:~# fdisk -l Disk /dev/sda: 153.4 GiB, 164696555520 bytes, 321672960 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 Disklabel type: dos Disk identifier: 0x8225e6c2 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 194559 192512 94M fd Linux raid autodetect /dev/sda2 194560 4194303 3999744 1.9G fd Linux raid autodetect /dev/sda3 4194304 321671167 317476864 151.4G fd Linux raid autodetect Disk /dev/sdb: 153.4 GiB, 164696555520 bytes, 321672960 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 Disklabel type: dos Disk identifier: 0x3cfa42ad Device Boot Start End Sectors Size Id Type /dev/sdb1 * 2048 194559 192512 94M fd Linux raid autodetect /dev/sdb2 194560 4194303 3999744 1.9G fd Linux raid autodetect /dev/sdb3 4194304 321671167 317476864 151.4G fd Linux raid autodetect Disk /dev/md2: 151.3 GiB, 162413936640 bytes, 317214720 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 /dev/md0: 93.9 MiB, 98435072 bytes, 192256 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 /dev/md1: 1.9 GiB, 2046820352 bytes, 3997696 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
这是 mdadm --detail --scan 的输出 mdadm --detail --scan
ARRAY /dev/md/2 metadata=1.2 name=repeater:2 UUID=cd8443a8:ca0b3a29:05496e49:b063704f ARRAY /dev/md/0 metadata=1.2 name=repeater:0 UUID=c8a204e2:3e5a5e2c:50a136c7:d43777a7 ARRAY /dev/md/1 metadata=1.2 name=repeater:1 UUID=25bebb1e:c7f3245d:128bee5d:d58d9100
这是 lsblk 的输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 153.4G 0 disk ├─sda1 8:1 0 94M 0 part ├─sda2 8:2 0 1.9G 0 part └─sda3 8:3 0 151.4G 0 part └─md2 9:2 0 151.3G 0 raid1 / sdb 8:16 0 153.4G 0 disk ├─sdb1 8:17 0 94M 0 part │ └─md0 9:0 0 93.9M 0 raid1 /boot ├─sdb2 8:18 0 1.9G 0 part │ └─md1 9:1 0 1.9G 0 raid1 [SWAP] └─sdb3 8:19 0 151.4G 0 part sr0 11:0 1 1024M 0 rom
编辑2:这是 cat /proc/mdstat 的输出
root@debian:~# cat /proc/mdstat Personalities : [raid1] md1 : active (auto-read-only) raid1 sdb2[1] 1998848 blocks super 1.2 [2/1] [_U] md0 : active raid1 sdb1[1] 96128 blocks super 1.2 [2/1] [_U] md2 : active raid1 sda3[0] 158607360 blocks super 1.2 [2/1] [U_] bitmap: 2/2 pages [8KB], 65536KB chunk unused devices: <none>
从你的lsblk输出和/ proc / mdstat,我看到,你有所有的RAID降级。 请参阅[_U]或[U_] ? 在每个RAID中只有一行被填充(用U标记),另一个不是(用_标记)。
所以,看起来我的猜测是正确的:只有一个驱动器上有正常/引导文件系统,现在称为sdb。 你的SDA有一个分区,目的是为了同样的事情,但该分区似乎并没有包含有效和正确填充的启动文件系统。
如果你确定你的驱动器都不错,你可以重新join它们。 你需要从未使用的paritions清除md raid超级块。 如果您尝试擦除活动驱动器上的标签,则mdadm工具将会投诉,但仍值得仔细检查您的命令。 从你的/ proc / mdstat和fdisk输出,我们推断:
要擦除sda1,sda2,sdb3(当前全部未使用)的标签,请使用:
mdadm --zero-superblock /dev/sda1 mdadm --zero-superblock /dev/sda2 mdadm --zero-superblock /dev/sdb3
它可能会抱怨一些事情,你可能需要为命令添加–force,但是我认为这不是必须的。 我再说一遍,仔细检查一下,只在未使用的设备上擦除RAID标记!
然后,将这些未使用的设备添加到它们的数组中:
mdadm --add /dev/md0 /dev/sda1 mdadm --add /dev/md1 /dev/sda2 mdadm --add /dev/md2 /dev/sdb3
它将在后台启动重新同步。 还要注意,它会检测所有的arrays使用相同的设备,所以它会例如延迟md2 resync,直到md1完成。 您将在/ proc / mdstat中看到重新同步进度。
重新同步完成后,/ proc / mdstat中的所有设备都将具有[UU] ,表示这些arrays处于最佳状态。
你的/ boot工程,所以sdb1包含正确填充的文件系统。 当/ boot md0处于最佳状态时,我们可以说,sda1现在具有相同的数据(只有超级块才会有所不同,因为同一arrays中不同的后备设备具有不同的行号)。 您可以手动重新安装grub:
device (hd0) /dev/sda root (hd0,0) setup (hd0)
我强烈build议你设置mdadm定期进行数组检查(比如每周一次或每月一次),以尽早赶上驱动器读取错误。 我曾经解决了一个问题,当两个raid驱动器都有坏块(在不同的地方)时,即使坏块在文件系统的很less使用的部分,通过定期检查可以避免这个问题,提前popup错误的驱动器。 这是棘手的。 开始检查,做
echo "check" >> /sys/block/md127/md/sync_action
并在dmesg和mdmon日志中查找错误。
不要简单地dd引导文件系统到其他设备。 具有相同标签和相同UUID的两个文件系统不是正常状态。 这允许在恢复或其他取证过程中暂时存在,但不能用于正常运行/启动。 Ubuntu通过UUID挂载分区(检查/ etc / fstab),以及你将如何猜测,哪一个会被下一次挂载? 没办法告诉,这是随机的,但这个东西不应该是随机的。
访问raid后备设备有点被内核中的md代码阻塞,所以当他们在raid中时,系统只看到md0,这是一个单一的设备,你不会有问题。
要在两个磁盘上保持非RAID /引导,每次更新引导时基本上都需要克隆文件系统,然后始终更改UUID和标签。 这是容易出错和不方便的。 将/ boot作为RAID1是正常的。
我更喜欢为/ boot设置元数据1.0,因为在这种情况下元数据被放置在设备的末端,所以即使在我没有RAID支持的情况下,我也可以简单地从分区挂载文件系统,就好像没有突袭。 但如果现在为你工作,最好留下现在的东西。
您需要在两个磁盘上安装引导装载程序(grub stage1)。 您必须手动执行此操作,因为引导加载程序在任何分区之外,因此在任何MDRAIDarrays之外。
请发出以下命令: grub-install /dev/sda并重新尝试从sda启动