V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
laqow
V2EX  ›  Linux

Linux 如何减少拷贝大文件到 USB 磁盘时的错误风险

  •  
  •   laqow · 2022-10-28 11:16:16 +08:00 · 3122 次点击
    这是一个创建于 792 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是从一个服务器通过 5T 叠瓦 USB 移动硬盘转移多个包含 2T 大量文件的文件夹到另一个服务器

    目前是一边用 tar | pigz 压缩到硬盘,另一边用 pigz | tar 解压,想着简单压缩能保证如果数据有错误在解压时会报错,不需要校验所有文件特征码

    现在问题是按这个方法处理时其中一个 2T 文件夹在解压时报错了,感觉磁盘随机写入错误背一部分锅,想请教如何保证这种复制能一次成功的概率?或者有没有其他方法?

    15 条回复    2022-10-29 17:59:55 +08:00
    flynaj
        1
    flynaj  
       2022-10-28 11:37:04 +08:00
    usb 接口的问题,不是磁盘。以前就发现过。如果是用 winrar 的话可以添加恢复记录,对于这种偶尔的 usb 传输错误是可以恢复的。其它软件可以分卷存储,那个卷坏了,只有重新复制。文件生成 sha 校验。复制完成后重插 usb 设备就可以验证了。当时就可以确认问题。
    laqow
        2
    laqow  
    OP
       2022-10-28 11:47:27 +08:00
    @flynaj 谢谢,我看看 linux 下 RAR 能不能带恢复记录

    另外一个想法是 tar 压缩时以完整文件为单位分成多个压缩文件可能比压成整个大文件错误恢复时简单一些,不知道有没有现成的轮子。
    还有就是总觉的这种硬盘长时间写入会不稳定,因为中间有压缩,让系统管理缓存的话磁盘会一直低速地写入,感觉应该每缓存 1G 左右后整体写入,也不知道这样有没有轮子用
    lucifer9
        3
    lucifer9  
       2022-10-28 11:58:41 +08:00
    正常思路是 rar 按照 500M 或者 1G 分割,然后加恢复记录吧
    Android9487
        4
    Android9487  
       2022-10-28 12:18:15 +08:00
    用帶校驗的檔案系統,像是 Btrfs 。用復製工具,像是 rsync 。
    liaohongxing
        5
    liaohongxing  
       2022-10-28 14:46:20 +08:00
    如果是我,就打包大文件 ,cp 这个大文件到服务器磁盘上面,再解压 。就是磁盘预留一倍的量 。

    你的问题一般是 usb 带 sata 大容量 满负荷 容易供电不足 。整个 USB 外壳带外供电的把。
    laqow
        6
    laqow  
    OP
       2022-10-28 14:47:10 +08:00
    @lucifer9 这样按总文件分包是不是坏一个文件所有压缩包全坏的?我想最好是按文件逻辑分包,如果坏了就只需要重新处理坏掉的部分。感觉就是 find 先列出所有文件在外面安排好再分批压缩,但不知道有没有更简单的方法

    @Android9487 暂时只能在 ntfs 上,rsync 感觉也解决不了复制过程中硬件问题产生的这种随机问题。
    yyyb
        7
    yyyb  
       2022-10-28 14:51:29 +08:00
    我是写了个脚本,往网络存储或移动存储 cp 东西自动 sha 校验
    laqow
        8
    laqow  
    OP
       2022-10-28 14:52:46 +08:00
    @liaohongxing 就是两个机房的服务器数据转移,背面板供电应该足的,公共设备可能是 USB 线拉扯或硬盘随机质量问题,也没条件插额外电源
    liaohongxing
        9
    liaohongxing  
       2022-10-28 15:02:03 +08:00
    条件足够 ,利用服务器到期最后一段时间新旧机器直接网络对拷 。
    kokutou
        10
    kokutou  
       2022-10-28 15:35:48 +08:00 via Android
    考完了校验不就行了。。。
    libook
        11
    libook  
       2022-10-28 17:05:02 +08:00
    分卷压缩,然后单独算 Hash ,哪个分卷有问题就重新考那个分卷。
    印象里数据错误可能不一定会导致解压失败,所以最好解压完再算一次 Hash 。
    wizardyhnr
        12
    wizardyhnr  
       2022-10-28 21:32:02 +08:00
    用 par2 创建恢复卷,传输完成后用 par2 校验,如果有错误它会自动修复。
    lff0305
        13
    lff0305  
       2022-10-29 07:02:10 +08:00 via Android
    支持 12 楼
    JohnBull
        14
    JohnBull  
       2022-10-29 12:26:32 +08:00
    rsync
    laqow
        15
    laqow  
    OP
       2022-10-29 17:59:55 +08:00
    感谢各位,暂时用 rar a -m1 -ol -mt4 -ms'gz' -rr1 target.rar sourcefolder 这个代码压到硬盘,看解不出来再用别的方法。感觉用 Btrfs 做系统,rar 的 rr ,或者压缩后分卷计算特征码并对每卷做 par2 都是可行的。

    @JohnBull 两个服务器间没网,只是复制到硬盘 rsync 和 CP 一样吧。

    就原服务器空间不够,不能原位压缩再转移压缩完的文件。如果能在解压缩时用较短的时间判断完整性,出错的话只处理错误的部分文件就最好了,也避免中间低质量硬盘长时间多次读写增加额外的问题。

    @wizardyhnr 看着不错,下次试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.