星期二, 十二月 30, 2008

久违的感觉-解决文件同步问题

这两天上班几乎没有什么事情,就是混着。今天决定解决一个长久以来困扰我的关于文件同步的问题。

我用的文件同步软件是微软的SyncToy 2.0。公司的电脑预装了另外一个同步软件,简直就是垃圾,我们有同事曾经因为它丢失了所有需要备份的文件(原因仅仅是因为目标盘的存储空间不够了)。SyncToy毕竟是微软的东西,好用多了,多种同步模式可以选择,定制不同的Profile,而且支持命令行,这样就可以在计划任务中加入一个同步任务,每天定时同步。我设置了每天中午12点(正好是午饭时间)把我的ThinkPad中所有需要备份的文件文档图片等等全部同步到另外一台台式机上。

但是Outlook给我的文件同步带来了一个问题。Outlook上班一直开着,在同步.pst(Personal folder file)文件时总是会出错,因为文件被Outlook lock住了,不能够拷贝。所以每天中午的同步运行完以后.pst文件的同步都是失败,我只能想起的时候关掉Outlook然后手动运行同步。这样实在Annoying,而且有数据丢失的危险。

我发现这个问题后曾经查询过SyncToy的网站,我相信我不是第一个遇到这个问题的人。果然已经有人有了解决方案,我大概看了那个帖子,需要写一些批处理调用一些东西,有些复杂。于是我把帖子存了下来等有时间的时候再研究,今天是时候了。

仔细看了一遍帖子,发现需要使用一个新玩意儿,叫Volume Shadow Copy Service。大概意思是先在系统中创建一个shadow copy,然后再从shadow copy中把需要的文件拷贝出来。帖子中还给出了Volume Shadow Copy Service在MSDN中的链接,这就好办了。我先安装了一个相应的SDK,然后按照MSDN中的例子写批处理文件,也就几行。运行,失败。仔细查原因,发现MSDN中的有些内容竟然已经过时了,有些参数根本就不支持。上午在办公室折腾了一个多小时直到中午吃饭也没有解决问题。

晚上吃完饭后我继续研究。看来按照MSDN上的例子是行不通了,我于是重新研究最初的帖子上的代码,仔细比较后我发现MSDN上的代码竟然有一个地方写错了,活生生的多了一个字母“V”,奶奶的,把我郁闷的。但修正后还是有问题,好像shadow每次创建完以后还没等我拷贝就自动删除了。再研究帖子上的代码,发现它还callback了另外一个批处理文件。看来必须通过callback才能在shadow copy删除之前运行文件拷贝。这下有眉目了,我另外创建了一个单独的callback批处理文件用于拷贝.pst文件,再试,成功。

其实最后两个批处理文件加起来一共6行代码,折腾了这一天。久违的感觉。

没有评论: