GRUB 无法从 RAID 1 阵列中的第二个硬盘驱动器启动

GRUB 无法从 RAID 1 阵列中的第二个硬盘驱动器启动

我已经在这上面花了几个小时(并浏览了数十篇 StackExchange 帖子),但仍然陷入困境。

我有一个采用软件 RAID 1 配置的 Debian 机器。目前机器启动正常。

我正在更换机器中的硬盘。在此过程中,我注意到我的启动过程实际上并没有按照我预期的方式镜像。当我尝试移除第一个硬盘 ( /dev/sda) 时,服务器无法启动。看来我不能单独启动(/dev/sdb)。

我尝试了几件事:

  • sudo grub-install /dev/sdb,sudo update-grub /dev/sdb
  • sudo dpkg-reconfigure grub-pcsda(请注意,当我完成此操作后,它为我提供了在、sdb和上安装的选项md0。我已经检查了sda和 ,sdb并且安装似乎成功。但当我尝试检查 时,安装失败了md0

我还会注意到,GRUB 似乎指向我的 raid 阵列 ( md0),而不是驱动器本身(即sdasdb)。我想这可能是问题所在,因为在引导期间加载 GRUB 时阵列不会启动?不过,我想我已经看到 GRUB2(我认为已安装)应该能够处理 RAID 阵列?

我很想听听人们可能有的任何想法,提前非常感谢!如果有帮助,这是我的系统配置:

# taken from grub.cfg
if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_msdos
insmod part_msdos
insmod diskfilter
insmod mdraid09
insmod ext2
set root='mduuid/73f4f8fa4b4d9ea4dbaa835b9c9612ac'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='mduuid/73f4f8fa4b4d9ea4dbaa835b9c9612ac'  20fb3f71-3911-4f65-8773-7cf6bf334
e0d
else
  search --no-floppy --fs-uuid --set=root 20fb3f71-3911-4f65-8773-7cf6bf334e0d
fi
    font="/usr/share/grub/unicode.pf2"
fi
~$ sudo blkid
/dev/sda1: UUID="73f4f8fa-4b4d-9ea4-dbaa-835b9c9612ac" TYPE="linux_raid_member"
/dev/sda5: UUID="882c3c60-15c3-d6f8-d399-c9bc0b1041c7" TYPE="linux_raid_member"
/dev/sda6: UUID="6b77ee71-58d7-20c2-e510-ea20661b7451" TYPE="linux_raid_member"
/dev/sda7: UUID="361b574d-18d0-f4a5-3076-c1e8f6240de2" TYPE="linux_raid_member"
/dev/sdb1: UUID="73f4f8fa-4b4d-9ea4-dbaa-835b9c9612ac" TYPE="linux_raid_member"
/dev/sdb5: UUID="882c3c60-15c3-d6f8-d399-c9bc0b1041c7" TYPE="linux_raid_member"
/dev/sdb6: UUID="6b77ee71-58d7-20c2-e510-ea20661b7451" TYPE="linux_raid_member"
/dev/sdb7: UUID="361b574d-18d0-f4a5-3076-c1e8f6240de2" TYPE="linux_raid_member"
/dev/md0: UUID="20fb3f71-3911-4f65-8773-7cf6bf334e0d" TYPE="ext3"
/dev/md1: TYPE="swap"
/dev/md2: UUID="089c64c1-fefc-4cb4-8b9f-f06439f6a757" TYPE="ext3"
/dev/md3: UUID="0865f8c6-95ac-4582-b7c5-9e9d02a34e8e" TYPE="ext3"
~$ lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
fd0       2:0    1     4K  0 disk  
sda       8:0    0 698.7G  0 disk  
├─sda1    8:1    0  18.6G  0 part  
│ └─md0   9:0    0  18.6G  0 raid1 /
├─sda2    8:2    0     1K  0 part  
├─sda5    8:5    0   1.9G  0 part  
│ └─md1   9:1    0   1.9G  0 raid1 [SWAP]
├─sda6    8:6    0 169.4G  0 part  
│ └─md2   9:2    0 169.4G  0 raid1 /home
└─sda7    8:7    0 465.7G  0 part  
  └─md3   9:3    0 465.7G  0 raid1 /time_mac
sdb       8:16   0 931.5G  0 disk  
├─sdb1    8:17   0  18.6G  0 part  
│ └─md0   9:0    0  18.6G  0 raid1 /
├─sdb2    8:18   0     1K  0 part  
├─sdb5    8:21   0   1.9G  0 part  
│ └─md1   9:1    0   1.9G  0 raid1 [SWAP]
├─sdb6    8:22   0 169.4G  0 part  
│ └─md2   9:2    0 169.4G  0 raid1 /home
└─sdb7    8:23   0 465.7G  0 part  
  └─md3   9:3    0 465.7G  0 raid1 /time_mac
sr0      11:0    1  1024M  0 rom 
$ sudo parted -l
Model: ATA SAMSUNG HD753LJ (scsi)
Disk /dev/sda: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system     Flags
 1      32.3kB  20.0GB  20.0GB  primary   ext3            raid
 2      20.0GB  704GB   684GB   extended
 5      20.0GB  22.0GB  1999MB  logical   linux-swap(v1)  raid
 6      22.0GB  204GB   182GB   logical   ext3            raid
 7      204GB   704GB   500GB   logical   ext3            raid


Model: ATA WDC WD1005FBYZ-0 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system     Flags
 1      32.3kB  20.0GB  20.0GB  primary   ext3            raid
 2      20.0GB  704GB   684GB   extended
 5      20.0GB  22.0GB  1999MB  logical   linux-swap(v1)  raid
 6      22.0GB  204GB   182GB   logical   ext3            raid
 7      204GB   704GB   500GB   logical   ext3            raid
$ sudo grub-probe --target=device /boot/grub
/dev/md0

答案1

一个非常有趣的问题。

你写了:

我的启动过程实际上并没有按照我预期的方式反映

我在这里看到的最简单的解决方案是,您将拥有第三个驱动器,您将在其上安装 GRUB,并且它将指向您的 raid 阵列 ( md0)(如果可能的话,并且 RAID 能够以某种方式启动而无需第二个磁盘,请参阅下面的说明)。或者,您可以尝试稍微缩小sdasdb并在任一可用空间上获取 GRUB 分区(同样,考虑到 RAID 配置允许您在没有第二个磁盘的情况下启动),但我想这不是您想要的,因为您将被迫对您拥有的每个新(替换磁盘)进行相同的操作。


要解决这个问题,GRUB 应指出:

驱动器本身(即 sda 或 sdb)

据我所知,GRUB 中没有实现处理以下子句的逻辑条件:

if (md0) is not available:
   boot from (sda)

或者

if (sda) is not available:
   boot from (sdb)

不幸的是,这就是为什么根据您目前的设置,GRUB 必须指向md0引导,并且您需要两个驱动器才能首先启动 RAID。


我以为我已经看到 GRUB2(我相信已安装)应该能够处理 RAID 阵列

确实如此,如果两个驱动器都存在并且阵列已正确启动,它就会处理 RAID 阵列。在您的情况下(删除其中一个驱动器),GRUB 已加载,但它指向“尚未启动阵列”( md0),因此系统将无法启动。

换句话说,一旦您决定使用 RAID,您就需要两个(两个)驱动器。您不能简单地切换到具有完全相同 GRUB 设置的一个。


我看到的唯一可行的(理论上的)解决方案是拥有一些外部分区和 GRUB,或者某种自定义的低级服务(实现逻辑),在这个单独的分区上运行,管理您可能遇到的所有情况。想:

  1. 启动至md0板载sdasdb板载
  2. 启动只是为了sda
  3. 启动只是为了sdb

老实说,我写的是“理论”,因为我不确定是否可以忽略 或 上的 RAIDsda部分sdb。类似地,正如您所期望的,这种跳过/忽略/无视最初配置 RAID 的事实可能应该由 RAID 配置本身来处理,而不是由 GRUB 来处理(同样,也许)。无论这是事实,还是它应该按照我们希望的方式运作——我不能说,其他人必须对此发表评论。


最后,我很遗憾地说,但不幸的是,GRUB 和 RAID 似乎并没有按照您希望的方式设计。这并不意味着此类功能永远不会实现,它肯定可以实现。做自己想做的事是非常罕见的。

通常,正如我所听到的,您只需更换磁盘,然后继续将 GRUB 指向md0.您不希望系统能够单独使用一张磁盘。我当然可能是错的,但你征求了所有意见,所以这是我的。祝你的问题好运。我将关注这个问题,因为我真的对潜在的解决方案感到好奇。

答案2

谢谢米科拉伊!

我想跟进并羞涩地分享我找到了问题所在!看来我所要做的就是交换驱动器连接,以便以前的驱动器/dev/sdb连接到原来的/dev/sda位置。那时,启动一切顺利!

相关内容