V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

关于硬盘 RAID 配置的科普与疑问

  •  
  •   LeeReamond · 2021-08-07 09:33:04 +08:00 · 4764 次点击
    这是一个创建于 1211 天前的主题,其中的信息可能已经有所发展或是发生改变。

    NAS 相关姊妹贴,前情提要

    原贴回复过长,单独开一贴询问 RAID 问题。

    首先科普部分,如果有老哥完全不清楚 raid 的话,简单描述常见 raid 是什么:

    • 常见有 0,1,5,10 四种,后来在 5 的基础上出了升级版叫 raid6
    • raid0: 将数据平分成两份平均地储存在两个硬盘上,设计目标是为了增加 IO 速度,物理容量无损失
    • raid1: 将每一份数据分别写入两个硬盘,设计目的是为了保护数据安全,物理容量损失 1/2
    • raid10: 字面意思的 raid1+raid0,分别平分写入,兼具优点,物理容量损失 1/2
    • raid5: 设计目的是为了最大效率利用空间,需要至少 3 块硬盘
        假设有 n 块硬盘的话,在其中 n-1 块上写入实际数据,在剩下一块上写入对应的 xor 校验数据,
        因此任意一块硬盘的数据即使完全丢失,可通过 xor 结果反向计算出丢失的数据是什么,进行重建。
        技术细节上校验块并不集中于同一物理硬盘,而是平均分布于各盘。
        损失 1/n 的容量。假设有 10 块 10T 机械硬盘,最多可储存 90T 实际数据。
    
    • raid6:raid5 升级版
        因为 raid5 只能应对一处错误,如果两处错误同时发生,则会导致所有数据全部丢失的窘境。
        为了修正这个弱点,raid6 在 raid5 基础上将校验块又备份了一份,所以同时两处出错也能完全恢复数据。
        损失 2/n 的容量。另外缺陷是由于每次写入至少有三块硬盘在动,通常速度会比 raid5 更慢。
    

    前贴中老哥回复的总结

    有不止一位老哥提到 raid5 容易发生重建失败的问题。因为单个盘掉盘以后插入新盘的重建过程,由于硬盘容量通常很大,重建通常会持续若干天,在这期间发生再次掉盘则全部数据 GG 。

    操作上的疑问

    很多东西需要问一下,因为我只配过 raid 而确实没发生过数据损毁的情况,可能还是用得少。

    • 1 、有老哥提到软 raid 和硬 raid,分别指什么。通过 windows 构建一个 raid 盘属于软 raid,通过 bios 设置 raid 为硬 raid ?
    • 2 、关于数据重建过程是怎么样的,我能预想到硬盘失效情况有两种,一是由于长时间使用导致的单个坏道,这个通常只设计很小一块数据,屏蔽了就可以了,或者由于长时间通电导致的磁头融化,这个会导致整个盘废掉。在我设想中需要进行数据恢复的情况,我当时指的是坏道的情况,楼上老哥说需要插入新盘进行重建,我不知道指的是不是磁头融化的情况才需要插入新盘。想问下有没有确实坏过盘的老哥,如果使用 windows 的 raid 功能构建一个受保护分区,如果出现坏道,是由 win 自动完成恢复和屏蔽,用户无感知,还是说遇到坏道就要求换盘?或是当整个硬盘都失效时才要求换盘重建?
    • 3 、关于 raid6 如何配置,我只知道 windows 能配 raid5,在磁盘管理里面搞就可以了,raid6 要怎么设置?

    个人感想

    上文只是作为知识上的好奇,看了各位的回复以后,我觉得我应该会使用两张盘搞 raid1,剩下的都是裸数据的方案。因为即使是 nas 当中,大多数数据也是没有什么保护需求的,只有少部分个人文件、家庭照片、稀缺资源等等需要备份,搞一个专用保护分区应该足够,剩下的数据完全可以随便存放,丢了也就丢了,这应该是一套比较合适的方案。

    另外问一下关于硬盘断电,win 有自带的判断硬盘一段时间无活动就会自动断电的功能,通常来说断电可以最大程度上保护硬盘使用寿命,同时还能省电,我想知道有无老哥遇到过频繁断电通电导致磁头损坏之类的问题。

    第 1 条附言  ·  2021-08-07 21:40:25 +08:00
    其实看大家回复,楼下有老哥说 raid1 也不安全,这么说来倒是感觉,也许可以干脆软件方式解决,自己写个服务,每天扫描一下硬盘索引区的更新时间然后拷贝同步一下两个硬盘的数据.....似乎比 raid1 还强点。

    这么说来就又产生一个疑问,针对坏道的情况(我觉得硬盘长期使用,坏道应该是先于整个硬盘掉盘发生的),如果使用 win 磁盘阵列组了个 raid1,它在使用数据的时候发现两块硬盘上数据不一样,一块是 1010,一块是 1000,raid 要怎么知道哪个才是正确数据呢?
    50 条回复    2022-09-14 13:39:01 +08:00
    villivateur
        1
    villivateur  
       2021-08-07 09:44:47 +08:00 via Android
    频繁通断电不会导致磁头损坏吧?最多是轴承磨损
    KousukeSakurako
        2
    KousukeSakurako  
       2021-08-07 10:10:08 +08:00
    我选择 mergerfs,数据安全第一,性能损失都无所谓了
    neteroster
        3
    neteroster  
       2021-08-07 10:14:10 +08:00
    目前有块硬盘通电 1000 小时左右,磁头加载卸载循环 1700 左右,没啥问题。以前也比较担心,搜了搜发现没什么大问题,实在担心可以把 APM 关了。
    Ariver
        4
    Ariver  
       2021-08-07 10:23:02 +08:00 via iPhone   ❤️ 1
    https://hdd.userbenchmark.com/

    讨论硬盘不能基于个例,必须在统计意义上看才有意义。
    另外对于个人用户,每一个硬盘发生问题的可能性又是另外一个问题。

    raid5 其实在商业环境是经常使用的,因为一般都会有另外一套对当前 raid5 的备份。
    neteroster
        5
    neteroster  
       2021-08-07 10:31:28 +08:00   ❤️ 1
    关于你说的 RAID5 重建失败的问题,并不是重建发生掉盘才会失败(如果真是这样其实失败率并不高)。而是如果恢复的时候磁盘出现一个 URE (Unrecoverable Read Error),整个重建就会彻底失败,数据全损。磁盘的 URE 率有一些估计值,大约在 10^14 ~ 10^15,已知 URE 率,可以用一些计算工具直接计算重建失败率,例如: https://magj.github.io/raid-failure/
    KKLeon
        6
    KKLeon  
       2021-08-07 10:43:36 +08:00
    频繁断电通电还不如一直通电。另外休眠状态下硬盘还是保持通电状态,但磁头反复停转会影响寿命,越频繁影响越大。
    ryd994
        7
    ryd994  
       2021-08-07 11:28:54 +08:00
    1.差不多是这个意思。也有硬件 RAID 卡。重点在于 RAID 逻辑由 CPU 程序还是由专门的硬件处理。
    2.RAID 无法保护坏道和错误数据。RAID 的设计前提假设了硬盘挂就是彻底挂。现实中会有两个问题:1. 数据错了,但硬盘不知道 (冷错误)。2. 硬件工作不正常,卡死了。便宜的 RAID 卡就会傻等。所以企业级 NAS 盘有 TLER 功能。
    ZFS 等带校验的文件系统可以解决前者。

    4. 真遇到过。我之前的笔记本 bios 默认省电。用了一年,硬盘 SMART 里 load in 健康掉了 40%

    乖乖搞远程和离线备份。RAID 救不了手抖和加密病毒。这也是为什么我不在 NAS 上跑乱七八糟的应用。储存就是纯储存。挂机下载放到另一台机器上。NAS 上定时 ZFS snapshot 。只要 NAS 本身不被攻破,就不怕勒索病毒。

    RAID 是保护在线率(availability)的,不是保护数据留存率(durability)的
    ryd994
        8
    ryd994  
       2021-08-07 11:32:17 +08:00
    频繁通电的问题是磁头会磨损
    磁头不是固定在盘片上方,而是靠气动力学在盘片上“飞行”。所以如果盘片转速不对就会磨损磁头。磁头有石墨、钻石涂层,所以正常使用不成问题。但是你要是每几分钟就停一次,那很快就会出问题了。
    一直转的话,反而没什么磨损。最多就是磨损电机轴承
    dorothyREN
        9
    dorothyREN  
       2021-08-07 11:50:53 +08:00
    软件层面配置的是软 raid,硬件层面配置就的就是硬 raid,硬 raid 在操作系统看来就是一块普通的硬盘
    3dwelcome
        10
    3dwelcome  
       2021-08-07 12:13:27 +08:00 via Android
    说这些技术指标都是虚的,我赌一片全麦面包,楼主最后还是会上 raid5 。
    鸡蛋不能放一个篮子里,真重要的数据,不会只保存在一个地方。不重要的数据,丢了也就丢了。
    硬盘本身就是消耗品,只要有使用,就会不断有损耗。做好应对措施就是了。
    singerll
        11
    singerll  
       2021-08-07 13:41:45 +08:00 via Android
    硬件 raid 是有缓存的,有的还有电容保护,在你掉电时能保证数据写入。软件 raid 的问题是,万一 win 系统挂了怎么办?硬件 raid 无论磁盘还是 raid 卡,挂了换一个都能恢复 raid 信息。
    Osk
        12
    Osk  
       2021-08-07 14:21:01 +08:00
    我来回答第 3 个疑问:
    磁盘管理里面组 "软 RAID" (动态磁盘) 这种方式已经不推荐了. 现在 Windows 推荐的是使用存储空间实现, 可以做到类似于 RAID0,1,5,6 的技术.

    但是 Windows 的存储空间 RAID5 性能很糟, 写爆缓存后速度相当感人(不知道是不是我配置不对). 可以用 SSD 加速.

    Windows 存储空间的优势是灵活不挑硬件, 硬 RAID 需要单独购买 RAID 卡和支持 RAID 卡的主板(通常只有工作站和服务器才有).

    使用存储空间时, 建议使用 ReFS 配合.
    msg7086
        13
    msg7086  
       2021-08-07 15:43:29 +08:00   ❤️ 4
    0. 先给你点个赞,把有用的回复整理成帖子,可以方便后人参考,也可以避免楼层过长,方便讨论。

    1. RAID 6 并不是把校验数据备份一次,而是用里所码生成校验数据,所以远远比 RAID 5 安全。
    RAID 5 用的是奇偶校验,这个校验是很弱的,你只知道数据出错了,但是不知道错在哪。
    举个例子,比如我们有 4 块盘,3 块数据扇区,1 块校验扇区。
    假如里面存放的比特数据分别是 1 0 1 0,那么奇偶校验通过,说明数据是正确的。
    那假如里面存放的是 1 0 0 0 呢?很显然奇偶校验错了。
    那么,你知道错的是哪个块吗?
    其实不知道。
    所以 RAID 5 普遍会直接盲猜数据块是正确的,然后重建错误块,也就是重建成 1 0 0 1 。
    如果运气不好,是数据盘上的数据错了,那就永远错了。
    但是 RAID 6 遇上这种情况,因为有两个校验块,所以很容易就知道哪块数据坏了。
    (顺带一提,RAID 1 也无法解决这个问题。所以 RAID 1 并不是万能良药。)

    2. 你提到的 RAID 5 数据全部丢失的情况,只适用于磁盘损坏而非数据错误。
    数据错误本身是静默的(也就是说你不知道数据坏了)。
    如果是读取失败,反倒相对还好,只要同一个扇区其他块都在,就能救回来。
    (比如 1 0 X 0,那直接把 1 写回硬盘 3 就行了。)
    如果是读取成功但内容错误,就是上面第一点说的情况。
    如果是磁盘直接消失了,才是你帖子里提到的情况。

    3. 硬 RAID 一般指正规的硬件阵列卡上配置的 RAID 。
    比如你买一片 LSI 企业级阵列卡,插上硬盘,那么阵列卡就能管理到硬盘。
    硬盘对你的电脑是不可见的,需要投过阵列卡的配置。阵列卡里可以新建虚拟磁盘,虚拟磁盘可以由多个物理磁盘组成。你的电脑只能看见虚拟磁盘。比如你把 6 块 8TB 硬盘组成了 RAID 6,那电脑就只能看到一个 32TB 的虚拟硬盘。

    软 RAID 分硬件软 RAID (比如 Intel 主板提供的 Intel RAID 就是这种)和软件软 RAID (比如动态磁盘,Linux MD,ZFS 就是这种)。一般如果是用软 RAID 的话家用推荐 Linux MD,企业环境推荐 ZFS 。如果要用硬 RAID 的话,就买一张阵列卡( LSI 或者 Adaptec 之类的二手拆机卡)。Windows 下的 RAID 实在推荐不出手,建议还是算了。主板芯片自带的 RAID 少碰。

    4. 数据重建只有在严重损坏的时候才需要。
    如果只是一个扇区有错误数据,一般阵列卡会直接回写解决。
    坏道分逻辑坏道和物理坏道。逻辑坏道是扇区上 bit flip 过多以后 checksum 过不去导致的读取错误,这种情况只要回写数据即可,不是真正的「坏」道。物理坏道一般无法修复,磁盘会自动重映射扇区。不管哪种情况对用户基本都是无感的。
    如果是硬盘完全损坏,无法读写甚至无法识别,这时候阵列卡会报警,然后你需要把坏硬盘拔掉,插上新硬盘,然后重建。有些阵列卡支持自动重建,如果自动重建关掉的话就手动重建。软 RAID 也一样,换上硬盘以后用命令告知,然后重建即可。

    5. Windows 的 RAID 我不是很放心用。你要用动态磁盘或者存储空间也不是不行,但还是注意做好备份吧。
    阵列卡 RAID 相对安全一些,毕竟国际大企业都在用。
    msg7086
        14
    msg7086  
       2021-08-07 15:45:42 +08:00
    @Osk 支持 RAID 卡的主板……这不是有手就行么。
    PCIe 而已,只要有槽能插就能用。
    之前没挖矿的时候一张 RAID 卡也就 20 刀,一百多块钱,随便一张主板插上就能用的。
    steptodream
        15
    steptodream  
       2021-08-07 15:47:33 +08:00
    推荐 10
    FlyingShark
        16
    FlyingShark  
       2021-08-07 16:48:37 +08:00
    家用可以不搞 RAID,楼主可以从单盘或者存储池开始折腾,玩明白了再淘一张 RAID 卡玩玩(现在卡涨价了)

    如果物理机装群晖系统,直接用 SHR 模式即可

    RAID 不是用来备份数据的,切记
    Osk
        17
    Osk  
       2021-08-07 18:37:03 +08:00
    @msg7086 我印象中不是要 BIOS 加载 RAID 卡的 OPROM 来支持吗, 好像有些卡有限制, 要么限制主板厂家, 要么就是不支持 UEFI 什么的, 感觉没软 RAID 那么灵活.

    不确定我是不是记错了.
    ZRS
        18
    ZRS  
       2021-08-07 18:41:58 +08:00 via iPhone
    家用一律建议上软 RAID,用 ZFS 的 RAIDZ 方案。硬 RAID 卡方案保障的是高可用,而不是数据的安全性,工业场景下也不靠 RAID 来保障数据安全。
    ryd994
        19
    ryd994  
       2021-08-07 19:10:08 +08:00 via Android
    @singerll
    1. 只有 writeback 缓存才有数据安全的问题。硬件 raid 如果没有 bbu 的话是不会使用 writeback 模式的。而且 bbu 保护是保护缓存数据直到来电,而不是驱动硬盘继续写入。
    软件 raid 想要高随机写入可以用 ssd 缓存,比如 zfs slog 。硬件缓存撑死了也就那点 ram,ssd 缓存容量大得多

    正常用 nas 肯定是要配 ups 的,停电就开始关机。服务器还有双电源。所以不存在你说的突然掉电问题。
    2.“硬件 raid 无论磁盘还是 raid 卡,挂了换一个都能恢复 raid 信息。”
    前提是你得有同品牌甚至同型号地区。
    软件 raid 的配置信息也是保存在盘上啊,你以为保存在系统盘里吗?
    软件 raid 的硬盘换个系统,导入一下就可以了。
    所以大家用 nas 的时候都是用垃圾 ssd 或者 U 盘做系统盘。就是因为挂了也无所谓。系统配置平时很少动。定期备份到 U 盘就好了。

    如果硬件 raid 找不到对应的硬件,救数据还得靠软件。毕竟软件只要知道是什么格式,总能找到支持的软件,性能且不论。
    singerll
        20
    singerll  
       2021-08-07 20:31:45 +08:00
    @ryd994

    我想说的是硬件 raid 和软件 raid 的区别,而不是个人 nas 中硬件 raid 和软件 raid 的区别。

    1 、如果硬件 raid 找不到对应的硬件,我觉得这种事情几乎不会发生,我们公司最老的 2012 年的服务器 raid 卡还能买到,我亲自跟供应商打的电话,供应商用了不到 10 分钟就给我确认有货。

    2 、软件 raid 的配置信息也是保存在盘上。我的意思是硬件 raid 比软件 raid 可靠性高的多,保存 raid 的盘坏了怎么办,你还要异地备份,网络故障,备份高可用都要考虑。就好像数据库做备份,家用可能 mysqdump 就够了,像银行,不但备份文件,连硬件磁头的信息都要备份。

    3 、硬件 raid 如果没有 bbu 。服务器带超级电容几乎是标配,而且硬盘缓存和 raid 缓存并不冲突,我们生产环境不但上了 pcie 的固态(数据盘全 pcie ),也上了 raid 卡做直通。

    4 、双电源+UPS 不会掉电。UPS 坏了咋办?别说双电源,服务器四个电源,结果电源管理模块崩了的我都见过。而且我们机房三路市电,两套 UPS,最惨的一次三路市电全掉,在 UPS 马上到底的最后两个小时,调来了发电车。


    另外,我就是想说下软硬 raid 的优劣,并没有说哪种方案就是最完美的,实际中肯定是看钱包。
    ryd994
        21
    ryd994  
       2021-08-07 21:23:59 +08:00 via Android
    @singerll
    1. 那你得找啊。软件随便你换什么设备什么系统,只要有对应的软件支持,都能读出来。如果系统挂了,数据盘换台机器就能导入。硬件 raid 能实现的功能,配置信息多写一份的事情,软件 raid 怎么可能实现不了?软件相对硬件的优势首先就是灵活性。

    2. 软件 raid 的配置信息和硬件 raid 一样,是在数据盘上分布的。你有没有用过软件 raid ? mdadm 或者 zfs 。就算你只插一块盘,系统也能识别这是 raid 盘还能告诉你缺了什么。硬件 raid 碰上傻逼 raid 控制器的,要保证顺序一样否则直接重建。工业上当然不会用这么傻逼的控制器。但是家用你买低端卡的话还真能买到。

    3. bbu 和超级电容还是要上 ups 啊。你最大的误区在于:writeback cache 到底有什么用?
    如果你是顺序写入,writeback cache 是没有用的。这也是家用 nas 的使用场景。瓶颈就是磁盘速度。日志文件系统不会因为断电就损坏,只会损失最后写入的一点数据。反正你软件已经没了,只要文件系统不崩,差这点数据没区别。

    writeback cache 的作用是提高随机写入。对于数据库来说,差最后这点数据,数据库结构就崩了。所以数据库必须在每个修改之后都 flush 。而是数据库操作大多数随机的。结果就是性能会非常差。有非易失写缓存的情况下,raid 控制器可以忽略 flush 请求,只要写到缓存就算 flush 完成。

    就算没有写缓存,只要合理配置,而不是瞎关 flush,那么即使断电也不会损失数据。只是性能差。而这对于家用的文件储存 nas 来说就不是问题。

    4. 你停电就开始关机的话 ups 会耗尽?家用 nas 又没有在线率要求,停电了反正你其他设备也停了,关机就行了。
    你说冗余电源会坏还不如先问问 raid 卡和 hba 哪个更容易坏?
    冗余 hba 很简单,sas 协议本来就支持,全插上去就行了。设置管理冗余 raid 控制器则复杂得多。

    软件 raid 还有一大优势就是可以选择性地恢复和校验。这是 zfs 这些基于文件系统的阵列相对于基于块的磁盘 raid 的优势。

    生产上用硬件 raid 主要还是因为性能问题。高速读写时软 raid,特别是 raid5/6 这些 hash,对 CPU 还有 pcie 带宽的占有都很厉害。
    singerll
        22
    singerll  
       2021-08-07 22:00:50 +08:00
    @ryd994
    1 、我的原话是“硬件 raid 是有缓存的,有的还有电容保护,在你掉电时能保证数据写入。”我并没有提 writeback cache

    2 、再说一遍,我想说的是硬件 raid 和软件 raid 的区别,而不是个人 nas 中硬件 raid 和软件 raid 的区别。

    RAID 卡能不能买到,UPS 会不会崩掉,这个跟 RAID 本事没关系,我想说的硬件 RAID 能够帮助你缓解这些情况。你光说我说的是特殊情况,而你一直用特殊情况在回应我。那我还说软件 raid 万一有 bug 呢,软硬 raid 再好也抵不上我直接建一套分布式存储,要抬杠谁不会。
    singerll
        23
    singerll  
       2021-08-07 22:04:19 +08:00
    @ryd994 而且我觉得我一直说的是,硬件 RAID 能够解决什么问题,而你一直跟我说的是,这个问题存不存在,即便存在,是不是特殊情况。
    billlee
        24
    billlee  
       2021-08-07 22:39:44 +08:00
    关于硬盘失效,我在办公室里维护着十多台服务器,两年多来已经报废了 2 块硬盘了。

    硬盘失效的表现,在有阵列卡的情况下,就是掉盘,指示灯直接灭了,具体出了什么问题,因为被阵列卡隔着,就不太清楚了。

    没有阵列卡的情况下,表现就是某个地址报 unrecoverable read error, 并且覆写后仍然读不出来。

    家用情况,还是推荐软 RAID 1 或者软 RAID6.
    billlee
        25
    billlee  
       2021-08-07 22:42:00 +08:00
    @msg7086 不懂就不要瞎说了。硬盘的数据是每个扇区有 CRC 的,出错的情况下只会报 unrecoverable read error, 不可能给你返回错的数据。阵列卡或 RAID 软件收到错误码就知道是哪块硬盘上的数据出错了,RAID 就是用来恢复错误的,不是用来检查错误的。
    ryd994
        26
    ryd994  
       2021-08-07 22:43:02 +08:00 via Android
    @singerll 你对硬件 raid 特别是写入缓存的认识有根本性问题。
    1. 硬件 raid 的 bbu 不能保证数据写入,而是保护缓存数据,如果你不及时重启还是会完蛋,你这是根本性错误。
    你就没有想过 raid 卡那点小电池 /电容怎么可能驱动几十块硬盘?
    企业级 ssd 内置的电容也是提高随机写性能用的。没有电容的 ssd 就不能用了吗?就会丢数据吗?固件写得差的时候才会。

    2. 硬件 raid 并不会提高数据一致性。文件系统本身就可以保证断电不崩。缓存的作用而是提高性能,让你可以忽略 flush 指令。如果没有缓存,数据正确性和安全性不会有问题,只有随机写入性能问题。不管实际情况瞎配置才会丢失数据。

    没有缓存不会导致数据丢失,只会导致性能问题。只有你自己软件写的垃圾才会丢数据。
    billlee
        27
    billlee  
       2021-08-07 22:45:10 +08:00
    更正,扇区的 ECC 不是 CRC. 是可以纠错的
    ryd994
        28
    ryd994  
       2021-08-07 22:52:58 +08:00 via Android
    @singerll 你对硬件 raid 能解决的问题有根本性误解。硬件 raid 是能提供一个非易失的写入缓存。软件 raid 是靠 ssd 来提供。这两者的数据一致性是一样的。区别在于性能。
    机械硬盘,你发出 flush 指令,硬盘告诉你 flush 完成了就是完成了,断电也不会没有。
    所有软件在编写的时候就必须考虑数据的写入缓存和同步的时机。就算基于硬件的 raid,操作系统也在多个级别上有各种各样的缓存,包括 libc,vfs,page cache,io queue 。不 flush 到 raid 卡的缓存区你的 bbu 有个毛用。数据一致性是靠正确的缓存管理,问题在缓存管理,你往 raid 技术上用力有个毛用?

    我不是在说数据一致性问题不存在而是在说硬件 raid 无法解决你说的问题。而当你正确地解决了数据一致性问题时,软件 raid 也一样没有问题。
    singerll
        29
    singerll  
       2021-08-07 22:54:55 +08:00 via Android
    @ryd994 这个问题我从来都没表达过我的看法,请问你是怎么得出我有误解的结论的?
    ryd994
        30
    ryd994  
       2021-08-07 22:59:30 +08:00 via Android
    @singerll bbu 就是用来开 writeback cache 的。你不用 writeback cache 的话 bbu 对数据一致性没有任何作用,无论是否有 bbu,用的是软件 raid 还是硬件 raid 。
    singerll
        31
    singerll  
       2021-08-07 23:04:14 +08:00 via Android
    @ryd994 别杠了大兄弟。我都快笑死了,我说东你就说西。我说的是硬件 raid 比软件 raid 多个缓存的问题,你一直跟我扯哪种情况没有用,说白了不还是有的情况是有用的?
    ryd994
        32
    ryd994  
       2021-08-07 23:07:01 +08:00 via Android
    @singerll “硬件 raid 是有缓存的,有的还有电容保护,在你掉电时能保证数据写入。”
    这是你原话。那我问你,如果不是开了 writeback cache,你为什么需要保证数据写入?软件从来就不应该认为写了文件就是保证落盘。
    何况你还说错了。即使有电容保护也不能保证数据写入。

    然后你又说“软件 raid 的问题是,万一 win 系统挂了怎么办?”
    这也是错的。Windows 挂了对数据没有任何影响。系统盘挂了的效果就和 raid 卡挂了效果一样:换一个继续用。
    ryd994
        33
    ryd994  
       2021-08-07 23:10:47 +08:00 via Android
    @singerll 硬件 raid 比软件 raid 多个缓存?
    就 tm 是因为多了个缓存才需要多考虑一个一致性问题好吧。
    没这缓存就没这破事了。没缓存还要个毛的 bbu 。直接写硬盘啊,写一字节 flush 一次,连硬盘本身的缓存也 bypass 掉。和 raid 卡有个毛关系。性能是一沓糊涂但是错是绝对没错的。我就问你,硬件 raid 为什么需要加缓存?
    你不会以为缓存就是好吧?不会吧不会吧?
    singerll
        34
    singerll  
       2021-08-07 23:14:21 +08:00 via Android
    @ryd994 b 了再见。
    ryd994
        35
    ryd994  
       2021-08-07 23:14:43 +08:00 via Android
    @singerll 我再说一遍,硬件缓存对数据一致性没有任何正面作用。
    你连缓存是做什么用的都没整明白就在和我吵硬件 raid 能不能保证数据写入?
    硬件 raid 对数据一致性有用?那你软件没 bug 哪来的一致性问题?正常的数据库没 cache 就该掉数据?

    到底是谁在用 corner case 说事?
    ryd994
        36
    ryd994  
       2021-08-07 23:18:56 +08:00 via Android
    @singerll 小学生呗。发现自己错了就开始死犟,吵不过就 b 。然后继续在自己的 echo chamber 里以为自己就是对的。

    硬件 raid 能保证写入?笑了。写软件不考虑缓存问题就在这指望硬件救你呢?
    msg7086
        37
    msg7086  
       2021-08-08 04:42:55 +08:00 via Android
    @billlee #23 不懂就不要瞎说了。
    这帖子管 ECC 啥事,从头到尾我就没提这个东西,你扯什么呢。
    谁告诉你硬盘返回错误数据是因为 ure ?
    真以为硬盘上的主控和电路板和缓存都能百分百保证数据传输不出错吗?
    bit flip 又不是只会发生在磁片上的。
    msg7086
        38
    msg7086  
       2021-08-08 05:04:37 +08:00 via Android
    @singerll 仔细读了一遍你们的对话, @ryd994 说得没错啊。
    硬件 Raid 的缓存本来就是开了 writeback 才能用,如果没有 bbu 的话就不能开写入缓存,开了就会在掉电时丢数据,这和软 raid 不是一样么。zfs 也能用 SSD 写入记录啊,这不就和硬件 raid 一样了么。这不是不冲突的问题,而是他们本来就是解决同样问题的(写入屏障)。只要把数据写入这个区域(阵列卡缓存或者 slog )数据就不会掉电丢,和软硬没关系。企业级的方案,必然是可以拿出类似的技术的,不存在说硬的能做软的做不了这么一说。

    至于 @ryd994 提到的 raid 信息问题,别的卡我不清楚,但是 lsi 都是写在盘尾的,而且这个信息 Linux 是认的。你把 raid 卡上的硬盘都拔下来,随便找个电脑直接插上,Linux MD 是可以读到阵列信息然后拼起 MD 设备的。所以就算卡坏了或者一块盘坏了也是不影响的。

    还是那句话,企业级的方案,不管软硬一般都能实现类似的功能。就算现在没有实现的,将来也会逐渐实现出来。毕竟企业里总有一半的人要用硬的,一半要用软的,不管是硬件提供商还是软件开发者都会去吸收对方的重要功能满足企业要求。
    msg7086
        39
    msg7086  
       2021-08-08 05:10:05 +08:00 via Android
    @Osk uefi 和 BIOS 这个我吃不准,但是现在都是 uefi 的,只要不买特别古老的卡都是没问题的。我买的 lsi 阵列卡和 solarflare 网卡,都可以进它们的控制界面的。
    有些卡是认机器的,Dell 或者 hp only,不过记得可以金手指贴胶带搞定。不过我买来的 Dell 阵列卡插上就能用,应该问题不大。
    回想起来,我给 Dell 阵列卡刷机就是因为 uefi 刷不上所以临时翻了一台 BIOS 的机器来刷的,这么一想这块卡应该是两边都能用才对。
    singerll
        40
    singerll  
       2021-08-08 05:40:03 +08:00 via Android
    @msg7086 我说的是硬 raid 比软 raid 多这个功能,你也在跟我说如果什么情况下软硬 raid 一样。

    就好像我说汽车比自行车跑得快,你非给我科普没油推着走时,还是自行车快。不在一个频道好吧。
    yazoox
        41
    yazoox  
       2021-08-08 06:44:02 +08:00
    @FlyingShark 群晖的 shr 好用么?听说是变形的 raid5 ?要是坏了一块盘,怎么重建?
    ryd994
        42
    ryd994  
       2021-08-08 07:33:54 +08:00 via Android
    @singerll 你如果真的把我的话看懂。用你的比喻:
    你:汽车有天窗,要透气的时候可以打开,所以汽车比自行车通风更好
    我:你不开汽车要个毛的天窗
    你:你就说有没有通风吧

    人家自行车透气比汽车好多了好吧。是因为汽车开得快,才需要做车厢罩起来,然后才有的通风问题。

    你说汽车(一般情况下)比自行车跑得快,没问题。但是你要说汽车比自行车更透气,那就有问题。

    你不能把“创造一个本不存在的问题,然后用其他办法解决它”,截掉前一半,变成“解决了 xx 问题”吧。
    PolarBears
        43
    PolarBears  
       2021-08-08 07:42:19 +08:00
    个人观点是 Raid 是为了保证高可用其次才是冗余修复数据的功能。无法保证数据遭到误操作或恶意删除。
    生产环境的话应是 raid+定期备份,个人用的话我觉得每天同步下做备份即可。
    SgtPepper
        44
    SgtPepper  
       2021-08-08 12:49:34 +08:00
    之前搭 r630 试验机的时候查过,后来决定用 raid10 。。。参考过这篇文章: https://zhuanlan.zhihu.com/p/31944934
    我也给个计算 raid 可靠性的网站 https://wintelguy.com/raidmttdl.pl
    justaname
        45
    justaname  
       2021-11-24 18:32:47 +08:00
    @neteroster 这个理论很明显是错误的,哪怕是没有自动坏区映射的老式硬卡,出现 URE 也只会导致重建失败而不是数据全损。RAID 条带的分布算法全部是公开的,有配置文件或者尝试出条带顺序手动也能把没有在坏区上的数据拷贝出来,最差的情况也不会比做 JBOD 或者单盘差,除非真的是两块盘全损。另外主流的软 RAID 以及硬 RAID 都不会因为出现 URE 就直接挂掉
    justaname
        46
    justaname  
       2021-11-24 19:04:46 +08:00
    @msg7086 我了解了一下,你说的第一点大部分情况下并不成立,除非有磁盘离线的情况下往里面写数据,不然如果数据损坏单盘本身自带有 CRC 校验可以指出是阵列中的哪一块硬盘出错。单盘出错但是 CRC 校验完全正常的可能性微乎其微,所以绝大部分情况下 RAID 可以 recover 出正确的数据。此外如果不依赖硬盘本身校验,理论上两个冗余位并不能恢复出错误的那个 bit ,按照矫错码理论至少需要( 2n+1 )个额外 bit 才能确保恢复 n 个 bit 的错误信息
    msg7086
        47
    msg7086  
       2021-11-25 02:55:49 +08:00
    @justaname 你说反了。
    「单盘出错但是 CRC 校验完全正常的可能性」极高。

    首先单盘上的 ECC 是包容性的,所以 ECC 校验失败并不会上报到上层,你是感知不到的。
    而且 ECC 校验失败也不会导致数据损坏,只有在错误过多导致 ECC 无法包容性修复的时候才会产生坏块。
    4K 高级格式里 ECC 是每个 4K 扇区 100 字节,所以并不是只能恢复 2 bits 信息。
    所以这部分是完全触碰不到 RAID 的。你不做 RAID 照样可以享受相同的待遇。

    其次,RAID 要处理的通常不是单盘底层的 bitflip ,因为那些 bitflip 会被 ECC 处理掉。
    RAID 要处理的是上层 bitflip ,比如数据线、PCB 、芯片部分产生的 bitflip 。
    比如写入数据的时候,硬盘上的内存芯片报道出现了偏差,写盘的时候写错一个 bit 。
    这种情况下 ECC 也是根据错误的数据生成的,所以这种错误就只能由 RAID 6 ,或者其他带有 Checksum 的文件系统来纠正(比如 zfs )。

    然后你说的「有磁盘离线的情况下往里面写数据」这个也是经常发生的时间。
    一块硬盘读到坏块然后反复尝试读取,导致超时然后被阵列踢掉,这种事情每天都在发生。

    另外,奇偶+里索完全可以恢复单个 bitflip 。这方面的论文实在太多了我就不多啰嗦了。
    justaname
        48
    justaname  
       2021-11-25 04:47:45 +08:00
    @msg7086 学习了,有机会进一步了解一下这其中的运行机制
    geniussoft
        49
    geniussoft  
       2021-12-28 09:46:17 +08:00
    针对:"如果使用 win 磁盘阵列组了个 raid1 ,它在使用数据的时候发现两块硬盘上数据不一样,一块是 1010 ,一块是 1000 ,raid 要怎么知道哪个才是正确数据呢?"

    很不幸,你发现了这个问题。

    曾经大家都告诉我,RAID1 最安全,但是亲身的测试告诉我,并不是。
    绝大多数系统巡检都不会确认两个盘中的数据是否一致。
    因为如果出现不一致,没人知道哪个是对的...

    幸运的是,群晖 + RAID1/5/6 + btrfs + 数据完整性 可以解决这个问题。
    当读取文件时,会自动确认块的 CRC 是否正确。
    如果不正确,会用冗余信息生成块,找到正确的块。
    Felldeadbird
        50
    Felldeadbird  
       2022-09-14 13:39:01 +08:00
    啊,学习了。我刚搞了台黑裙。我特意买了 2 个硬盘组 raid1 . 看来我陷入了误区- -。 真糟糕。还好刚弄了 100G 照片上去。切换成本不会特别高。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.