入门 NAS 掌握这些知识,看这篇就够了

原创少数派2019-09-19 16:13:26

NAS 的核心功能之一就是为用户提供存储空间,而在存储大量数据的同时,选择诸如快照这样的方法来确保 NAS 硬盘中的数据安全也至关重要。

那么除了快照,我们还有别的方法来给 NAS 中的数据加上额外的保险呢?我将在这篇文章中介绍更多的方法。

读懂你的硬盘状态

毫无疑问,NAS 存储数据的基础是硬盘,硬盘的状态自然与我们的数据安全紧密相连。

好在现今大部分 NAS 所用到的硬盘都配备了 SMART 技术——SMART 全称 Self-Monitoring Analysis and Reporting Technology,用于硬盘自我检验、分析与报告, 它通过各种指令对硬盘内部零件进行检测,然后将检测报告和厂商所设的安全值进行比较。

SMART 信息

一般而言,我们可以通过 NAS 系统(一般位于硬盘/VJBOD中的硬盘运行情况里)或者其他查看 SMART 的软件(比如 CrystalDiskInfo)直观地看到每一项 SMART 数据,通过这些数据,我们就能快速了解各个硬盘的实际状态,以便在需要的时候提前换入新硬盘来保证数据安全。

换句话说,读懂特殊的 SMART 指令可以帮助我们快速了解磁盘的寿命情况,提前做好应对「数据危机」的准备。

关联阅读:你的硬盘是如何存储数据的?

由于 SMART 数据各个硬盘制造商都可以选择添加他们特有的属性,在这篇文章中我不可能将所有属性统统标注出来,故本文列出的大部分是通用的 SMART 数据,我们一起看看吧。

重定位磁区

硬盘在保存数据的时候其实都是将这些数据存放在在一个个磁区里的,通过读取某个磁区中的数据,我们就能快速鉴别该磁区是否有错误并对存在错误的磁区进行修复。

而如果一个磁区尝试修复失败,硬盘就会通过备用的磁区进行替换,也就是将备用的磁区通过映射的方法与坏磁区联系起来,当硬盘要写入坏的磁区时会直接跳转到映射的备用磁区上,保证数据写入的安全。这就是磁区重定位。

这个过程我们在日常使用过程中完全感觉不到,但是 SMART 数据会默默地记录下来。这个过程中记录下的数据主要包含两类:

  • 检测到任何读取错误时,硬盘会稍后尝试重新读取数据,这个事件会被记录到 等候重定的磁区计数 当中;

  • 多次发生读取错误且重新读取未果,便会触发重定位磁区行为,无论重定位成功与否,这些重定位行为次数都会被记录进入 重定位磁区事件计数;

  • 成功重定位的磁区事件会被记录到 重定位磁区计数 中,失败则会记录到 无法校正的磁区计数 中。

需要注意的是,重定位磁区是有固定数量的,每用一个就当前值减少一个,而大部分重定位失败的原因是硬盘遭到了物理损坏或备用磁区用尽。

因此我们应该关注的重点就很清晰了:以上面提到的 CrystalDiskInfo 为例,在 CrystalDiskInfo 主界面选择对应的硬盘即可看到 SMART 信息,这里我们根据上表找到 ID 为 05 的 重新分配磁区计数 一行,然后就能在右侧看到它对应的当前数值。

对重新分配磁区计数来说,当前值数值代表了剩余重定位次数,这个数值下降到较低水平时我们就应该留预算准备购买新硬盘了;如果无法校正的磁区计数增加,也就是 无法校正的磁区计数 的原始值不为 0 时,那么这块硬盘最好立刻停用、及时备份数据并换入新硬盘,防止数据丢失。

机械硬盘:电机起转重试数

机械硬盘的处理方法类似,但关注的数据不同,在这一部分,我们主要需要留意的数据为电机起转重试数(Spin Retry Count),这个参数对应 ID:10,十六进制值为 0x0a。

