Linux 大目录拷贝

2022 年 10 月 25 日
 byte404

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

5435 次点击
所在节点    Linux
34 条回复
ursus1024
2022 年 10 月 25 日
压缩,迁移,解压.............
byte404
2022 年 10 月 25 日
@ursus1024 怎么保证文件的完整性?
ccc008
2022 年 10 月 25 日
不知道你具体的场景。个人感觉要做一下文件夹规划。每天的量多不多?不多按天建文件夹,多的话每天的文件夹下面再按小时分。然后同步的时候同步每天或者每小时的文件夹去同步。
Vegetable
2022 年 10 月 25 日
rsync 就是干这个的
my3157
2022 年 10 月 25 日
改 zfs , 用 snapshot send/receive
byte404
2022 年 10 月 25 日
@ccc008 不可能这么做的,这是一个服务,你仔细看一下描述。
cheng6563
2022 年 10 月 25 日
你又没走网络 IO ,那直接 rsync 对拷就是了啊,有啥不完整的。

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

改改服务,写 chunk 。比如几百个合成 1M 之类的。
vhysug01
2022 年 10 月 25 日
ceph ?
microxiaoxiao
2022 年 10 月 25 日
glusterfs 复制卷可以吧,文件级别的双份写。
billlee
2022 年 10 月 25 日
这个根本就不是拷贝文件的问题,而是数据一致性的问题。你这数据一直在变化,拷贝需要时间,最后得到的数据肯定是不完整的。除非有 checkpoint 机制,这个 checkpoint 机制要么你的应用自己实现,要么依赖文件系统来提供。
byte404
2022 年 10 月 25 日
@billlee 和七楼老哥说的一样,我需要的就是这个;这个服务是可以停止后备份的,但每次停止都会耽误进度;所以寻求这样的一个解决方案,后续我会尽量把这种服务建立在 btrfs 上,方便迁移和复制。
JohnBull
2022 年 10 月 25 日
rsync

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/889579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX