如何实现两台机器之间某目录实时自动同步? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
582033
V2EX    问与答

如何实现两台机器之间某目录实时自动同步?

  •  
  •   582033 2014-08-11 09:42:21 +08:00 4785 次点击
    这是一个创建于 4082 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为rsync + crontab无法做到实时,请问有没有更好的工具或方案?
    23 条回复    2014-08-12 09:14:47 +08:00
    yiaya
        1
    yiaya  
       2014-08-11 09:45:02 +08:00 via Android   1
    看到标题本来想进来说金山快盘的,结果看到内容里“rsync+…”这种完全不知所云的高大上词汇,还是羞愧地忍住了。
    qingting
        2
    qingting  
       2014-08-11 09:46:00 +08:00 via Android
    试试btsync
    582033
        3
    582033  
    OP
       2014-08-11 09:48:47 +08:00
    @yiaya 金山快盘需要先同步到金山服务器,也没法做到实时吧;更何况金山没有linux server用的客户端.
    Dropbox也被墙了。
    582033
        4
    582033  
    OP
       2014-08-11 09:50:59 +08:00
    @qingting 需要非GUI的..不好意思没描述清除
    qq103436685
        5
    qq103436685  
       2014-08-11 09:56:37 +08:00
    写程序监控苛目录的变化,再自动同步。
    uio
        6
    uio  
       2014-08-11 10:08:13 +08:00
    multiple1902
        7
    multiple1902  
       2014-08-11 10:12:22 +08:00
    首先要分清单向同步和双向同步。rsync 只能做到单向同步。我在电脑上使用 unison 实现双向同步,但它需要保存额外元信息,也就是它要在别的地方记录同步状态和历史。

    在 Server Fault 上看到一个近乎实时的单向同步方法,简单说就是结合了 inotify(监控文件改动)和 rsync。请参考 http://serverfault.com/questions/148665/linux-is-it-possible-to-sync-two-directories-in-real-time 提到的 lsyncd。
    lijinma
        8
    lijinma  
       2014-08-11 10:25:06 +08:00
    单相同步,试试这个?很简单

    https://github.com/jedrichards/grunt-rsync
    rrfeng
        9
    rrfeng  
       2014-08-11 10:39:10 +08:00
    inotify + rsync 基本满足需求。
    merlin852
        10
    merlin852  
       2014-08-11 10:46:17 +08:00
    我看 “实时” 只有NFS,SMB之类的共享服务了,各种同步都有时差的
    ipconfiger
        11
    ipconfiger  
       2014-08-11 10:46:43 +08:00
    inotify + rsync 或者 +btsync

    用pyinotify可以很简单的搞一个脚本出来,用supervisor跑成服务即可
    liunan1321
        12
    liunan1321  
       2014-08-11 10:57:25 +08:00
    inotify + rsync+1
    xarrow
        13
    xarrow  
       2014-08-11 11:01:19 +08:00
    BitTorrent Sync 你值得拥有
    hexor
        14
    hexor  
       2014-08-11 11:13:38 +08:00 via iPad
    你这需求 也就是文件夹只保存在一台机器上就可以了吧 无论怎么样 都是修改的同一个位置
    lu18887
        15
    lu18887  
       2014-08-11 11:36:38 +08:00
    svn+hook ? git+hook 我首先想到这个
    phperstar
        16
    phperstar  
       2014-08-11 11:37:44 +08:00
    目测我一直使用的是sersync+rsync,是可以支持实时同步的呀
    althoughghgh
        17
    althoughghgh  
       2014-08-11 12:54:04 +08:00
    Dropbox 我用那个 OpenerDNS 好像就不用翻墙了
    Android 客户端也可以,
    582033
        18
    582033  
    OP
       2014-08-11 13:36:32 +08:00
    @merlin852 同步过程的时差可以忽略

    @rrfeng 嗯,现在比较多的貌似是inotify + rsync的方案,

    @lu18887 hook的方式不行,因为被同步的目录是在外网服务器,没法主动获取到文件是否更新了

    @phperstar 嗯,跟楼上的notify + rsync一样

    谢谢大家.
    donnior
        19
    donnior  
       2014-08-11 13:38:45 +08:00
    btsync,同步时延非常小,还支持内网
    582033
        20
    582033  
    OP
       2014-08-11 14:39:12 +08:00   1
    https://gist.github.com/anonymous/2bd1676ca95281a42d37

    自己用python的pyinotify库加rsync命令简单写了个脚本来同步,省去配置inotify的步骤
    582033
        21
    582033  
    OP
       2014-08-11 14:40:01 +08:00
    哇哦,原来v2支持自动从gist地址获取代码,好神奇的说~
    Owenjia
        22
    Owenjia  
       2014-08-12 05:49:49 +08:00 via Android
    是备份还是两台机器都要用这些文件?或许可以试下 sshfs ~
    582033
        23
    582033  
    OP
       2014-08-12 09:14:47 +08:00
    @Owenjia 是内网生成的静态页面需要发不到外网
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     921 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:50 PVG 04:50 LAX 13:50 JFK 16:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86