我已经在这上面花了几个小时(并浏览了数十篇 StackExchange 帖子),但仍然陷入困境。
我有一个采用软件 RAID 1 配置的 Debian 机器。目前机器启动正常。
我正在更换机器中的硬盘。在此过程中,我注意到我的启动过程实际上并没有按照我预期的方式镜像。当我尝试移除第一个硬盘 ( /dev/sda
) 时,服务器无法启动。看来我不能单独启动(/dev/sdb
)。
我尝试了几件事:
sudo grub-install /dev/sdb
,sudo update-grub /dev/sdb
sudo dpkg-reconfigure grub-pc
sda
(请注意,当我完成此操作后,它为我提供了在、sdb
和上安装的选项md0
。我已经检查了sda
和 ,sdb
并且安装似乎成功。但当我尝试检查 时,安装失败了md0
。
我还会注意到,GRUB 似乎指向我的 raid 阵列 ( md0
),而不是驱动器本身(即sda
或sdb
)。我想这可能是问题所在,因为在引导期间加载 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 能够以某种方式启动而无需第二个磁盘,请参阅下面的说明)。或者,您可以尝试稍微缩小sda
和sdb
并在任一可用空间上获取 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,或者某种自定义的低级服务(实现逻辑),在这个单独的分区上运行,管理您可能遇到的所有情况。想:
- 启动至
md0
板载sda
和sdb
板载 - 启动只是为了
sda
- 启动只是为了
sdb
老实说,我写的是“理论”,因为我不确定是否可以忽略 或 上的 RAIDsda
部分sdb
。类似地,正如您所期望的,这种跳过/忽略/无视最初配置 RAID 的事实可能应该由 RAID 配置本身来处理,而不是由 GRUB 来处理(同样,也许)。无论这是事实,还是它应该按照我们希望的方式运作——我不能说,其他人必须对此发表评论。
最后,我很遗憾地说,但不幸的是,GRUB 和 RAID 似乎并没有按照您希望的方式设计。这并不意味着此类功能永远不会实现,它肯定可以实现。做自己想做的事是非常罕见的。
通常,正如我所听到的,您只需更换磁盘,然后继续将 GRUB 指向md0
.您不希望系统能够单独使用一张磁盘。我当然可能是错的,但你征求了所有意见,所以这是我的。祝你的问题好运。我将关注这个问题,因为我真的对潜在的解决方案感到好奇。
答案2
谢谢米科拉伊!
我想跟进并羞涩地分享我找到了问题所在!看来我所要做的就是交换驱动器连接,以便以前的驱动器/dev/sdb
连接到原来的/dev/sda
位置。那时,启动一切顺利!