我开始在家里收集计算机并支持它们,我有我的“服务器”linux 机器运行 RAID 阵列。
目前mdadm RAID-1,RAID-5一旦我有更多的驱动器(然后RAID-6我希望)。但是,我听说过有关数据在一个驱动器上损坏的各种故事,并且您从未注意到由于使用了另一个驱动器,直到第一个驱动器出现故障,并且您发现第二个驱动器也被拧紧(以及第 3、第 4 个驱动器) ,第 5 个驱动器)。
显然备份很重要,我也在处理这个问题,但是我知道我以前看过声称可以帮助解决这个问题并允许您在运行时检查 RAID 的脚本。但是,现在再次查找这些脚本时,我发现很难找到与我之前运行的内容相似的任何内容,而且我觉得我已经过时并且不了解发生了什么变化。
您将如何检查正在运行的 RAID 以确保所有磁盘仍在正常执行?
我监控所有驱动器上的 SMART,并mdadm设置在出现故障时给我发送电子邮件,但我想知道我的驱动器偶尔也会“检查”自己。
有人可以向我解释一下,mdadm直接使用分区或整个磁盘创建阵列有什么区别?假设我打算使用整个驱动器。
想象一下以两种方式创建的 RAID6,其中一种是:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
Run Code Online (Sandbox Code Playgroud)
或者:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
Run Code Online (Sandbox Code Playgroud)
这两种变体中的任何一种有什么区别,以及可能出现的问题?
例如,我指的是此类阵列上的可靠性或可管理性或恢复操作等。
我在 4 个磁盘上有一个软件 RAID5 阵列(Linux md)。
我想用一个新磁盘替换其中一个磁盘,而不是将阵列置于降级状态,如果可能,联机。这怎么可能?
这很重要,因为我不想:
我想在网上这样做要求太多了,我应该dd将旧磁盘的数据原始复制 ( ) 到新磁盘,然后离线替换它,但我认为理论上是可能的......
一些背景:这些磁盘几乎都在连续旋转超过 5.5 年。目前,它们仍然可以完美运行,并且都通过了(长时间的)SMART 自检。但是,我有理由认为这 4 个磁盘中的一个不会持续太久(假设是预测性故障)。
有人可以解释blkid和报告的 UUID 之间的区别mdadm吗?例如,在我们的 CentOS 系统之一上:
[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="32cb0a6e-8148-44e9-909d-5b23df045bd1" TYPE="ext4"
[root@server ~]# mdadm --detail /dev/md1 | grep UUID
UUID : f204c558:babf732d:85bd7296:bbfebeea
Run Code Online (Sandbox Code Playgroud)
为什么它们不同,我们将如何更改 使用的 UUID mdadm?
我知道我们会tune2fs用来更改分区的 UUID(这会更改 返回的内容blkid),但不确定如何更改mdadm使用的内容。
我有两台具有不同 RAID5 阵列的不同计算机。当我运行命令时
mdadm --detail /dev/md0
Run Code Online (Sandbox Code Playgroud)
一个驱动器报告“活动”,而另一个报告“状态”字段的“干净”。有什么不同?我应该担心这两种状态吗?两者似乎都工作正常。
我有一个要为其创建镜像的磁盘;我们称之为磁盘sda。我刚买了另一个同样大小的磁盘,我们可以称之为sdb. sda并且sdb有一个称为一个分区sda1并sdb1分别。
创建突袭时,我不想sda清理干净并重新开始,我只是希望它以sdb. 我的思路是这样做:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1
Run Code Online (Sandbox Code Playgroud)
...创建没有sdb磁盘的阵列,然后运行类似的东西(我正在大声思考以下命令,因为我不确定如何实现这一步)
mdadm /dev/md0 --add /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
sdb1假设Note 的格式类似于sda1
这可能吗?
我使用以下命令创建了一个新的 md 数组:
mdadm --create /dev/md1 -l 1 -n 2 /dev/sd[ed]1
Run Code Online (Sandbox Code Playgroud)
但是现在/proc/mdstat将数组显示为“自动只读”,resync=PENDING:
~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sde1[1] sdd1[0]
976630336 blocks super 1.2 [2/2] [UU]
resync=PENDING
md0 : active raid1 sdb1[0] sdc1[1]
1953511936 blocks [2/2] [UU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
根据这个网站,我可以用以下方法解决这个问题:
mdadm --readwrite /dev/md1
Run Code Online (Sandbox Code Playgroud)
这确实有效:
~ # mdadm --readwrite /dev/md1
~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sde1[1] sdd1[0]
976630336 blocks super 1.2 [2/2] [UU]
[>....................] …Run Code Online (Sandbox Code Playgroud) 不久前,我mdadm在 RAID6 中创建了具有 4 个驱动器的新软件 RAID 阵列 ( )。它似乎工作得很好。mdstat如下:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sda1[0] sde1[3] sdd1[2] sdb1[1]
1953260544 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 0/8 pages [0KB], 65536KB chunk
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
困扰我的是bitmap: 0/8 pages我不明白的部分。
问题是:这是一个潜在的问题吗?请详细说明位图的实际含义。
此数组的完整详细信息如下:
/dev/md0:
Version : 1.2
Creation Time : Tue Nov 1 13:44:13 2016
Raid Level : raid6
Array Size : 1953260544 (1862.77 GiB …Run Code Online (Sandbox Code Playgroud) 在较新的系统上/usr/share/mdadm/mkconf(用于生成的脚本/etc/mdadm/mdadm.conf)倾向于使用设备名称/dev/md/0而不是/dev/md0:
new-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md/0 metadata=1.2 UUID=a0021927:0e4f10bf:2c47dc72:ca0b352e name=unassigned:0
Run Code Online (Sandbox Code Playgroud)
这可能会给期望/dev/md0在那里的用户带来一些刺激,但显然它运行良好,因为服务器启动时没有问题。
在/proc/mdstat设备中仍称为/dev/md0:
new-system ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[2] sda2[0]
1953381184 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)
ls显示这/dev/md/0是一个符号链接/dev/md0:
new-system ~ # ls -l /dev/md/0
lrwxrwxrwx 1 root root 6 Nov 20 14:06 /dev/md/0 -> ../md0
Run Code Online (Sandbox Code Playgroud)
在另一个旧系统上mkconf仍然使用/dev/md0,并且 …
我即将在我的家用 linux 机器 nas 中重新组织我的所有 HDD,并希望使用 mdadm raid 进行数据保护及其重新调整阵列的灵活性。但是,在为此使用 mdadm 之前,我想知道它是如何处理bit rot 的。特别是不会导致从 HDD 发送的不可恢复的读取错误消息的位腐烂类型。
由于我很可能会使用硬盘驱动器的至少21TB在NAS 8个磁盘,并在各种行情概率的故障HDD上,我在想,期间从单个磁盘故障重建我非常有可能遭遇剩余磁盘上的某种形式的位腐烂。如果其中一个驱动器出现不可恢复的读取错误,驱动器实际上将其报告为错误,我相信raid6 应该没问题(是吗?)。但是,如果从磁盘读取的数据是错误的但磁盘没有报告,那么即使使用raid6,我也看不到如何自动更正。这是我们需要关心的事情吗?鉴于文章It is 2010 and RAID5 仍然有效,以及我自己在家庭和工作中的成功经验,事情并不一定像流行语和营销让我们相信的那样悲观和悲观,但我讨厌仅仅因为硬盘故障而不得不从备份中恢复。
鉴于使用模式将是,最多写入几次,偶尔读取,我需要执行数据清理。我在archlinux wiki上看到 用于数据清理数组的 mdadm 命令为
echo check > /sys/block/md0/md/sync_action
Run Code Online (Sandbox Code Playgroud)
然后监控进度
cat /proc/mdstat
Run Code Online (Sandbox Code Playgroud)
在我看来,它会读取所有磁盘的所有扇区并检查数据是否与奇偶校验匹配,反之亦然。尽管我注意到文档中非常强调在某些重要情况下“检查”操作将无法自动更正,只能检测,并且将由用户来修复。
我应该选择什么 mdadm RAID 级别来最大限度地防止位腐烂,我应该做哪些维护和其他保护步骤?这不能保护我免受什么伤害?
编辑:我不打算开始 RAID vs ZFS 或任何其他技术 QA。我想特别了解 mdadm raid。这也是为什么我在 Unix & Linux 而不是SuperUser上询问的原因。
编辑:答案是: mdadm 只能更正数据清理期间磁盘系统报告的 URE,并在清理期间检测静默位腐烂但不能/不会修复它?