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

Linux 大目录拷贝

  •  
  •   Aumujun ·
    None · 2022-10-25 09:41:45 +08:00 · 4201 次点击
    这是一个创建于 520 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个服务运行的时候会实时产生大量细碎文件,我需要在不停服务的情况把它的所有数据拷贝到另一个磁盘;有什么办法能够在不影响服务的情况下完整同步它的所有文件呢,以前一直用的 rsync ,但从来没有在这个场景里试过。文件系统是 xfs ,需要拷贝的数据大概在 2T 左右 。

    34 条回复    2022-11-05 14:58:00 +08:00
    ursus1024
        1
    ursus1024  
       2022-10-25 10:05:11 +08:00
    压缩,迁移,解压.............
    Aumujun
        2
    Aumujun  
    OP
       2022-10-25 10:06:39 +08:00
    @ursus1024 怎么保证文件的完整性?
    ccc008
        3
    ccc008  
       2022-10-25 10:11:57 +08:00
    不知道你具体的场景。个人感觉要做一下文件夹规划。每天的量多不多?不多按天建文件夹,多的话每天的文件夹下面再按小时分。然后同步的时候同步每天或者每小时的文件夹去同步。
    Vegetable
        4
    Vegetable  
       2022-10-25 10:13:46 +08:00
    rsync 就是干这个的
    my3157
        5
    my3157  
       2022-10-25 10:13:57 +08:00
    改 zfs , 用 snapshot send/receive
    Aumujun
        6
    Aumujun  
    OP
       2022-10-25 10:16:57 +08:00
    @ccc008 不可能这么做的,这是一个服务,你仔细看一下描述。
    cheng6563
        7
    cheng6563  
       2022-10-25 10:18:32 +08:00
    你又没走网络 IO ,那直接 rsync 对拷就是了啊,有啥不完整的。

    如果分区是基于 lvm 的那就可以用快照实现一致性,不然也没其他办法了。
    Aumujun
        8
    Aumujun  
    OP
       2022-10-25 10:27:54 +08:00
    @cheng6563 这个数据很重要,我多次内网 rsync 拷过去文件都损坏了,几个 T 的目录里全是几百 K ,一两兆那种文件,坏一个都 GG ,就算是本地跨设备拷贝不走网络也有一些担心。
    momocraft
        9
    momocraft  
       2022-10-25 10:31:32 +08:00
    写入是随机的,那从头复制的都不行
    试试 syncthing
    cheng6563
        10
    cheng6563  
       2022-10-25 10:49:27 +08:00
    @Aumujun 要 100%不损坏你只能带上校验文件了,或者拷完后用 diff 比较。
    这都要求你要有个类似 lvm 的分区管理器,不然你服务若在你拷贝时读写肯定校验不过。
    Aumujun
        11
    Aumujun  
    OP
       2022-10-25 10:53:30 +08:00
    @cheng6563 我试试 rsync 后再做一次完整的校验,备份的磁盘没有使用 lvm ;实在不行我把备份盘改成 lvm 用快照的方式试试。多谢老哥。
    zhanggg
        12
    zhanggg  
       2022-10-25 11:33:45 +08:00
    raid1 双写 + 热插拔 ?
    limobai
        13
    limobai  
       2022-10-25 11:39:02 +08:00
    limobai
        14
    limobai  
       2022-10-25 11:40:23 +08:00
    matrix67
        15
    matrix67  
       2022-10-25 11:40:57 +08:00
    > 运行的时候会实时产生大量细碎文件

    改改服务,写 chunk 。比如几百个合成 1M 之类的。
    vhysug01
        16
    vhysug01  
       2022-10-25 12:30:38 +08:00 via iPhone
    ceph ?
    microxiaoxiao
        17
    microxiaoxiao  
       2022-10-25 12:57:33 +08:00 via Android
    glusterfs 复制卷可以吧,文件级别的双份写。
    billlee
        18
    billlee  
       2022-10-25 13:01:25 +08:00 via Android   ❤️ 4
    这个根本就不是拷贝文件的问题,而是数据一致性的问题。你这数据一直在变化,拷贝需要时间,最后得到的数据肯定是不完整的。除非有 checkpoint 机制,这个 checkpoint 机制要么你的应用自己实现,要么依赖文件系统来提供。
    Aumujun
        19
    Aumujun  
    OP
       2022-10-25 13:10:25 +08:00
    @billlee 和七楼老哥说的一样,我需要的就是这个;这个服务是可以停止后备份的,但每次停止都会耽误进度;所以寻求这样的一个解决方案,后续我会尽量把这种服务建立在 btrfs 上,方便迁移和复制。
    JohnBull
        20
    JohnBull  
       2022-10-25 13:26:32 +08:00
    rsync
    novolunt
        21
    novolunt  
       2022-10-25 14:16:15 +08:00   ❤️ 1
    @ursus1024 对,使用 Facebook 开源压缩程序 zstd
    同步到服务器
    zstd -14 -T0 -r /opt -c | ssh $slave "cat > pkg_file. tgz "
    同步到微软云 blob
    zstd -14 -T0 -r /opt -c | azcopy copy --from-to PipeBlob "https://myaccountname.blob.core.windows.net/inputs/input.fastq.gz" #input.fastq.gz 这里需要固定得文件名,PipeBlob 是固定的
    julyclyde
        22
    julyclyde  
       2022-10-25 14:17:36 +08:00
    之前给一个服务器做数据备份
    直接读它的日志,看哪些文件变化过,然后整理成列表给 rsync 用
    lvzhiqiang
        23
    lvzhiqiang  
       2022-10-25 15:35:13 +08:00   ❤️ 1
    推荐用 lsync ,直接集成 文件变动通知。
    ladypxy
        24
    ladypxy  
       2022-10-25 15:37:34 +08:00 via iPhone
    换成 zfs ,直接定期发送快照
    madao2015
        25
    madao2015  
       2022-10-25 15:42:22 +08:00
    rsync 挺快,应该有检查文件一致性的参数
    defunct9
        26
    defunct9  
       2022-10-25 17:30:26 +08:00
    lsync ,这个是王道。但是小心它的语法,跟 rsync 有区别
    MrKrabs
        27
    MrKrabs  
       2022-10-25 20:21:24 +08:00
    你数据一直在变怎么定义“完整同步”?
    Aumujun
        28
    Aumujun  
    OP
       2022-10-25 23:24:31 +08:00 via Android
    @MrKrabs 你猜楼上给出解决方案的老哥们怎么定义的?
    Aumujun
        29
    Aumujun  
    OP
       2022-10-25 23:25:29 +08:00 via Android
    @defunct9 正在用了,还没拷完,后面看看效果。
    erhandsome
        30
    erhandsome  
       2022-10-25 23:35:16 +08:00
    lsyncd
    yyttrr
        31
    yyttrr  
       2022-10-26 10:35:54 +08:00
    塞进 docker 里面准备两套启动命令,相同的镜像,不同的端口,不同的持久化目录。
    运行第一个启动命令,产生文件,过一段时间之后,停止第一个容器,运行第二个启动命令。这时拷贝第一个产生的文件,重复执行
    msg7086
        32
    msg7086  
       2022-10-26 15:57:51 +08:00
    btrfs snapshot (或者 zfs ),先暂停,然后快照,然后继续跑。快照里的你慢慢 rsync ,跑完释放掉。
    yanqiyu
        33
    yanqiyu  
       2022-10-27 16:20:22 +08:00
    btrfs 创建一致快照再 send 出去
    liuliancao
        34
    liuliancao  
       2022-11-05 14:58:00 +08:00
    啥文件 啥服务 文件内容啥 其实也可以考虑利用起来 比如接个 filebeat 吐出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1096 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:48 · PVG 06:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.