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

硬盘存储的数据发生静态错误的概率

  •  
  •   AncientLibrary · 2022-11-28 21:47:38 +08:00 · 1509 次点击
    这是一个创建于 728 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不好意思我不知道这个静态错误是不是正确的术语 就是我们存在硬盘中的数据,什么也没干(没有发生拷贝等一系列操作)自然就发生了变化,可以表现为譬如说 MD5 的值发生了改变。

    我想请教一下大量保存数据的各位,大家肯定都有防止机械硬盘一整块挂掉的措施,譬如说 raid 系统,但是大家有没有采取措施来防止内部数据的静态错误(而不仅仅是硬盘的机械故障)?譬如说把所有的数据压缩成一个一个压缩包计算 MD5 再定期对比?一般机械硬盘的静态错误发生的概率是多少,值得我们去这样防范吗?有没有懂的大佬解释一下

    10 条回复    2022-12-01 18:10:04 +08:00
    v2tudnew
        1
    v2tudnew  
       2022-11-28 23:41:54 +08:00
    https://en.wikipedia.org/wiki/Data_degradation
    你说的是这个吧?新盘和写入一两年的数据概率非常低的,旧硬盘和长期该区域的数据没有被重复写入,概率会逐渐提高。
    RAID 如果支持是可以后台自动定期进行完整性扫描的,如果是冷备份,可以用 PAR2 软件(例如 MultiPar ),也可以用 WinRAR 打包加上恢复记录,当然前提是在制作 PAR2 或者打包的那一刻,你的数据没有损坏。
    当然你也无脑多块硬盘多备份,同时损坏一个文件的概率是极低的。
    wizardyhnr
        2
    wizardyhnr  
       2022-11-29 05:05:13 +08:00
    买市场风评好的存储硬件。UPS 防断电。好的 PSU 。
    文件系统用 btrfs 这样有校验功能的,写入文件时系统同时存入校验值,定期执行 scrub ,有 bit rot 就修复了。
    重要数据做 3-2-1 冷数据备份,非光盘用 par2 ,光盘用 DVDisaster 。
    julyclyde
        3
    julyclyde  
       2022-11-29 09:27:10 +08:00
    MD5 谈不上改变
    你这个提问方式有问题
    deorth
        4
    deorth  
       2022-11-29 15:42:01 +08:00 via Android
    建议上 zfs
    busier
        5
    busier  
       2022-11-29 18:54:51 +08:00
    你说的这个情况叫 silent corrupt ,我在移动硬盘上使用都是使用 btrfs 的,btrfs 是可以发现 silent corrupt 的!而 FAT/NTFS/exFAT 都不行。
    julyclyde
        6
    julyclyde  
       2022-11-30 09:06:22 +08:00
    @zhangjint5 啥原理? btrfs 有后台巡检吗?
    AncientLibrary
        7
    AncientLibrary  
    OP
       2022-11-30 19:57:06 +08:00
    @zhangjint5 那我现在使用 btrfs ,要怎么做它才能启动检查?是需要 terminal 输入什么命令吗?还是它会自动检查?这方面的资料我 google 了一下感觉很杂,也没有找到直接的答案。感谢前辈了
    busier
        8
    busier  
       2022-12-01 18:04:38 +08:00
    日常使用磁盘不用管它,遇到发生 silent corrupt 的文件,btrfs 文件系统直接会报文件读写错误,而不会静悄悄的读到错误内容的文件。

    如果需要手动检查一遍磁盘所有文件,用 btrfs 命令的 scrub 可以扫描所有文件,如果扫描到发生 silent corrupt 的文件会记录到日志,用 sudo dmesg -k 命令查看。

    ######################

    sudo btrfs scrub --help
    usage: btrfs scrub <command> [options] <path>|<device>

    btrfs scrub start [-BdqrRf] [-c ioprio_class -n ioprio_classdata] <path>|<device>
    Start a new scrub. If a scrub is already running, the new one fails.
    btrfs scrub cancel <path>|<device>
    Cancel a running scrub
    btrfs scrub resume [-BdqrR] [-c ioprio_class -n ioprio_classdata] <path>|<device>
    Resume previously canceled or interrupted scrub
    btrfs scrub status [-dR] <path>|<device>
    Show status of running or finished scrub

    verify checksums of data and metadata
    busier
        9
    busier  
       2022-12-01 18:08:42 +08:00
    你可以这样测试,找一个小 U 盘,格式化成 BTRFS ,写入一个大文件,沾掉空间 90%左右就行。

    然后用 16 进制编辑器,以块设备的方式打开 U 盘设备,随便修改一个字节。

    然后再通过 BTRFS 正常读取文件,就会被逮住发生 silent corrupt 错误!
    busier
        10
    busier  
       2022-12-01 18:10:04 +08:00
    然后用 16 进制编辑器,以块设备的方式打开 U 盘设备,随便修改一个字节。

    (纠正下,在 U 盘靠近中间位置改,确保是文件的数据区)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 21:07 · PVG 05:07 · LAX 13:07 · JFK 16:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.