新手教程
📇新手教程:什么是校验盘,校验盘有什么作用
00 分钟
2023-9-4
2024-8-17
type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
Unraid 官方的校验盘说明文档:

1、什么是校验盘(Parity Disks)

unRAID 的校验盘用于保护阵列硬盘的数据,采用奇偶校验机制来实现数据的冗余和重建。
有一块校验盘的情况下可以允许阵列中的一块硬盘损毁而不丢失数据;如果有两块校验盘则允许两块硬盘损毁而不丢失数据。
unRAID 最多只可以添加两块校验盘,并且需要注意的是,校验盘只能保护阵列里的硬盘数据,缓存池的数据不受校验盘保护。

2、校验盘的工作原理

2.1、奇偶校验的过程

校验盘通过对阵列里面所有硬盘的数据进行奇偶求和之后得到校验数据,当阵列里面有硬盘出现故障或者数据不完整时,校验盘就可以通过校验数据对数据进行重建或者校正,实现数据保护的目的。
需要说明的是,校验数据不是一般的文件数据,因此校验盘是没有文件系统格式的(如下图)。
notion image
我们知道,计算机存储数据的最小单位是比特 bit ,因此你可以理解硬盘里面的数据是一串长长的“比特流”,而这一长串的比特流是由 01 组成的,如:
在上面的图片中,阵列里面有三个硬盘,每个盘里面所存储的数据量不同,因此他们里面“比特流”( 01 )长短也不一样。
为了保护阵列里面的这些硬盘,此时我们引入校验盘(Parity):
notion image
由于校验盘需要对阵列里面所有硬盘的数据进行计算,因此使用校验盘有一个硬性要求 —— 校验盘的容量一定要大于等于阵列里面最大的那一个硬盘。
比如说阵列里容量最大的那一个硬盘是 16T,那么当你使用校验盘时就必须使用大于或者等于 16T 的硬盘。
从上面的图片中可以看到,校验盘会对每个硬盘在同一位置(同一列)的数据进行奇偶求和,如果求和出来的是偶数,那么用 0 表示;如果是奇数,那么用 1 表示。
比如第一列数据中,Disk1、Disk2 和 Disk3 的数据都是 0 ,那么求和之后也为 0 ),因此校验盘就会在同一位置写入数值 0 ;而第二列的数据中是 一个 1 与两个 0 ,求和出来的是奇数 1 ),因此校验盘就会在同一位置写入数值 1 ;如果是 ,那么得到的值是 —— 为奇数,用 1 表示。
通过上面的计算过程可以知道,不管你有多少个硬盘,最终都可以求和得出 0 或者 1 ,所以这也是为什么一个奇偶校验盘就可以实现数据保护。
在有一个校验盘的情况下,只有校验盘和一个数据盘同时损坏才会导致数据的直接丢失(不可恢复),但是这种情况很少见,一般不需要太担心。如果你实在担心,你可以再增加一个校验盘,这样即使一个校验盘和一个阵列数据盘同时损坏(或者两个阵列数据盘同时损坏),那么也不会导致数据的直接丢失。

2.1、数据的重建

notion image
如上图所示,假设 Disk 2 出现了问题以至硬盘内的数据无法被读取,那么此时校验盘借助已经存储的校验数据依然可以保证阵列数据的完整性,那么校验盘如何实现数据冗余/数据重建?
假如遇到阵列硬盘出现问题时,你可以选择将数据拷贝出来或者使用新的硬盘来进行数据重。我建议在重建数据之前可以先把重要的数据拷贝出来,如果没什么重要的数据,那么直接重建即可。
前面介绍了奇偶校验的工作原理,知道校验盘中存储的是奇偶求和之后的数据,那么当阵列中某个硬盘内的数据出现了丢失或者损毁,系统就可以使用校验数据反推得到这个硬盘上的数据,从而实现数据冗余或者数据重建。
打个比方,已知 ,求 的值,那么不难算出 就相当于阵列中其他盘的数据, 就相当于校验盘中的数据, 已知的情况下就可以倒推出 的值。
那么具体到我们的这个例子中,校验盘在第一列位置中的校验和是 0 ,意味着在这一位置下所有的硬盘数据校验和是偶数,那么就反过来说明 Disk2 在这个位置下的数值必然是 0 ,否则奇偶求和就得不到偶数值,其他位置的数据同理:
倒推出 Disk 2 上的数据流
倒推出 Disk 2 上的数据流
通过这样的方式,校验盘就可以在硬盘损毁的情况下依然可以保持数据的完整性并可以实现数据的重建。

3、常见问题

Q:如何解决加了校验盘之后阵列写入速度变慢的问题?

