一台安装了 centos7 的电脑,有目录 A 和目录 B,目录 A 中有二三四级目录及文件若干,现需要每天将目录 A 中的所有文件增量同步到目录 B 中,使用 cp -nr 命令无法实现,请问如何解决?
1
momocraft 2020-03-01 17:08:38 +08:00
rsync ?
|
2
misaka19000 2020-03-01 17:08:58 +08:00
rsync
|
3
xupefei 2020-03-01 17:10:27 +08:00
cp -u
|
4
Enya 2020-03-01 17:10:28 +08:00 via iPhone
rsync
楼下请保持阵型 |
5
nita22 2020-03-01 17:11:10 +08:00
rsync
|
6
leoleoasd 2020-03-01 17:14:58 +08:00
rsync
|
7
westoy 2020-03-01 17:16:54 +08:00
DRBD
|
8
yao990 OP |
10
xupefei 2020-03-01 17:30:04 +08:00 1
@yao990 rsync 是为了网络传输设计的,本地-本地是顺带的。cp -u 和 rsync 没有实质区别。都不能保证 data consistency。
硬要说的话,cp 的 CPU 占用低一点儿…… |
12
yao990 OP @xupefei 我试了 cp -u ,但是发现,子目录里的文件依然没有被同步,我总觉得,cp 只看了下两个二级目录一样,然后对二级目录下面的三四级目录和文件就忽略过去了
|
13
xupefei 2020-03-01 18:03:53 +08:00
|
17
yao990 OP @westoy 我刚才尝试执行 rsync -a /A /B ,我发现 rsync 在挨个对比每个在 B 目录中已存在的文件,对于 A 目录中存在 B 目录中不存在的文件视而不见,即使已经将这个目录对比完成了,也没有去将 B 目录不存在的文件从 A 目录复制到 B 目录。
另,是不是每次复制都要进行一次对比过程?因为 A 和 B 目录都很大,大小在 200+GB,如果每次都对比会不会太费资源了? |
18
cev2 2020-03-01 18:50:55 +08:00
@yao990 #14 #16 你 -rn 干嘛?你试试 cp -au doc/ doc-bak/ 进行单向增量备份,双向同步可以正反执行 2 次实现,我在 Ubuntu 18.04 测试时没问题的。#测试请前备份数据#
|
19
encro 2020-03-01 18:53:07 +08:00
你这需求,象要一个 git
|
20
encro 2020-03-01 18:56:31 +08:00
如果每次都对比会不会太费资源了?
省资源的话,需要做一个服务端,监控目录事件,收到事件后触发同步。 |
21
yao990 OP @cexid 刚试过了,没用,几秒钟就结束了,然而该复制的文件一个都没有复制,你的目录结构可能比较简单,我这边可能是因为二级、三级、四级目录太多的原因吧,,,,
严重怀疑 cp 只是对比了一下二级目录的名字,发现一样,就认为两个目录是一样的。。 |
22
encro 2020-03-01 19:00:49 +08:00
如果每次都对比会不会太费资源了?
你需要的是一个不耗资源的实时同步。 Linux 下 rsync+inotify 实现实时文件自动同步 https://www.linuxidc.com/Linux/2017-12/149355.htm lsyncd —— 多机器实时同步文件神器 https://shockerli.net/post/linux-tool-lsyncd/ |
23
link0502 2020-03-01 19:01:34 +08:00
只从用了 NextCloud,干啥都用它。
两个机器都安装上客户端,同步吧,还带版本控制。 |
25
encro 2020-03-01 19:04:37 +08:00
还有一个 Syncthing。
https://github.com/syncthing/syncthing |
28
cev2 2020-03-01 19:31:30 +08:00
@yao990 这太奇怪了呀,你不妨贴上终端的信息来看看,还有你输入的命令确定没有问题?比如命令中的路径使用 / 结尾或 /* 。
|
29
yao990 OP @cexid 当我新建目录专门用来测试时,这个命令能成功完成,但是当我拿到生产环境执行时,就不行了,甚至我加上-v 时,也没有任何提示,就好像没有执行一样
|
31
yao990 OP |
32
yixiang 2020-03-01 19:42:29 +08:00
ln -s 建立符号链接不行么?
|
34
zmxnv123 2020-03-01 19:48:05 +08:00
软链接不可以吗
|
36
yao990 OP @cexid /home 是 xfs,/toshiba 是 ntfs,安装了 ntfs-3g,能正常访问和读写,初次向 /toshiba 目录复制时一切正常,从第二次就不行了,但是手动一个一个的复制依然能复制进去,说明硬盘好着呢,就是增量复制就不行了
|
37
cev2 2020-03-01 20:19:22 +08:00
@yao990 看来可以结案了,还是暂时换掉 NTFS 吧,毕竟 ntfs-3g 兼容不全,cp 在处理 NTFS 文件时间戳时可能出了问题。要么在 NTFS 上 tar 打包试试,要么换 ext4 在 Windows 读取也有办法。rsync 貌似也可以忽略时间戳问题。
|
39
encro 2020-03-01 20:55:39 +08:00
新鲜出炉的 blog:[多平台实时同步方案比较]( https://c4ys.com/archives/2062)
|
40
429463267 2020-03-01 21:11:53 +08:00
rsync -avR this-linux:/path user@that-linux:/
完全增量 |
41
April5 2020-03-01 23:09:02 +08:00
用 rsync 吧,写个脚本以后要备份到远程说不定也可以用
|
42
jin7 2020-03-01 23:17:55 +08:00
linux rsync 非常好 windows 用 beyond compare
|
43
longyueshier 2020-03-01 23:25:41 +08:00
看了下你这个需求就是两个文件之间的增量数据同步问题,大家都把问题想复杂了。
其实很简单就可以完成你的要求 写一条 crontab 定时执行 cp 就好了,还是强制覆盖 B 目录文件 10 8 * * * cp -f 文件绝对路径 /A/* 文件绝对路径 /B/ |
44
july1995 2020-03-01 23:38:23 +08:00 via iPhone 1
没人推荐 syncthing 嘛,我自己用这个同步我自己电脑的文件到 nas,配置好以后不用管,有文件更改,自动同步。开源,免费,全平台。
|
45
flowercoder 2020-03-02 00:24:22 +08:00
linux 磁盘格式还是很重要的
一般我是 xfs 或是 ext4,其他的一般都不会选。 |
46
mmixxia 2020-03-02 00:42:56 +08:00
rsync
|
47
xiaobai555 2020-03-02 07:12:54 +08:00 via Android
可以考虑 inotify 配合 rsync
|
48
littlezzll 2020-03-02 08:20:05 +08:00 via Android
initifywait+rsync
|
49
fox0001 2020-03-02 08:58:05 +08:00 via Android
我的家用服务器就是 rsync 进行备份的
|
50
RRRoger 2020-03-02 09:49:05 +08:00
rsync
|
51
fitmewell 2020-03-02 09:54:04 +08:00 via Android
换个思路,用 git 或者 svn 本地仓库?
|
52
faywong8888 2020-03-02 11:28:24 +08:00
rsync +1,最好的易用的增量同步方案。
|
53
CasparLi 2020-03-02 11:52:32 +08:00
rsync 啊....
|
54
encro 2020-03-02 12:05:53 +08:00
@july1995
我前面推荐了啊,syncthing 全平台还差了一个 iOS,我的 blog 里面也有推荐 Seafile 和 nextcloud 倒是全平台的。 |
55
yao990 OP @encro 已拜读,我昨天用 rsync 解决了这个问题,问题本质是同一台机器里的两个不同目录之间的增量复制,但是由于两个目录分别位于两个硬盘上,源目录是 xfs 格式,目标目录是 ntfs,而 cp 在 ntfs 上有个时间戳问题,导致复制出错,而 rsync 不存在这个问题。
|
56
yao990 OP @April5 昨天用 rsync 解决了,备份到远程比这个容易,因为我一直以为 rsync 只能用于异地备份
|
57
yao990 OP @longyueshier cp 在不同文件系统中存在时间戳问题会导致复制出错,最后用 rsync 解决了
|
58
yao990 OP @july1995 你可能理解错了,我这个需求是同一个机器上两个不同目录之间的同步,现已经用 rsync 解决了
|
59
yao990 OP @flowercoder 本地磁盘都是 xfs,而那个 ntfs 是移动硬盘,要在不同的地方读取,为了方便,就用了 ntfs
|
61
catcalse 2020-03-03 13:24:12 +08:00
lftp
|
62
firhome 2020-03-10 20:45:45 +08:00
|
64
zooqkl01 2020-03-24 11:33:20 +08:00
ln -s A B
软连接不就解决了吗 |