这是一个仅适用于机械硬盘的参数,标示着机械硬盘主轴电机第一次尝试启动失败以后,主轴电机启动所需要尝试的次数。同样以上面的表格为例,原始值不应该高于临界值。因为当主轴电机需要频繁尝试重启时,也就意味着这块机械硬盘寿命可能已达极限。

终端校验出错

参数对应为 ID:184,十六进制值为 0xb8 的数据则对应终端校验出错(End-to-End error),有时也会被叫做错误矫正次数,一般指的是从硬盘读取数据到内存后,数据发生不匹配的次数。

这个错误也与硬盘的损坏有关。如果原始值高于临界值,意味着这块硬盘损坏的概率非常高。

矫正和无法矫正数据

  • ID:187(十六进制值:0xbb)表示报告无法纠正的错误(Reported Uncorrectable Errors)

  • ID:195(十六进制值:0xc3)表示硬件 ECC 恢复计数(Hardware ECC Recovered)

这同样是一组对应的 SMART 数据。我们每次向硬盘写入数据时,硬盘还会对数据进行额外的一次计算,这个计算得到的结果在写入硬盘以后被称为 校验位。

硬盘在读取数据时会把读取到的数据和之前的校验位做比较,如果完全一致则通过;如果不一致则使用校验位进行矫正,矫正成功以后则在 硬件 ECC 恢复计数原始值 上加一,矫正失败则在 报告无法纠正的错误原始值 上加一,并在系统上给出有关提示。

一般而言矫正失败意味着硬盘的硬件出现了问题,所以出现 报告无法纠正的错误 也同样意味着硬盘寿命即将到达尽头。

多块硬盘,多层保护

聪明的人看完 SMART 信息可能会产生这样的想法:

一块硬盘显然不是很保险,不同硬盘的寿命也不太一样,那我们不如多用几块硬盘一起存放数据,这样不就能保证数据的安全了吗?

独立硬盘冗余阵列(Redundant Array of Independent Disks),也就是大家常看见的 RAID 就是用来做这件事的。通过将多块硬盘组合起来成为一个或者多个阵列组,RAID 能够帮助我们的 NAS 提升性能或者增加安全性(当然两者也可以被同时提升),在「数据危机」到来之前为 NAS 加上一层额外保护。

而在实际使用中,RAID 类型会被命名成 RAID 加数字的形式,常见的 RAID 形式有:RAID 0、RAID 1、RAID 5、RAID 6、RAID 10/01、RAID 50 和 RAID 60,每种类型都有各自的优势也有自己的缺点,也时常让一些想要入门 NAS 的朋友感到困惑,所以下面我们就来一起梳理一下吧。

RAID 0

RAID 0 通过将两个及以上的硬盘组合起来,组成一个更大容量的阵列组。这种组合方式的基本信息如下:

在存放数据时,文件被分段(有多少个硬盘就分成多少段)然后同时写入各个磁盘,读取时再从各个硬盘里读取出来。由于读写时都是各个硬盘分别做对应的操作,RAID 0 无论是写入还是读取速度自然都是 RAID 系统里最快的那个。

分段虽然带来了速度快的优势,但如果 RAID 0 磁盘里的任何硬盘出现了损坏,那么 RAID 0 阵列里的存放数据都会丢失那一段数据,也就是说整个 RAID 0 里的数据都丢失了。

这也是为什么 RAID 0 很少用来存放数据的原因,一般用来当作只读缓存区或者当作临时文件存放的地方。

RAID 1

RAID 1 通过将两个及以上的硬盘组合起来,组成一个由最小硬盘大小决定可利用空间的阵列组。采用这种组合方式你需要知道的是:

在存放数据的时候,一个文件将被完整地同时写入这个阵列组里的所有的硬盘,读取时分别从阵列组里的每个分别读取一小块,或是在一块磁盘忙时通过其他磁盘读取这部分文件。因而 RAID 1 的写入速度由最慢的硬盘决定,读取时则不受最慢硬盘的限制。

RAID 1 是一种典型的用容量换取数据安全性的组合方式,只要整个 RAID 1 组里还有 1 块硬盘处于正常状态,那我们的数据就是可以被正常访问的,换句话说只要整个 RAID 1 组还有 2 块硬盘处于正常状态,那我们的数据就处于被保护的状态。

所以 RAID 1 特别适合用户存放一些主要用于只读的重要数据。

RAID 5

RAID 5 需要至少三块硬盘才能组建起来,但它是一种储存性能、数据安全和存储成本兼顾的存储解决方案。RAID 5 的基本信息如下:

在存放数据时,数据同样被分段(分段数量比硬盘数量少 1)并随机并行写入到各个磁盘里,随后 RAID 5 还会通过特殊的计算额外得到一个校验值,这个校验值会被存放到没有存放这组数据的那块硬盘里。

这样一来,RAID 5 在读取时可以从各个硬盘里分别读取,发生错误时则使用没有存储数据的那块硬盘中的校验值进行恢复。

由于 RAID 5 的校验数据需要单独占据一个空间,因此空间利用率不如 RAID 0,但是因为多个数据对应一个校验值,空间利用率却要比 RAID 1 好上不少。不过 RAID 5 中只能承受一块硬盘损坏的情况,一旦超过一块硬盘损坏,那么整个 RAID 组存放的数据都会丢失。

容量大、空间利用率高、读写速度相对较快,RAID 5 看上去是那种非常适合日常使用的组建方案,但如果你对数据安全有着较高的要求,恢复数据时有着极大不可靠性的 RAID 5 其实并不适合你。原因我们会在后面细说。

RAID 6

RAID 6 至少需要四块硬盘才能组建起来,这是因为它在 RAID 5 的基础上额外的添加了另外一组校验数据,因此 RAID 6 虽然空间利用不如 RAID 5 来的高,但是它更安全。

RAID 6 的基本信息如下:

在存放数据时,数据同样被分段(同理,分段数量为硬盘数量减 2)并随机并行写入到各个磁盘里,通过两种特殊的计算方式额外得到两个校验值后,这些校验值会被放进没有存放这个数据分段的两块硬盘里。

读取时从各个硬盘里分别读取一个文件的各个段,发生错误时则使用这两块硬盘中的验值进行恢复。

由于 RAID 6 的校验数据需要进行两次完全不同的计算方式得到并需要额外写入两个硬盘,向 RAID 6 写入数据时瓶颈不仅仅在于硬盘的速度,计算校验数据的处理器性能(可能是处理器在计算,也可能是专用的 RAID 卡在进行计算)同样也会影响写入性能。当然也正是因为这两组校验数据, RAID 6 最多可以同时承受 2 块磁盘损坏。

RAID 6 优秀的数据安全和存储成本兼顾的存储解决方案,特别适合存放各种各样的重要数据。

RAID 10/01

RAID 10 和 RAID 01 是一种混合型的 RAID 系统,将 RAID 1 系统和 RAID 0 系统结合起来,利用容量换取高速的读写性能和数据安全。

RAID 10 分为两层,至少需要四块硬盘组成。它的基本特征如下:

RAID 10 下面一层是由硬盘组成的一组又一组的 RAID 1 系统,上面一层则是使用 RAID 0 系统将下面的 RAID 1 系统链接起来。写入数据时数据先被分段,写入各个 RAID 1 系统中,再在每个 RAID 1 里的各个硬盘里都保存那一个数据段。

在 RAID 10 中,每个 RAID 1 组都可以坏到只剩下一个硬盘,这时整个 RAID 组还是处于可以使用的状态,不过这个时候就是 RAID 0 了,再坏一块硬盘整个 RAID 里的数据就都会消失。相对而言 RAID 10 的数据保护还是很可靠的。

相比之下,RAID 01 也同样分为两层,至少需要四块硬盘组成。下面一层是由硬盘组成一组又一组的 RAID 0 系统,上面一层则是使用 RAID 1 系统将下面的 RAID 0 系统连接起来。写入数据时数据先被复制,再被分段写入到各个硬盘里。

