V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
crisrock
V2EX  ›  问与答

求助:如何更好地在两个物理隔离的网络间同步目录?

  •  
  •   crisrock · 2015-03-10 15:52:56 +08:00 · 3152 次点击
    这是一个创建于 3552 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两台windows平台的PC分属物理隔离的两个网络,现在有一个目录,目录里面有近万个大小不等的文件和几百个子目录,这些文件每天都会在这些子目录间移动,子目录的名称也可能会变化。两个网络间可以通过U盘或者光盘传递数据,但是每次把这个目录全部复制到U盘一遍觉得很慢,有没有什么更好的方法?比如把这些文件的操作记录下来,我只要拷一个文件到另一台机子上执行一下就行。
    24 条回复    2015-03-10 20:36:12 +08:00
    squid157
        1
    squid157  
       2015-03-10 16:01:58 +08:00 via iPhone
    Rsync?
    ksupertu
        2
    ksupertu  
       2015-03-10 16:07:02 +08:00
    伟大的windows公文包
    stupidcat
        3
    stupidcat  
       2015-03-10 16:12:01 +08:00
    SVN,在U盘上建立repo
    crisrock
        4
    crisrock  
    OP
       2015-03-10 16:17:39 +08:00
    @ksupertu 公文包不能把文件拷到第二台电脑,相当于第二台电脑上没有这些文件,和我的需求不同,以下是来自网络的复制内容:
    ====================================================
    使用公文包与可移动媒体进行同步的步骤

    将公文包复制到任何类型的可移动媒体。

    将介质从第一台计算机中取出,然后将其插入第二台计算机。

    对可移动媒体上公文包中的文件进行所需的所有更改。 请勿将公文包从可移动媒体复制到第二台计算机。

    若要与第一台计算机同步更改,请将介质从第二台计算机中取出,然后将其插入第一台计算机。

    在第一台计算机中,打开可移动媒体文件夹,右键单击“公文包”,然后单击“全部更新”以同步已经进行的所有更改。

    注意

    将公文包与可移动媒体一起使用时,决不会与第二台计算机同步公文包中的文件。 只能使用第二台计算机处理这些文件,然后与第一台计算机同步这些更改。

    公文包不能与同步中心一起工作。

    http://windows.microsoft.com/zh-cn/windows/sync-using-briefcase#1TC=windows-7
    crisrock
        5
    crisrock  
    OP
       2015-03-10 16:18:00 +08:00
    @squid157 还要搭个服务器?
    crisrock
        6
    crisrock  
    OP
       2015-03-10 16:23:27 +08:00
    @stupidcat 谢谢,请教一下u盘的repo里面会不会有这些文件的完整镜像?如果有的话,这不是我所希望的
    squid157
        7
    squid157  
       2015-03-10 16:24:51 +08:00 via iPhone
    @crisrock A rsync 到U盘,U盘rsync到B。都是本地。
    squid157
        8
    squid157  
       2015-03-10 16:25:40 +08:00 via iPhone
    @squid157 不过那么多移动操作,估计rsync也并不特别好。
    crisrock
        9
    crisrock  
    OP
       2015-03-10 16:28:23 +08:00
    @squid157 u盘的rsync里面会不会有这些文件的完整镜像?
    stupidcat
        10
    stupidcat  
       2015-03-10 16:35:40 +08:00
    @crisrock
    “完整镜像”肯定是没有,SVN repository本身是一个数据库,但是。。。。只要有这个U盘 就可以SVN checkout嘛,从而得到你的所有文件,以及所有的历史修改记录。不过你或许可以设置一个密码,来避免未经授权的checkout
    我觉得,**如果**“在不知道密码的情况下,即使得到了SVN repository(即U盘),也无法解密(即checkout)其中的内容”,那么这个方案才可行。这个“如果”究竟成不成立我就不清楚了……
    stupidcat
        11
    stupidcat  
       2015-03-10 16:38:41 +08:00
    自己电脑上试了下,密码是在conf/passwd这个文件里明文保存的
    crisrock
        12
    crisrock  
    OP
       2015-03-10 16:46:48 +08:00
    @stupidcat 学习了
    我选了部分子目录和文件先试了一下 发现U盘上这个repo占用的空间也不小(近似于那些目录和文件的总体积)如果有更小巧的解决方案就更好了。
    squid157
        13
    squid157  
       2015-03-10 16:47:08 +08:00 via iPhone
    @crisrock 同步出来就是完整的镜像
    crisrock
        14
    crisrock  
    OP
       2015-03-10 16:48:28 +08:00
    @stupidcat 嗯 我也看到了 这样似乎不太好,但是自己用凑合了
    crisrock
        15
    crisrock  
    OP
       2015-03-10 16:49:26 +08:00
    @squid157 不同步 被人捡到U盘能看到完整的文件吗?我看了一下大家说的,似乎svn好一点
    well
        16
    well  
       2015-03-10 16:50:26 +08:00
    拔硬盘。
    shiny
        17
    shiny  
       2015-03-10 16:54:03 +08:00
    u 盘的文件系统可以加密的, svn 到 u 盘是个不错的主意,当年做开发也这么干过。
    imn1
        18
    imn1  
       2015-03-10 17:14:49 +08:00
    如果只是移动或者改名,其实很好办,内容有改动就麻烦了
    玩集图的人手上会有一些“古老”软件专做这事,hunter / piccheck / csvworkshop之类,但估计现在你去网上也找不到这些咚咚了

    其原理就是从一个源生成一个csv,包含:文件名、路径、字节数、CRC32四个字段的值
    然后用这个csv和上述软件,到新目录(已包含一定数量的同类文件),用上述软件 hash CRC32 一次就能按 csv 里面目录和文件名归位,当然会同时生成一个 missing csv,就是源里面有,但新目录没有的文件,这样集图的人去补齐 missing 就收集完整了

    如果觉得 hash 很慢,其实大可不必担心,以我的经验,i3 的 CPU,hash 不会比 copy 到移动盘慢多少,因为只有字节数相同才会 hash,字节数不同就直接视为不同文件无法归位了。另外就是 hash 过一次,存入另一个 csv 或 db,如果没改动,下次就不必 hash,只比较前后 csv 的文件名和路径就能重新归位

    当然,这些软件其实不仅限于图片的,因为所有类型文件都可以 hash,只是它们最初就是集图玩家做出来的

    你可以按上面这个原理自己写一个 CLI,easy job~
    crisrock
        19
    crisrock  
    OP
       2015-03-10 17:24:50 +08:00
    @imn1 谢谢,是我没说清楚,文件的内容有时会变动
    squid157
        20
    squid157  
       2015-03-10 19:44:16 +08:00
    @crisrock rsync会包含完整的文件。不过svn的话,对方恢复出来文件也是毫无压力的。rsync基本就是智能一点的复制粘贴。
    crisrock
        21
    crisrock  
    OP
       2015-03-10 19:51:23 +08:00
    @squid157 哦 这样啊。文件多的话,占用的U盘空间比较大。要是有更小巧轻便的解决方案就好了。
    linhua
        22
    linhua  
       2015-03-10 20:13:25 +08:00
    @crisrock

    @imn1 的方法很好,为原目录和目标目录中的文件生成md5校验,然后比较,以判断内容是否有改变。如果有改变,就把原目录中的相应的文件(保留目录结构)复制进U盘。然后恢复到目标目录中。
    Sharuru
        23
    Sharuru  
       2015-03-10 20:31:55 +08:00
    收费方案:
    买一套 GoodSync,可以很方便的创建规则使 A 机文件变动实时同步至 U 盘,插入 B 机文件自动同步更新。
    还可开启回收备份、多版本备份功能。
    允许写入额外的数据文件还能加速读取。

    随便贴两张图:



    zhjits
        24
    zhjits  
       2015-03-10 20:36:12 +08:00
    先 diff 然后 patch?这样传输的数据量会少很多。但是还是要在本机保留两份文件以供备份。

    http://jungels.net/articles/diff-patch-ten-minutes.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2822 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:10 · PVG 22:10 · LAX 06:10 · JFK 09:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.