我有一个管理的 RAID 10 阵列,mdadm但它失败了。症状是 X 崩溃了,我无法从终端登录。我已经重新启动了计算机,/dev/md1但没有启动。
我收集了以下信息 - 有些信息不完整,因为我已手动将其复制到另一台计算机:
$ cat /proc/mdstat
....
md1 : inactive sdb3[1](S) sdd1[3](S) sdc2[2](S) sda1[0](S)
1250273760 blocks super 1.0
Run Code Online (Sandbox Code Playgroud)
挂载失败
$ mount /dev/md1
EXT4-fs (md1): unable to read superblock
Run Code Online (Sandbox Code Playgroud)
扫描确实找到了元数据
$ mdadm --examine --scan
...
ARRAY /dev/md/1 metadata=1.0 UUID=2c... name=linux:1
Run Code Online (Sandbox Code Playgroud)
由于缺少操作镜像,运行失败
$ mdadm --run /dev/md1
md/raid0:md1: not enough operational mirrors.
md: pers->run() failed...
mdadm:failed to run array /dev/md1: Input/output error
Run Code Online (Sandbox Code Playgroud)
运行尝试后,只有两个磁盘仍在阵列中
$ cat /proc/mdstat
....
md1 : inactive sdd1[3] sdc2[2]
62513638 …Run Code Online (Sandbox Code Playgroud) 我正在两个相同的 Seagate 1GB 驱动器上运行 Fedora 19(内核 3.11.3-201.fc19.x86_64)以及软件 RAID-1 (mdadm) 设置:
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
973827010 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
最近,两个驱动器之一出现一些错误:smartd 检测到“1 个当前无法读取(待处理)扇区”和“1 个脱机不可纠正扇区”。RAID阵列“重新安排”了一些扇区。大约一天后,内核产生了各种 I/O 消息/异常:
Oct 18 06:39:20 x smartd[461]: Device: /dev/sdb [SAT], 1 Currently unreadable (pending) sectors
Oct 18 06:39:20 x smartd[461]: Device: /dev/sdb [SAT], 1 Offline uncorrectable sectors
...
Oct 18 07:09:20 x smartd[461]: Device: /dev/sdb [SAT], 1 Currently unreadable (pending) sectors
Oct 18 07:09:20 x …Run Code Online (Sandbox Code Playgroud) 谁能告诉我 mdadm 的不同元数据版本之间的区别?
当我尝试命令时mdadm --examine /dev/sda1,我似乎无法在 1.2 版上找到“首选超级块”。此字段显示在元数据版本 0.9 中。
有没有办法获得这样的元数据信息?或者mdadm --examine只是我将要获得的 1.2 版信息的输出?
我最近收到一封自动电子邮件,上面写着“警告:/dev/md3 上的 mismatch_cnt 不是 0”。
我在 CentOS 6.6 上使用 mdadm 运行软件 RAID5 阵列
当谷歌搜索消息时,我发现了这个:-
检查操作会扫描驱动器中的坏扇区并自动修复它们。如果它发现好的扇区包含坏数据(一个扇区中的数据与来自另一个磁盘的数据所表明的不一致,例如奇偶校验块+其他数据块会导致我们认为该数据块不正确),则不采取任何操作,但会记录事件。这种“无所作为”允许管理员检查扇区中的数据以及通过从冗余信息重建扇区并选择要保留的正确数据而产生的数据。
我的问题是,如何检查数据并选择要保留的正确数据?似乎没有提到如何在任何地方执行此操作,我不知道这些扇区正在影响哪些文件
这应该很简单,但我一直无法通过搜索找到直接答案。
我发现,如果我卸载 mdadm 管理的阵列,然后 (1) 拔下阵列的插头,(2) 关闭阵列所在机柜的电源,(3) 重新启动系统,或 (4) 关闭系统,则会出现mdadm问题有关检测到失败事件的警报:
This is an automatically generated mail message from mdadm
running on <hostname>
A Fail event had been detected on md device /dev/md0.
It could be related to component device /dev/sdc1.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1]
md0 : active (auto-read-only) raid1 sdc1[1](F) sdb1[0]
1952984000 blocks super 1.2 [2/1] [U_]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
RAID 看起来很好并且可以轻松恢复。为了避免生成此警报,我必须mdadm --stop /dev/md0在卸载之后、断开连接或重新启动之前执行吗?对于例行系统重新启动和关闭,是否应将此命令包含在脚本中/etc/init.d/并在 …
我已经在旧 HDD 上安装了带有 ArchLinux 的自己的 NAS。\n我想添加 3x4To 以获得真正的存储功能,并且我想使用带有这 3 个磁盘的 RAID5 系统。
\n\n我读过很多关于 ZFS Raid-z 的内容,这正是我想做的。\n但我听说过 Btrfs,而且 Btrfs 似乎也能够像 ZFS 一样处理软件 RAID-5。\n但我想知道 Btrfs 是否可以RAID 和 ZFS 一样工作。我也找不到有关如何创建和管理 raid 的完整信息。\n所以我的问题是:
\n\n感谢您的帮助 :)
\n我使用 SSD 和 NVME RAID1 阵列来存储大部分虚拟机磁盘。超过 75% 的数据为零(预先分配的图像、可用空间)。
如果磁盘出现故障并被替换,重建会将所有数据复制并写入替换磁盘,这会导致 NVME 中的热节流,并且我认为 SSD/NVME 上的磨损会更多。有没有办法将重建配置为首先比较两个磁盘中的数据,然后仅在需要时才写入新磁盘?
或者 SSD/NVME 芯片是否应该检查数据是否只是零,如果目标块尚未写入(读取时给出零),它只会丢弃数据而不浪费写入周期?或者,如果有任何目标数据,是否应该只修剪块以产生零?
我在https://www.spinics.net/lists/raid/msg57529.html找到了一个旧线程 ,但它没有提供答案。
我尝试了一种解决方法,但我认为它很难看,而且 RAID 必须离线。
mdadm --fail /dev/md0 /dev/sde
mdadm -r /dev/md0 /dev/sde
Run Code Online (Sandbox Code Playgroud)
(替换/dev/sde)
mdadm -S /dev/md0
ddpt if=/dev/sdd of=/dev/sde verbose=1 oflag=sparing
mdadm -C -v /dev/md0 --assume-clean -l 1 -n 2 /dev/sdd /dev/sde
Run Code Online (Sandbox Code Playgroud)
对于比较写入 RAID1 重建有什么想法吗?谢谢。
我4 x 4 TB在 raid5 阵列中配置了一个驱动器。
驱动器标记为/dev/sdb1, /dev/sdc1, /dev/sdd1&/dev/sde1组装为/dev/md0
mdadm 汇编输出
当我尝试组装数组时,我得到:
sudo mdadm --assemble /dev/md0
mdadm: failed to RUN_ARRAY /dev/md0: Invalid argument
Run Code Online (Sandbox Code Playgroud)
dmesg -T 输出
感兴趣的输出:
[Sun Dec 27 00:15:35 2020] md/raid:md0: device sdc1 operational as raid disk 0
[Sun Dec 27 00:15:35 2020] md/raid:md0: device sdd1 operational as raid disk 3
[Sun Dec 27 00:15:35 2020] md/raid:md0: device sdb1 operational as raid disk 2
[Sun Dec 27 00:15:35 2020] …Run Code Online (Sandbox Code Playgroud) 将两个 PCIe NVMe SSD 配置为 raid1 Linux 软件 raid 而不是提高读取性能,读取速度大约减半。
在类似的 Linux 软件 raid1 设置(还有 SSD)中,我看到读取性能有所提高,因为现在可以使用两个镜像块设备进行读取。
解决此性能问题的潜在原因和调查路线是什么?
基准用做fio读与4K上/dev/md125(的RAID1),/dev/nvme1n1和/dev/nvme0n1它的成员。从它们读取比从 读取更快/dev/md125。
使用软件 Linux raid1 的其他人似乎也面临着违反直觉的速度降低,而不是使用 raid1 读取速度提高(参见https://serverfault.com/questions/235199/poor-software-raid10-read-performance-on-linux)。
以下是一些使用 fio 并同时进行随机 4k 读取的性能基准测试,/dev/nvme1n1p1以及/dev/nvme0n1p1我得到的设备:
fio4k /dev/nvme1n1p1
[...]
read: IOPS=637k, BW=2487MiB/s (2608MB/s)(146GiB/60001msec)
fio4k /dev/nvme0n1p1
read: IOPS=652k, BW=2545MiB/s (2669MB/s)(149GiB/60001msec)
Run Code Online (Sandbox Code Playgroud)
如果我同时生成一个 raid1 /dev/md125( /dev/nvme1n1p1, /dev/nvme0n1p1, 甚至跳过位图以免造成任何负面影响)
mdadm --verbose --create /dev/md/raid1_nvmes --bitmap=none --assume-clean --level=1 --raid-devices=2 /dev/nvme0n1p1 /dev/nvme1n1p1
fio4k /dev/md125 …Run Code Online (Sandbox Code Playgroud) 我有一个健康的 RAID5 阵列,有 5 个磁盘:
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[6] sdd1[0] sdh1[5] sdf1[2] sde1[1]
31255166976 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
bitmap: 0/59 pages [0KB], 65536KB chunk
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
我想将一个磁盘移动到服务器上的另一个物理插槽,而不关闭服务器。(插槽支持热插拔)
我可以安全地卸载阵列、移动磁盘并重新安装阵列,而不会进入降级模式吗?
software-raid ×10
mdadm ×6
raid ×6
linux ×2
raid5 ×2
arch-linux ×1
btrfs ×1
debian ×1
fedora ×1
performance ×1
raid1 ×1
reboot ×1
ssd ×1
ubuntu ×1
zfs ×1