V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cuso45h2o
V2EX  ›  程序员

求 Windows 和 macOS 下单盘防止 bit rot 的最佳实践

  •  
  •   cuso45h2o · 2023-09-26 11:20:31 +08:00 via iPad · 1170 次点击
    这是一个创建于 422 天前的主题,其中的信息可能已经有所发展或是发生改变。

    确实遇到过 bit rot 导致部分数据损坏的情况,也多次看见各种场景下 bit rot 的案例(本站好像就有, https://v2ex.com/t/695160 第 119 条回复可确定 bit rot )所以我对文件系统的数据完整性功能比较看重。

    因为用的 Windows 轻薄本只能插一块 M.2 硬盘,研究了一种单盘抗 bit rot 的方案:自制了一个小工具每 10 分钟 rclone sync 客户端侧加密单向同步到 Google Drive 一遍。因为开启了 ReFS 完整性的 Enforced ,手动破坏 VHD 文件实验确定 ReFS 确实能阻止对损坏文件的读取,从而防止 rclone 上传损坏文件。因为发现在尝试读取损坏文件时会触发一个 System EventID=133 的事件,我还做了一个 133 事件时自动从 Google Drive 拉回对应完好文件的功能。不知道是不是单盘的原因,Microsoft\Windows\Data Integrity Scan 这个 Scrubber 总是不工作,在 1 秒内退出,扫描不出任何错误,所以还做了一个每天凌晨 3 点全盘读取一次的功能(我嫌麻烦从来不关电脑也不睡眠)。

    但我最近多次在 Reddit 等地方看到 ReFS 的负面文章(尽管在我手动破坏 VHD 的实验中表现的似乎还不错,除了那个 Scrubber 无法工作外没有出现预期外结果,但那些 Reddit 上发帖的用户做了自动化测试脚本,比我的实验覆盖的用例多不少),同时我还有一台使用 Apple M2 Pro 处理器的备用笔记本(无法在物理机上直接安装 Windows ,macOS 下似乎没有支持文件内容 checksum 的文件系统)想问问有没有什么更好的实践。

    我也考虑过不基于文件系统的实现,定期全量校验文件 hash ,但这种情况下除了无法防止因硬盘固件等问题导致数据在写入硬盘前就出现错误外(我的现有方案也无法纠正这种情况的错误),无法拦截错误数据的读取,更重要的是无法准确判断是否是用户的主动更改(发现了一个软件在保存文件时不会更新文件的修改时间,不知道是用了什么办法写入数据的)

    我必须使用的生产力软件没有 Linux 版本,也完全无法在 wine 中工作,因此请不要推荐使用 Linux ,以及用奇怪的办法在 Windows 下使用 Linux Only 的文件系统,例如 ZFS 。

    11 条回复    2023-09-26 15:38:53 +08:00
    cuso45h2o
        1
    cuso45h2o  
    OP
       2023-09-26 11:34:32 +08:00
    修改了几处不通顺的表达,提示不能编辑这个主题
    msg7086
        2
    msg7086  
       2023-09-26 13:47:56 +08:00
    存储介质的静默 bitrot 很少发生,发生的原因大多是内存损坏,数据在到达存储介质之前就坏了。存储介质内部有 ECC ,如果错误数量少于 ECC 能纠错的数量就会静默纠错,多于数量就会直接报校验错。所以一般建议的措施是换用 ECC 内存,或者直接上工作站/服务器平台。
    mokiki
        3
    mokiki  
       2023-09-26 13:52:50 +08:00
    虽然你不要大家推荐 ZFS 和 Linux
    但是 ZFS + Linux + Qemu 的虚拟化方案你有没有想到过?
    xtreme1
        4
    xtreme1  
       2023-09-26 13:59:15 +08:00
    0.0 我不是很理解, 如果觉得真有必要防止 bit rot, 那么来自存储介质的数据都不能相信, 你的对抗措施依赖的那些程序要怎么办呢... 焊个 nor flash 上去?
    geniussoft
        5
    geniussoft  
       2023-09-26 14:26:47 +08:00 via iPhone
    @msg7086
    正解。闪存因为不可靠,现在的主控都有超级强大的 ECC 算法。这种小概率事件基本无需担忧,因为基本都伴随着更可怕的情况发生。
    cuso45h2o
        6
    cuso45h2o  
    OP
       2023-09-26 14:38:31 +08:00
    #3 最早就是用这种方案,但笔记本是需要带出去使用的,虚拟机太耗电了

    cc @mokiki
    mokiki
        7
    mokiki  
       2023-09-26 15:03:53 +08:00
    vbox 装 linux ,linux 里用 btrfs 配置 raid1 。这样主系统是 windows ,专业软件运行不会有性能损失。btrfs 资源需求比 zfs 少,虚拟机非常轻量,估计比之前的虚拟机方案省电。
    mokiki
        8
    mokiki  
       2023-09-26 15:06:56 +08:00
    接上,把重要文件通过 smb 存到虚拟机里,或者用 windows 连接虚拟通过 iscsi 协议提供块设备。
    cnbatch
        9
    cnbatch  
       2023-09-26 15:35:38 +08:00
    纠个错,ZFS 并非 Linux Only 的文件系统,BTRFS 才是 Linux Only 的。

    ZFS 原本是 Sun Solaris 的文件系统,开源后被 FreeBSD 主动引入,随后才轮到 Linux
    ambition117
        10
    ambition117  
       2023-09-26 15:38:49 +08:00 via iPhone
    hdd 才需要考虑,ssd 基本不会了
    cnbatch
        11
    cnbatch  
       2023-09-26 15:38:53 +08:00
    笔记本电脑也能用 ECC ,虽然型号不多。

    找到一个:
    https://www.servethehome.com/dell-precision-7540-with-intel-xeon-and-ecc-memory-review/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1425 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.