在 RAID 01 中,一旦有一块磁盘发生了损坏,那么整组 RAID 0 都会停止工作,只剩下别的 RAID 0 组还会工作。此外如果 RAID 01 系统中 RAID 1 层只有两组 RAID 0,那么其中一组 RAID 损坏以后,剩余的一组 RAID 0 数据风险会非常大。这也是为什么 RAID 01 在实际使用并不是那么实用的原因。

最后,同样附上 RAID 01 的基本信息:

RAID 50

RAID 50 也同样是混合型 RAID 系统,分为两层,至少需要 6 块硬盘才能组建,它的基本特征如下:

RAID 50 最下面一层是由硬盘组成一组又一组的 RAID 5 系统,上面一层则是使用 RAID 0 系统将下面的 RAID 5 系统连接起来。

写入数据时数据先被分段写入各个 RAID 5 系统中,然后在每个 RAID 5 里使用再分段和校验的方式来存储数据。

在 RAID 50 中,每个 RAID 5 组都可以任意损坏一个硬盘,这个时候整个 RAID 还是处于可以使用的状态。不过同一个 RAID 5 组中出现大于两块的硬盘损坏,整个阵列的数据都会丢失。速度远比单个 RAID 5 快上不少;但是空间利用率会比单个 RAID 5 更低,因为每个 RAID 5 组都会利用那组 RAID 5 硬盘中一部分存放校验数据。

RAID 60

RAID 60 也同样是混合型 RAID 系统,分为两层,至少需要 8 块硬盘才能组建。RAID 60 的基本信息如下:

RAID 60 最下面一层是由硬盘组成一组又一组的 RAID 6 系统,上面一层则是使用 RAID 0 系统将下面的 RAID 6 系统连接起来。写入数据时数据先被分段,写入各个 RAID 6 系统中,再在每个 RAID 6 里的使用再分段和双重校验的方式存储数据。

在 RAID 60 中,每个 RAID 6 组都可以任意损坏两个硬盘,这个时候整个 RAID 还是处于可以使用的状态;同一个 RAID 6 组中出现大于两块的硬盘损坏情况时整个阵列的数据都会丢失。

RAID 60 的速度比单个 RAID 6 快上不少,但是空间利用率更低,因为每个 RAID 6 组都会利用那组 RAID 6 存放额外的两个校验数据。

为什么我不推荐使用 RAID 5

前面说过 RAID 5 是一种储存性能、数据安全和存储成本兼顾的存储解决方案——只需要占用最多一块硬盘的体积就可以轻松完成校验,同时还可以将别的磁盘空间放在一起使用,同时写入和读取数据都是从各个硬盘里并行操作,速度非常快。

但随着单块硬盘的容量越来越大,只有一份校验数据的 RAID 5 系统,在重建过程中出错的概率也会变得越来越大。也就是我为什么要在这里额外说明的主要原因。

在开始之前,我们先要知道为什么在硬盘读取数据时会发生错误:

  1. 数据写入时,数字信号转换为盘片上磁场信号过程中发生错误

  2. 数据存放过程中,因为外界的电磁干扰、宇宙射线等以外情况,导致磁单元中部分磁性极性翻转

  3. 读取数据时,磁场信号转换为数字信号过程中发生错误;

在硬盘内部,这种错误其实是经常发生的。硬盘厂商考虑到了这点,会在硬盘的技术详情单(DataBase)中专门有个不可恢复错误率(Unrecoverable Read Error rate,下文统一使用 URE 代替)来描述这个概率。

同时为了应对 URE,机械硬盘每个扇区后面有一定 ECC 纠错码,用来纠正错误的数据( SMART 中的硬件 ECC 恢复计数),当然 ECC 也不是万能的,一旦出现连续或者大量的 ECC 错码,ECC 就不能纠正错误的数据了,也就是出现了 SMART 中的报告无法纠正的错误。这个时候就要依靠带保护的 RAID 系统进行纠正数据,如果没有的话,那么那个位置的数据就基本就没有了。

