我有一个 RAID1 阵列,很长时间以来每次系统启动时我都必须手动重建它。从来没有时间弄清楚为什么。这是我每次启动时用来重建它的命令:
sudo mdadm --build /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sde1
这很有效,不会丢失任何数据。然后我可以手动将 /dev/md0 挂载到我需要的位置(在本例中为 /mnt/plex)。但是,我刚刚在服务器上安装了第三个硬盘,我想升级到 RAID5。我使用 cfdisk 在我的驱动器上创建了一个分区。
然后我将阵列升级为 RAID5:
sudo mdadm --grow /dev/md0 -l 5
然后,我将新驱动器添加到阵列
sudo mdadm /dev/md0 --add /dev/sda1
最后,我尝试将阵列增加到 3 个驱动器,
sudo mdadm /dev/md0 --grow -n 3
此时出现以下错误:
mdadm: ARRAY line /dev/md0 has no identity information.
mdadm: /dev/md0: cannot get superblock from /dev/sda1
第一个错误经常出现,第二个错误导致了这个问题。为什么我不能将 /dev/sda1 添加到阵列中?既然如此,为什么系统启动时阵列没有自动构建?
如果有帮助的话,这是我的驱动器/分区:
sda 8:0 0 3.7T 0 disk
+-sda1 8:1 0 3.7T 0 part
+-md0 9:0 0 3.7T 0 raid5 /mnt/plex
sdb 8:16 0 3.7T 0 disk
+-sdb1 8:17 0 3.7T 0 part
+-md0 9:0 0 3.7T 0 raid5 /mnt/plex
sdc 8:32 0 931.5G 0 disk
+-md1 9:1 0 931.4G 0 raid1 /mnt/nas
sdd 8:48 0 931.5G 0 disk
+-md1 9:1 0 931.4G 0 raid1 /mnt/nas
sde 8:64 0 3.7T 0 disk
+-sde1 8:65 0 3.7T 0 part
+-md0 9:0 0 3.7T 0 raid5 /mnt/plex
sdf 8:80 0 149.1G 0 disk
+-sdf1 8:81 0 512M 0 part /boot/efi
+-sdf2 8:82 0 148.6G 0 part /
SDB 和 SDF 是正常运行的 RAID 成员。以下是来自 mdadm 的阵列详细信息(如果有帮助)
gradyn@hbi-server:~$ sudo mdadm --detail /dev/md0
mdadm: ARRAY line /dev/md0 has no identity information.
/dev/md0:
Version :
Creation Time : Thu Oct 14 22:19:50 2021
Raid Level : raid5
Array Size : 3906886464 (3725.90 GiB 4000.65 GB)
Used Dev Size : 3906886464 (3725.90 GiB 4000.65 GB)
Raid Devices : 2
Total Devices : 3
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Consistency Policy : resync
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 65 1 active sync /dev/sde1
2 8 1 - spare /dev/sda1
答案1
如果你需要发出mdadm --build
组装数组,这意味着你创建了一个“旧式”数组,使用没有超级块换句话说,阵列几何形状(和其他元数据)不是存储在受影响的磁盘上,而系统期望这些信息在命令行上提供,或者在名为/etc/mdadm.conf
关于另一个问题(无法添加第三个活动磁盘),让我们看看手册页中关于--build
(无超级块)阵列的内容:
与 --build 一起使用时,只有 linear、stripe、raid0、0、raid1、multipath、mp 和aulty 有效。
如您所见,RAID5 不适用于传统阵列。通过发出第一个--grow
命令,您强制系统进入意外情况,而后面的命令--add
只能将新磁盘设置为备用磁盘。--grow
然后第二个命令失败,因为它无法在成员磁盘上找到有效的超级块。
我强烈建议您备份数据,并重新创建一个具有超级块和写入位图的 RAID5 阵列。要做到这一点,您只需使用mdadm
默认设置。换句话说,
mdadm --create /dev/md0 -l 5 -n 3 /dev/sda1 /dev/sdb1 /dev/sde1
应该足够了。一定要理解上面的命令将从受影响的磁盘中删除所有数据,就这样当然在发布之前要有一个确认良好的备份。