A:开启 “设置 - 硬盘设置 - 可调式 (md_write_method) - 重建写入”
“重建写入”的英文原文是 reconstruct write
notion image
不过需要注意的是,使用“重建写入”会导致阵列里面的硬盘无法休眠,具体的原理可以参考这里的详细解释:
有空我再单独解释,最近有点忙没空细说…

Q:往阵列里添加新硬盘会不会导致校验数据重建?

A:如果你添加的是新硬盘且没有数据在里面,那么不会重建数据;但如果你添加的硬盘里面已经有数据了,且里面的数据你希望保留,那么需要重新进行奇偶校验。
前面介绍原理的时候说过,所有硬盘的数据经过奇偶求和计算之后才会得到最终的校验数据,但假设说你需要加入一块已有数据的硬盘直接使用(比如你从其他 unRAID 服务器上拿过来的硬盘),那么理论上就得重新进行奇偶求和计算,否则校验盘无法保护你的数据。
但如果说你加入进来的这个硬盘是全新的,或者说你不需要里面已有的数据,希望作为一个新的硬盘给到 unRAID 去使用,那么这种情况下可以实现不触发系统校验和的重新计算。方法很简单,那就是对硬盘进行“写零(write zero)”操作即可。一个数据全为 0 的硬盘不会影响校验盘中已有的校验值,因为 0 与其他任何值求和都不会改变最终的求和结果。
前面说过计算机存储数据的最小单位是比特 bit ,比特的值只有 01 ,所有的比特值都为 0 就意味着数据为空,因此写零也就表示对硬盘的数据进行清空。
unRAID 上有一个叫做 Unassigned Devices Preclear 的插件,你可以通过此插件提前对硬盘进行写零来清空数据,然后再加入到阵列中,这样就不会触发校验和的重新计算。
notion image
Unassigned Devices Preclear 插件使用方法
首先,需要进行清零的硬盘不能加入到阵列中,并且你还需要安装另外两个插件:Unassigned Devices 和 Unassigned Devices Plus 。
notion image
这两个插件的作用是可以对阵列之外的硬盘组进行分区删除或者格式化等常见的硬盘操作,还可以挂载远程共享等。
安装之后,你需要借助这两个插件去将需要清零的硬盘的所有分区删除,为此你需要开启插件的“破坏性模式”之后才可以对一个硬盘的分组进行删除:
notion image
notion image
点击硬盘 ID 右侧的 ❌ 来删除分区:
notion image
输入“是”确认分区删除
输入“是”确认分区删除
当所有分区都删除之后就会在硬盘 ID 的右侧显示一个 Unassigned Devices Preclear 插件的小图标(可点击),表示此时硬盘可以进行清零操作,如下图所示:
notion image
当点击之后弹出清零操作的具体参数设置,一般情况下按照下图的设置即可:
Cycles 选择 1 即可,选多了没必要,因为会对硬盘有损耗。
notion image
点击 START 之后就会开始执行清零操作,如下图所示:
notion image
notion image
点击 👁️ 图标会弹出当前的进度信息:
notion image
点击眼睛左边的小图标则会显示日志信息,如:
notion image
硬盘清零的操作会比较费时间,博主清零一个 4T 的盘最长的就花费了 19 个小时 30 分钟,所以读者朋友们请根据实际需要来选择要不要清零,因为有可能做校验的时间都没有这么长。
硬盘的读写速度会直接影响清零所需要的时间。
博主 4 T 硬盘做清零的日志信息参考:
清零成功
清零成功
notion image
notion image
notion image

Q:更换校验盘需要怎么做?

A:直接更换即可。
校验盘存储的校验数据并不是一般的文件数据,所以校验数据独立于阵列里的硬盘数据,去掉校验盘并不会影响阵列里面的文件,因此你可以生成一个新的配置之后直接更换校验盘。
生成新配置的方法:工具( TOOLS ) → 新配置( New Config )。
不过需要小心的是,更换了新的校验盘之后,在新的校验盘没完成奇偶校验之前,你的阵列数据不被保护,所以建议在这一段时间内停止对硬盘进行写入,等待奇偶校验完成之后再进行。

Q:当我删除了硬盘的数据,已有的校验数据是不是也会被删除?

A:不会。
删除阵列硬盘里的数据不会影响已经存在的校验数据,因为校验盘就是为了保护你的数据不丢失而存在的。如果删除数据也会删除已有的校验数据,那么当你遇到硬盘损坏时,从某种程度上就好比“物理”删除了数据,那又该如何重建数据呢?
你可以参考我在 Unraid 社区里面的一个回帖:

Q:一次完整的奇偶校验需要花多长的时间?