而普通消费级的硬盘一般是 1e-14/bit,企业级硬盘发生 URE 的概率一般是 1e-15/bit。当然这个数据并不是代表了只有读取了 1e+14 的概率才会遇到一次 URE。遇到 URE 的概率则需要利用更复杂的公式进行计算。由于计算过程非常复杂,这里不进行引入,这里采用的数据均是 知乎木头龙的计算结果:

4 个 1TB 硬盘组成的 RAID 5 单盘故障后的重建过程需要读取的数据量为 1e-12 Byte×8 bit/Byte×(4-1)=24Tbit,而读取 24Tbit 过程中没有发生URE的概率则是 (1-1e14)^24e12=78.68%。

不同误码率,不同容量的硬盘,组成 4/8 盘 RAID 5 的重建成功/失败概率,见下表,同样是 知乎木头龙的计算结果:

图:知乎 | 木头龙

可以看到 4 个 URE 为 1e-14 的1TB硬盘组成的 RAID 5 重建失败的概率为 21.32%,这个比例已经非常高了,所以这也是我为什么不推荐使用 RAID 5 的主要原因。

不过最后要说的是 URE 导致的 RAID 5 重建失败并非意味着全部数据丢失,数据基本上都还在,只是需要别的方法进行恢复。如果 NAS 的 RAID 卡允许,可以继续以降级模式运行,那么直接把所有数据复制到另外一个阵列就好;如果 RAID 卡遭遇 URE 后,强制某个硬盘离线并且不能重新上线,就需要找 NAS 售后或者专业的数据恢复。

要是运气好,URE 正好出现在没有存放文件的空白区域,那么文件自然一点事情都没有;URE 出现在有文件的地方,也只是无法恢复一个或者多个文件。如果你的运气特别不好, URE 出现在一些特殊的地方,还可能会导致文件系统崩溃,最后也只能去找专业的数据恢复。

不管哪一种恢复方案,对于普通的家庭来说都是不小的经济负担,还不如从一开始不用呢。

相比之下 RAID 6 在恢复时遇到 URE 也不怕,因为 RAID 6 损坏了一块硬盘也只是降级到 RAID 5 上,损坏两块硬盘时,能通过两组校验数据进行交织恢复,至少到目前不用担心。

真的想用 RAID 5 也行,去买企业级的机械硬盘吧,不过这也是笔不小的开支。

备份是保护重要数据的唯一手段

大家可能会好奇:在有了快照技术和 RAID 系统后,为什么在 NAS 里还需要进行备份这个操作呢?

RAID 系统本质上就不是备份,它主要起到两个作用:第一个是在 RAID 系统处于正常状态时,保证独写数据时的性能,以及针对除去 RAID 0 以外的系统提供额外的数据保护,比方说应对上面提到的 URE 情况;第二个是除去 RAID 0 以外的 RAID 系统,还能在恢复硬盘时让整个 RAID 系统能被正常的读写和使用。

也就是说,RAID 在设计之初就不是为了取代备份而设计的。

如果把快照说成保存某一刻数据的状态,那么备份就是保存某一刻数据的副本。快照技术虽然快且占用体积小,但是快照很多时候都只能保存在当前的硬盘里的,如果硬盘发生了损坏则没办法进行恢复。

NAS 里的备份工具一般都是通过保存数据的副本到其他硬盘里完成备份这个过程的,因此遇到硬件损坏等快照无法还原的情况时,能通过其他的方法进行恢复,这才是备份的意义。NAS 里的备份系统都能自动化备份操作,也能将文件加密备份到公有云服务器上,也支持备份时去除重复文件,大幅减少备份时的体积。

对比其他耗时、耗财的途径,备份就是出现「数据危机」以后,最低成本恢复数据的唯一途径。

(0)

相关推荐