V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
byte404
V2EX  ›  Linux

Linux 大目录拷贝

  •  
  •   byte404 ·
    None · Oct 25, 2022 · 5299 views
    This topic created in 1281 days ago, the information mentioned may be changed or developed.

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

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

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

    改改服务,写 chunk 。比如几百个合成 1M 之类的。
    vhysug01
        16
    vhysug01  
       Oct 25, 2022 via iPhone
    ceph ?
    microxiaoxiao
        17
    microxiaoxiao  
       Oct 25, 2022 via Android
    glusterfs 复制卷可以吧,文件级别的双份写。
    billlee
        18
    billlee  
       Oct 25, 2022 via Android   ❤️ 4
    这个根本就不是拷贝文件的问题,而是数据一致性的问题。你这数据一直在变化,拷贝需要时间,最后得到的数据肯定是不完整的。除非有 checkpoint 机制,这个 checkpoint 机制要么你的应用自己实现,要么依赖文件系统来提供。
    byte404
        19
    byte404  
    OP
       Oct 25, 2022
    @billlee 和七楼老哥说的一样,我需要的就是这个;这个服务是可以停止后备份的,但每次停止都会耽误进度;所以寻求这样的一个解决方案,后续我会尽量把这种服务建立在 btrfs 上,方便迁移和复制。
    JohnBull
        20
    JohnBull  
       Oct 25, 2022
    rsync
    novolunt
        21
    novolunt  
       Oct 25, 2022   ❤️ 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  
       Oct 25, 2022
    之前给一个服务器做数据备份
    直接读它的日志,看哪些文件变化过,然后整理成列表给 rsync 用
    lvzhiqiang
        23
    lvzhiqiang  
       Oct 25, 2022   ❤️ 1
    推荐用 lsync ,直接集成 文件变动通知。
    Dragonish3600
        24
    Dragonish3600  
       Oct 25, 2022 via iPhone
    换成 zfs ,直接定期发送快照
    madao2015
        25
    madao2015  
       Oct 25, 2022
    rsync 挺快,应该有检查文件一致性的参数
    defunct9
        26
    defunct9  
       Oct 25, 2022
    lsync ,这个是王道。但是小心它的语法,跟 rsync 有区别
    MrKrabs
        27
    MrKrabs  
       Oct 25, 2022
    你数据一直在变怎么定义“完整同步”?
    byte404
        28
    byte404  
    OP
       Oct 25, 2022 via Android
    @MrKrabs 你猜楼上给出解决方案的老哥们怎么定义的?
    byte404
        29
    byte404  
    OP
       Oct 25, 2022 via Android
    @defunct9 正在用了,还没拷完,后面看看效果。
    calvey
        30
    calvey  
       Oct 25, 2022
    lsyncd
    yyttrr
        31
    yyttrr  
       Oct 26, 2022
    塞进 docker 里面准备两套启动命令,相同的镜像,不同的端口,不同的持久化目录。
    运行第一个启动命令,产生文件,过一段时间之后,停止第一个容器,运行第二个启动命令。这时拷贝第一个产生的文件,重复执行
    msg7086
        32
    msg7086  
       Oct 26, 2022
    btrfs snapshot (或者 zfs ),先暂停,然后快照,然后继续跑。快照里的你慢慢 rsync ,跑完释放掉。
    yanqiyu
        33
    yanqiyu  
       Oct 27, 2022
    btrfs 创建一致快照再 send 出去
    liuliancao
        34
    liuliancao  
       Nov 5, 2022
    啥文件 啥服务 文件内容啥 其实也可以考虑利用起来 比如接个 filebeat 吐出来
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   943 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 21:28 · PVG 05:28 · LAX 14:28 · JFK 17:28
    ♥ Do have faith in what you're doing.