就这样,事情发生了:我的 Linux 机器上的软件 RAID5 不知何故失败了,现在拒绝组装。
设置概述:
- 无头服务器运行Debian 杰西 8.6(目前稳定)
- 定制的Linux 内核 v4.8.8(见下文),主要基于官方 Debian 软件包 - 主要是为了更新 BTRFS 代码
- 截至 2016 年 11 月 18 日,所有软件包均已更新
- 总共四个硬盘:
/dev/sda
被分区为/boot/efi
、 交换 和/
(按此顺序)/dev/sdb
是 RAID 成员(无分区表)/dev/sd[cd]
每个都有一个跨越整个驱动器的分区,并且sd[cd]1
是 RAID 的成员sda
是500GB,sd[bcd]
是4TB磁盘。sd[cd]1
分区的大小完全相同,sdb
根本不分区的大小稍大(浪费一些空间,否则这些空间将用于分区表)。
- 组装成 后
/dev/md0
,RAID 进一步分区,单个分区/dev/md0p1
跨越整个多磁盘,然后保存 BTRFS 文件系统。 (这是由 Debian 安装程序设置的,现在更改已经太晚了。)
我最近买了第五张磁盘,到达时就坏了。在将磁盘添加到服务器后不久,我就不得不离开该站点,所以直到一两天后我才注意到这一事实,但由于这个新磁盘还不是 RAID 的一部分,所以这不会改变任何事情。
当我添加新购买的磁盘时,服务器运行内核 4.8.7,一切看起来都很好。我编译了内核版本 4.8.8 并安装了它,使用 关闭服务器systemctl poweroff
,删除死磁盘并尝试重新启动。由于服务器通常是无头的,我只能看到它在大约 5 分钟的宽限时间后没有恢复。简单地按电源按钮它不会做出反应,所以我切断了电源,添加了显卡(它没有内部显卡)+显示器+键盘,随后出现了systemd
紧急外壳。
我获得了包含先前内核和当前内核的紧急 shell,因此我认为这不是原因,或者损坏已经造成。我目前正在dd
将所有三个 RAID 磁盘插入/dev/null
以排除可能的物理磁盘故障,但由于它们已经超过 1TB 插入磁盘且没有任何错误,我假设任何磁盘上的超级块都没有物理损坏。
说得够多了,让我们更具体一些。以下所有命令都是从紧急 root shell 发出的,即基本系统正在运行(不是 initrd)。
/proc/mdstat
对 RAID 一无所知:
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>
这就是我得到的mdadm --assemble --verbose /dev/md0
:(/dev/sde
这是一个外部 USB 硬盘,我用它来提取这些日志)
mdadm: looking for devices for /dev/md0
mdadm: no RAID superblock on /dev/sde1
mdadm: no RAID superblock on /dev/sde
mdadm: no RAID superblock on /dev/sdd
mdadm: no RAID superblock on /dev/sdc
mdadm: no RAID superblock on /dev/sda3
mdadm: no RAID superblock on /dev/sda2
mdadm: no RAID superblock on /dev/sda1
mdadm: no RAID superblock on /dev/sda
mdadm: /dev/sdd1 is identified as a member of /dev/md0, slot 2.
mdadm: /dev/sdc1 is identified as a member of /dev/md0, slot 1.
mdadm: /dev/sdb is identified as a member of /dev/md0, slot 0.
mdadm: failed to add /dev/sdc1 to /dev/md0: Invalid argument
mdadm: failed to add /dev/sdd1 to /dev/md0: Invalid argument
mdadm: added /dev/sdb to /dev/md0 as 0
mdadm: failed to RUN_ARRAY /dev/md0: Input/output error
...这些行journalctl
:
Nov 18 14:56:34 zoey kernel: md: sdc1 does not have a valid v1.2 superblock, not importing!
Nov 18 14:56:34 zoey kernel: md: md_import_device returned -22
Nov 18 14:56:34 zoey kernel: md: sdd1 does not have a valid v1.2 superblock, not importing!
Nov 18 14:56:34 zoey kernel: md: md_import_device returned -22
Nov 18 14:56:34 zoey kernel: md: bind<sdb>
Nov 18 14:56:34 zoey kernel: md/raid:md0: device sdb operational as raid disk 0
Nov 18 14:56:34 zoey kernel: md/raid:md0: allocated 3316kB
Nov 18 14:56:34 zoey kernel: md/raid:md0: not enough operational devices (2/3 failed)
Nov 18 14:56:34 zoey kernel: RAID conf printout:
Nov 18 14:56:34 zoey kernel: --- level:5 rd:3 wd:1
Nov 18 14:56:34 zoey kernel: disk 0, o:1, dev:sdb
Nov 18 14:56:34 zoey kernel: md/raid:md0: failed to run raid set.
Nov 18 14:56:34 zoey kernel: md: pers->run() failed ...
Nov 18 14:56:34 zoey kernel: md: md0 stopped.
Nov 18 14:56:34 zoey kernel: md: unbind<sdb>
Nov 18 14:56:34 zoey kernel: md: export_rdev(sdb)
哦不,超级块坏了,甚至mdadm --assemble --force
无法组装!让我们看看有什么mdadm --examine
要说的:
/dev/sdb:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : cdab20e2:45150011:f10d83fe:f0299188
Name : zoey:0 (local to host zoey)
Creation Time : Fri Sep 26 17:23:15 2014
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 7813840560 (3725.93 GiB 4000.69 GB)
Array Size : 7813770240 (7451.79 GiB 8001.30 GB)
Used Dev Size : 7813770240 (3725.90 GiB 4000.65 GB)
Data Offset : 196608 sectors
Super Offset : 8 sectors
Unused Space : before=196520 sectors, after=70320 sectors
State : clean
Device UUID : 1751c53f:c527c4cd:10e8f426:0217bf5e
Update Time : Fri Nov 18 04:02:16 2016
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 7fa86509 - correct
Events : 112125
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 0
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : cdab20e2:45150011:f10d83fe:f0299188
Name : zoey:0 (local to host zoey)
Creation Time : Fri Sep 26 17:23:15 2014
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 7813902336 (3725.96 GiB 4000.72 GB)
Array Size : 7813770240 (7451.79 GiB 8001.30 GB)
Used Dev Size : 7813770240 (3725.90 GiB 4000.65 GB)
Data Offset : 196608 sectors
Super Offset : 8 sectors
Unused Space : before=196528 sectors, after=66560 sectors
State : clean
Device UUID : 0c60e19b:daff087f:c1f09dbb:41bb80c3
Update Time : Fri Nov 18 04:02:16 2016
Checksum : 866cea0a - correct
Events : 112125
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 1
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdd1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : cdab20e2:45150011:f10d83fe:f0299188
Name : zoey:0 (local to host zoey)
Creation Time : Fri Sep 26 17:23:15 2014
Raid Level : raid5
Raid Devices : 3
Avail Dev Size : 7813902336 (3725.96 GiB 4000.72 GB)
Array Size : 7813770240 (7451.79 GiB 8001.30 GB)
Used Dev Size : 7813770240 (3725.90 GiB 4000.65 GB)
Data Offset : 196608 sectors
Super Offset : 8 sectors
Unused Space : before=196528 sectors, after=66560 sectors
State : clean
Device UUID : e80a2296:dfadb7ad:e458e491:bf1d12b0
Update Time : Fri Nov 18 04:02:16 2016
Checksum : 72340d8d - correct
Events : 112125
Layout : left-symmetric
Chunk Size : 512K
Device Role : Active device 2
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
mdadm --examine --scan --verbose
似乎也发现所有磁盘都很好:
ARRAY /dev/md/0 level=raid5 metadata=1.2 num-devices=3 UUID=cdab20e2:45150011:f10d83fe:f0299188 name=zoey:0
devices=/dev/sdd1,/dev/sdc1,/dev/sdb
mdadm.conf
当我第一次安装当前操作系统时,也可以在 Debian 安装程序为我生成的文件中找到这一行(我没有手动更改此文件,因为这么长时间以来一切都工作正常):
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST <system>
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
ARRAY /dev/md/0 metadata=1.2 UUID=cdab20e2:45150011:f10d83fe:f0299188 name=zoey:0
# This file was auto-generated on Fri, 26 Sep 2014 18:10:27 +0200
# by mkconf 3.2.5-5
SMART 还表示,所有磁盘一切正常,除了有时/dev/sdc
会出现异常高的气流温度In_The_Past
- 但温度问题已得到解决,并且所有其他值(最显着的重新分配/挂起扇区 = 0)均在可接受的范围内驱动器。
device mapper
我尝试在物理块设备上的覆盖层上重新创建 RAID 。但是,该设置无法识别 RAID 内的分区表,从而无法挂载文件系统。您可以在这里找到打字稿。
这就是我不知所措的地方。整个 RAID 对我来说看起来很好,那么为什么md
驱动程序会拒绝组装呢?有什么我可以尝试的事情可以提高我成功的机会吗?
答案1
最简单的解决方案是:--update=devicesize
在组装时添加。
我不知道如何,但显然分区大小和 md 记住的该驱动器的大小不再匹配。为大家干杯德国 ubuntu 用户论坛他们通过手动十六进制编辑煞费苦心地解决了他们的问题,最后找到了正确的切换到mdadm
.