A:不同的硬盘和其他因素会影响所需的时间,没有一个标准的值可以借鉴。
奇偶求和是一个“读取硬盘数据 → CPU 奇偶求和运算 → 写入求和值到校验盘”的过程,时间的长短主要受硬盘读写速度影响(CPU 性能的影响可以忽略不计),除此之外还可能有其他的因素,因此没有一个标准的时间可以让读者参考。
不过博主可以提供我自己的数据给到大家去参考:我的阵列只有一块 16T 的硬盘和一个 16T 的校验盘,完成一次完整的奇偶校验花费了 22 小时 42 分 32 秒,平均读取速度为 195.7 MB/s。
我这个校验的速度算是快的了,因为我的阵列里面只有一个 16T 的数据盘,如果数据盘多一点可能就没这么快了。
notion image
如果按照我的数据去衡量奇偶校验的时间,那么每 1T 数据所花费的时间大约为 1.45 个小时,因此:
  • 如果你最大的那个盘是 6T,那么大概需要 8.7 小时完成一次完整的奇偶校验;
  • 如果你最大的那个盘是 8T,那么大概需要 11.6 小时完成一次完整的奇偶校验;
  • 如果你最大的那个盘是 10T,那么大概需要 14.5 小时完成一次完整的奇偶校验;
  • 如果你最大的那个盘是 12T,那么大概需要 17.4 小时完成一次完整的奇偶校验;
  • 如果你最大的那个盘是 14T,那么大概需要 20.3 小时完成一次完整的奇偶校验;
  • 如果你最大的那个盘是 18T,那么大概需要 26.1 小时完成一次完整的奇偶校验;

Q:我是不是可以利用校验盘来实现数据的转移?

A:可以,但请不要这么做。
比如说你希望将阵列里某个硬盘内所有的数据转移到新的硬盘上,你可以将这个旧的硬盘直接拿出来,然后用新的硬盘在阵列中替换旧的硬盘,这样就可以利用校验盘在新的硬盘上去重建数据,从而实现数据的转移/恢复。但是非常不建议这么去做,因为校验盘的数据重建功能不应该作为一种常规的数据备份/转移的手段。
大家需要明白的是,不管是校验盘还是 Raid 阵列,数据的冗余功能都不应该作为日常数据备份或者数据转移的手段。因为数据冗余的目的是为了让你在遇到数据丢失的情况下,依然可以保证数据的完整性,从而不让你的系统崩溃或者业务下线,你要做的应该是尽快将重要的数据进行备份(拷贝到别的地方),然后用正常的硬盘替换掉损坏的硬盘来重建数据。
数据的重建并不是百分百成功的,所以也有不少人建议普通个人用户尽量不要去使用诸如 Raid5 阵列这样的 Raid 机制,因为发生过不少重建数据时其他硬盘也损坏的情况(尤其是同批次生产出来的硬盘)。比如 Raid5 重建过程中如果某个硬盘也坏掉了,那么整个阵列将直接损毁,数据也就直接丢失无法恢复;并且 Raid 阵列数据恢复是一个门槛比较高的技术活,没有经验和知识储备的普通用户遇到此类问题往往无从下手。因此我建议一般的用户尽量做好重要数据的备份才是最保险的手段。
参考:

Q:校验速度很慢是什么原因?

原因可能有很多,但是有以下两种可能:

(1) SATA 控制器模式使用的是 IDE

这时候你需要去主板的 BIOS 设置中将其改为 AHCI/SATA ,例如:
notion image

(2)硬盘数据线/电源连接问题

可能是由于硬盘的 SATA 数据线或者电源线有问题导致,此种情况会导致硬盘出现 SAMRT 上的错误:
notion image
此时你需要去检查一下硬盘的数据线以及电源线的接线情况,重新插拔一下,如果问题依旧建议可以考虑更换一下数据线。
参考案例:

Q:能不能指定校验盘只校验/保护某几个硬盘?

A:目前不能。
校验盘会校验阵列里面的所有数据,所以只要你把硬盘加入到阵列里面,那么所有的硬盘都会被校验。
但因为将来 Unraid 会推出多个阵列的功能(什么时候还不知道,可能会在 6.13 版本出这个功能),那么这时候可能就可以实现校验盘只校验某几个硬盘的需求了,因为你可以将需要校验的硬盘放到单独的一个阵列中,而其他不需要保护的硬盘单独放另一个阵列。

Q:如何使用校验盘重建数据?

我把这一问题的详细说明放到了另一篇文章,大家可以参考这篇文章里面的步骤去操作: 新手教程:如何替换阵列里面的硬盘
 

评论