SyncY更新(Python 1.0.15)

​修改内容:

1、完善了对部分发行版系统luci的支持。
​2、新增分片下载模式,解决在某些特殊情况下下载下来的文件大小与云端大小不一致。

luci版升级的,如不想重新绑定及设置同步目录,请先备份/etc/config/syncy文件,安装完之后恢复此文件。
非luci版的,直接替换syncy.py文件,另外新增如下配置项:

    option slicedownload ‘on’  #是否开启分片下载文件,on-开启,off-关闭。

详细配置文件设置请浏览配置文件说明

说明:

slicedownload设置为on后,软件将按照blocksize设置的大小来分片下载文件,只有当相应的分片一次下载成功后才会合并大原始文件中,否则将重新下载整个文件,这有效了解决当经常发生curl(18)错误后,下载下来的文件大小与云端大小不一致,同时也实现了断点下载。开启后下载大文件的整体平均下载速度可能比关闭后有所降低,但可靠性要高些。

slicedownload设置为off时,超过blocksize设定值的文件下载也有断点下载,只是断点下载有curl来控制,这样在少数情况下下载下来的文件与云端大小不一致,syncy将删除下载的文件,如果文件特别大,将浪费很多时间,并有可能多次下载完后都发现文件不一致。

之前有网友提出,下载下来的文件能否检查md5来确定是否正确下载,通过对百度接口的再次检查,发现此功能是实现不了的,只要是分片上传的文件,百度返回的md5码不是文件的真实md5码,因此没法比对。同时该网友提出刚下载的文件不能秒传上传,这种情况是存在的,经过我的测试,分片上传的文件,在上传完成后再次上传是没有秒传,说文件不存在,而第二天则可以秒传,因此百度后台有些工作也不是实时进行的,可能有单独的服务器来延时完成相应工作,这就有个时间差。

SyncY更新(Python 1.0.15)》上有70条评论

    1. WishInLife 文章作者

      点击软件下载页面(http://syncyhome.duapp.com/index.php/download/),打开里面的网盘链接就可以下载了。

      回复
  1. WYQ

    你好,博主。
    你的程序有没有在小米路由器测试过,现在小米的用户群很大,而且小米支持的云盘只很差的金山。有没有想过针对小米出一个单独测试的发行版。

    回复
    1. WishInLife 文章作者

      我没有小米的路由来测试,毕竟是业余弄点东西,没法每个路由都买一个来测试,如果你的是小米路由,愿意尝试的话我可以提供支持。
      我也从网上了解过小米路由,据说是基于openwrt开发的,理论上应该是可以支持的。
      金山的网盘是不怎么好,之前还想把我这个软件来支持金山网盘,最后发现开发的接口中都没有提供断点下载或上传的功能,大文件就彻底没法用了,也没有秒传的功能,也就放弃了。

      回复
      1. WYQ

        小米插件开发环境的搭建:http://bbs.xiaomi.cn/thread-10389152-1-1.html
        小米开发者平台:http://dev.xiaomi.com/
        看一下吧。

        回复
        1. WishInLife 文章作者

          应该是可以,官方有句话“我们可以用Shell脚本、Lua、Python等语言来开发插件”,这里就提到Python,SyncY就是Python写的,理论上只要你能ssh登录,有Python就可以运行,哪怕是PC(windows因文件夹分隔符不同,没有做处理支持不了)。但是我没硬件没法测试,毕竟咱只是一个业余爱好,不是主业。

          回复
          1. WYQ

            老板,还是建议你看下我给你提供得小米开发者平台,上面有很完善的插件开发的资料。开发环境里很详细介绍了如何开发一个小米的插件。你的源代码已经有了,只要根据小米插件要求进行修改一定会是很好的插件,我很乐意第一时间做你的测试用户。

            小米插件开发环境的搭建:http://bbs.xiaomi.cn/thread-10389152-1-1.html
            小米开发者平台:http://dev.xiaomi.com/

          2. WishInLife 文章作者

            有实现学习研究下,要不你给我留个邮箱吧,回头需要测试的时候还需要你帮忙,你的邮箱不方便公开的话给我发个邮件也行,我的邮箱:wishinlife@gmail.com。

    2. XyKz

      小米路由器mini刷openwrt试过没问题,如果你是大路由的话,论坛有方法教你怎么安装op的软件包,博主这个是用python写的,应该不受架构限制。小米路由器mini是mips的,大路由是arm的,可能luci会装不上,这个我就不是很清楚了。

      回复
  2. dukevin

    你好,博主,
    我在openwrt上试用了Python 1.0.15, 发现下载大文件(20G)经常断掉, 报 18和28的错误, 应该是curl的报错, 不知道是百度云的问题还是脚本的问题, 这个问题要是能解决就太好了。

    回复
    1. WishInLife 文章作者

      为什么报这个错误不好说,可能有网络、百度服务器或libcurl库本身的原因,我测试时1个11G的文件一次下载成功没有报错,而另外一个9G多的文件却经常报错,就跟你一样,所以不好说是什么问题。
      但是不用担心,只要最终下载下来了,下载下来的文件应该是没有问题的,1.0.15就是解决之前版本下载大文件时经常遇到这个错误,然后造成下载下来的文件大小与云端不一样的问题的,现在是分片下载,只有每片一次下载成功才合并到原文件中的。

      回复
  3. kyoiiyb

    趁着这次更新. 发现版本更新检测貌似有问题.. log中并没出现更新提示.
    到是一个无所谓的问题. Log什么的难得看一次.

    回复
    1. WishInLife 文章作者

      只有在刷新AccessToken的时候才检查更新的,每20天左右刷新一次AccessToken。

      回复
  4. ybchen1

    博主:您好,我使用SyncY-Python-luci_1.0.15-1_all.ipk安装成功了,在luci也绑定成功,启动成功,提示syncy正在运行,其它选项为默认,本地目录是【/tmp/mnt/sda1/Baidu】,云端目录为【/SyncY】,同步类型选【2-单向下载】,可是没有同步成功,尝试更改本地目录为【/mnt/sda1/Baidu】还是没有成功,路由为【水星MW4530R 16M】 固件是【OpenWrt Mod 20140129 by 飞翔的天空】,libcurl 7.29.0-1;libopenssl 1.0.1e-1;kmod-nls-utf8 3.3.8-1;Python 2.7.3-2;python-curl 7.19.0-1;软件下载地址是【http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/】,错误日志没有任何信息,请问怎么设置才能同步成功呢?

    回复
    1. WishInLife 文章作者

      你云端目录为【/SyncY】的话,对应的网盘上是【/我的应用程序/SyncY/SyncY】这个目录,估计是你对云端目录设置理解的不对。

      回复
      1. ybchen1

        谢谢你的指导,成功下载了,另外我想问问,下载时CPU使用率达83%,内存使用为7%,这样正常吗?我感觉负载高了点。

        回复
        1. WishInLife 文章作者

          cpu使用有点高,你可以观察时间长一点看看,是一直那么高呢还是短时间的高?要是短时间的没什么关系,突发的处理有时可能会比较高,如计算文件md5码以确定是否可以秒传或接受服务器返回后来判断哪些文件需要上传或下载,但要是在上传文件或下载文件过程中cpu使用达到80%以上的话,确实就是比较高了,当然还跟你路由cpu的硬件能力有关,我是wndr3700的路由,上传或下载文件是cpu使用在30%左右。

          回复
  5. Kino

    我执行时候 出现错误提示

    /usr/bin/syncy.py

    Traceback (most recent call last):
    File “/usr/bin/syncy.py”, line 24, in
    import pycurl
    ImportError: librtmp.so.1: ELF load command alignment not page-aligned

    —————————————————-
    我是WD Cloud 升到4.0的版本
    请问是什么原因造成的呢?

    回复
    1. WishInLife 文章作者

      根据错误信息来看,感觉像是librtmp.so.1文件有问题,建议重新安装下python-curl等相关的包。

      回复
  6. XyKz

    博主,反应一个问题。下载下来的视频文件,MKV格式,大小9G,下载没问题。但是文件是有问题的,无法拖动进度条,不知道是否与分片下载有关。

    回复
    1. XyKz

      已确认,不开分片下载就没事了。另外还有个问题就是syncy创建的文件夹和文件都是755权限,导致我非root的用户进smb无法删除,有没有办法让程序创建777权限的?上级文件夹全是777

      回复
      1. WishInLife 文章作者

        1、刚刚我试了下能不能拖动进度条,我这有4个文件都是10G左右,也都是分片下载下来的,拖动都没有问题,还是用PC机通过共享文件夹访问路由来拖动的,不知道你那怎么不行,可以多用几个文件试试;
        2、这个有办法,你打开/usr/bin/syncy.py文件,搜索os.lchown,添加新行,输入内容【os.chmod(fullpath,pmeta.st_mod)】,fullpath和pemta是变量,必须跟os.lchown中的变量名一样,也就4、5处吧。这个问题还有个办法解决,修改本地同步目录根目录及下面所有文件的所有者为有权限的用户,那样下载下来的文件那个用户就有删除权限了(下载下来的文件所有者设置成跟父文件夹一样的)。

        回复
        1. XyKz

          问题2已解决采用第二种方式解决,问题一有待测试。

          另外反馈一个无伤大雅的LUCI配置问题,无论是启动关闭syncy还是修改配置,都会写一个“ option helptext ‘同步目录设置:’”这个玩意进去,相信作者自己应该也发现了。

          回复
          1. WishInLife 文章作者

            权限解决了就好,不能拖动的问题你再观察下吧,我这分片下载确实没那个问题。
            还有luci保存配置后增加option helptext配置项的问题我这也没有,这个可能是因为luci版本不同的问题,我的版本是:OpenWrt Attitude Adjustment 12.09 / LuCI 0.11.1 Release (0.11.1) ,前两天有个网友同步有问题,发给我一个配置文件看,也看到了这个配置项,但是还很奇怪呢,不过这个对程序的运行没有一点影响。

  7. WeDone

    WishInLife 大,你好!首先谢谢你这个强大的软件!!!
    现在我有个情况如下:
    在未安装及运行 SyncY 之前,我的网盘中有几个和本地相同的文件,我的设定是“单向上传”,现在有什么方法使相同的文件不再次上传。
    原来重名的选项好像只有覆盖或改名
    可以加个校验功能(选项):如果重名先对比一下MD5或大小,相同的话不再上传/下载?

    回复
    1. WishInLife 文章作者

      如果有几个文件名相同,且内容也相同的话,我建议是设成覆盖,只要文件大小超过256K就会采用秒传,几乎不会浪费多少时间,要是通过MD5来检查文件是否一样的话时间一点都不会少,这还存在一个问题,就是如果云端已存在的文件曾经不是一次上传成功,是分片上传的,获取到的md5码不是真实的md5码,没法比对文件是否一致的。
      所以对于你这种情况设置成重名文件覆盖就可以,传完后你可以看看日志是不是秒传上去的。

      回复
      1. WeDone

        再追问一下,如果是类似的情况,但是是下载到本地呢?这是选择覆盖或重命名的话,会不会又下载一次

        回复
        1. WishInLife 文章作者

          下载到本地没有像秒传那样的功能,就会全部重新下载一次。如果本地的文件在云端全有的话,可以先设成上传,带同步信息建立完成之后再改成下载模式。

          回复
          1. WeDone

            非常的谢谢老大的回复!
            老大有空的时候,可否讲解一下目录里 syncy.info.db (没在家,文件名不知道有没有错)是怎么对比本地及远程的文件而生成的,还有 syncy.info.db 的数据结构,相信还有很多人不知道其中原理。现在目录名都不敢改动
            再次的谢谢老大!!

          2. WishInLife 文章作者

            这个文件内容其实挺简单了,每个同步的文件会在这个文件中存储40字节的数据,分别是云端返回的文件md5码、文件的修改时间(本地)、文件大小(除以4G的余数)、本地文件相对路径名的md5码(相对于本地同步根目录),判断文件是否一致就是通过这40字节的内容来判断的,所以你说的想改目录名的话确实存在问题,如果目录名修改了,它下面的所有文件将判定为新增的文件,会全部同步一次,我想任何一款同步软件都会这么来判定的。
            要是想改目录名,又不想再花很多时间来同步的话,有一个简单的办法能相对比较快一点让软件自动重建同步信息数据,就是在改目录名称之前先同步完所有数据,然后停止SyncY,修改目录名称,修改同步类型为上传,最后启动SyncY,这样能在最短时间内建立完同步信息。这个时间快主要是利用了秒传功能,绝大部分时间都是花在计算文件的md5码上。如果你有很多小文件,且都是小于256K的,就没什么好办法了,都需要重新下载或上传了。

          3. WeDone

            另外提个建议:重名的时候可否加个如果文件大小一样则跳过此文件

          4. WishInLife 文章作者

            这个建议不怎么敢采纳,有时文件修改了,大小却是一样的,这样容易造成文件不一致,因为发现文件重名了还会同步的话,要不就是没同步信息,要不就是文件修改了(本地的修改时间或云端的md5码发生变化)。

  8. 好奇心驱使

    BT下载都是通过种子文件分段校验 SHA1,百度是否也提供分段的MD5码

    回复
    1. WishInLife 文章作者

      在API中没见有此相关API,且获取到的MD5码是分很多块的时候,没有表示每个块是多大的,他要是标示了每个块是多大的也就好办了。

      回复
    1. WishInLife 文章作者

      是西数的My Cloud的?能简单写个教程吗,这样也给后来者一些参考,如果你愿意提供的话发我邮箱(wishinlife@gmail.com),我会发布出来供网友们参考的,同时也对你的付出表示感谢。

      回复
  9. 张少

    赞助了10块,希望项目能一直进行下去或者有更好的产品出来。帮着在V2EX上发了个介绍帖子

    回复
    1. WishInLife 文章作者

      刚测试了下,能打开,也可以看到文件呀。

      回复
  10. xiaoyutou

    python 1.013 1.0.14 1.0.15三个版本syncy upload 模式下都出现下面的错误:

    2014-11-05 14:56:50 WARNING: Request failed,wait 3s to retry(1). Curl(55): select/poll returned error.
    2014-11-05 14:57:20 WARNING: Request failed,wait 3s to retry(2). Curl(55): select/poll returned error.
    2014-11-05 14:57:45 WARNING: Request failed,wait 3s to retry(3). Curl(55): select/poll returned error.

    回复
      1. WishInLife 文章作者

        python更新到2.7看看,我写这个软件的时候在centos上测试过,可以上传或下载的。

        回复
    1. WishInLife 文章作者

      我百度了下select/poll returned error,select/poll是linux系统读取文件相关的函数,你的硬盘别的软件能读取文件吗???
      另外你Python的版本是多少?系统版本是多少??

      回复
      1. xiaoyutou

        我是在VPS上测试的,文件肯定可以读取。
        python版本2.6.6 CentOS i686 6.5 pycurl 7.19.0

        回复
        1. WishInLife 文章作者

          Python升级到2.7试试看看,以前也有一网友版本低于2.7有问题,但报的错跟你的优点差别。libcurl 也可以升级到7.30或以上。

          回复
  11. WYQ

    呵呵,老板这里好火呀。来这问个问题吧,openwrt有没有挂载samba或者nfs再或者windows共享的插件呀。还是只能在命令行下挂载。
    我在命令行下搜索samba发现只有server没有client,求指教。

    额,我环境是有一个server,可以做samba,nfs,windows共享服务器,需要在openwrt上挂载服务器上共享出来的目录。

    为了玩这个专门搞了一个树莓派,顺边提点意见吧。这个界面应该可以做的再简洁一点吧,现在看着有点乱。

    回复
    1. WishInLife 文章作者

      1、还真没了解过openwrt怎么挂载samba或windows共享的插件的,nfs倒是曾见到有办法挂载的,好像是命令行的,但是可以写一个挂载或卸载的脚本,然后放到启动列表里来实现界面上手动挂载或卸载,就跟自动挂载移动硬盘一样。
      2、界面乱吗,我感觉还可以,界面这样也是受luci的限制,要是能完全的自定义就好些了。luci可能也有办法来实现完全自定义,但咱是业余的,没那么深的功力呀。

      回复
        1. WishInLife 文章作者

          这两天研究了下小米路由插件的安装,官方的文档和资料都很不完全,想要做成通过手机上传安装的暂时不大可能。论坛里的那个介绍配置开发环境的帖子,照着做也配置不成,编译不了,官方文档里就没有介绍配置开发环境,也没有提供下载的连接。
          暂时可行的方法是开启小米路由的ssh,然后通过ssh登录安装arm版的Python及相关库,arm版的python及库的编译方法网上倒是有不少,要编译一个出来应该问题不大。

          回复
      1. WYQ

        这个只是针对openwrt平台的吧,能安装在其他linux发行版么,比如debian,linux等等。

        回复
        1. WishInLife 文章作者

          在pc版的linux运行完全没有问题,在centos上运行过,没有问题,理论上只要有python和libcurl的linux系统都可以运行,windows是因为文件分隔符的差异没有做处理才运行不了。

          回复
          1. WYQ

            这个这个,不好意思,debian怎么装ipk呢?嘿嘿,百度没有找到。

          2. WishInLife 文章作者

            debain的话装不了ipk,下载rar的压缩文件,解压后拷到指定路径,或把文件中相关联的路径改了也可以,再授予py文件可执行权限就可以启动程序了。

  12. 支持开源计划

    感谢作者
    我试了下python版本,感觉真心不错,而且蛮稳定,而且负载不大。不过估计flash没有16M怕是装不下。。

    回复
    1. WishInLife 文章作者

      flash小的确实安装有些困难,我是用u盘扩展启动的,安装就不存在问题了。

      回复
  13. WYQ

    2014-11-18 04:56:00 Start sync path: “/baidu/a:/a:sync”.
    2014-11-18 04:56:02 WARNING: Request failed, wait 3 seconds and try again(1). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:842896124}.
    2014-11-18 04:56:07 WARNING: Request failed, wait 3 seconds and try again(2). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:1259722948}.
    2014-11-18 04:56:11 WARNING: Request failed, wait 3 seconds and try again(3). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:1983928830}.
    2014-11-18 04:56:18 WARNING: Request failed, wait 3 seconds and try again(1). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:1225807459}.
    2014-11-18 04:56:22 WARNING: Request failed, wait 3 seconds and try again(2). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:1815069834}.
    2014-11-18 04:56:27 WARNING: Request failed, wait 3 seconds and try again(3). Http(404): {“error_code”:31066,”error_msg”:”file does not exist”,”request_id”:2100230293}.
    2014-11-18 04:56:32 Sync path: “/baidu/a:/a:sync” complete, Success sync 0 files.
    2014-11-18 04:56:33 PCS quota is 5G,used 0G.

    求教,这些提示是什么意思。

    回复
    1. WYQ

      使用的是sync模式。发现两端新建的文件都可以同步到对端,但是就是会报错。

      回复
    2. WYQ

      还是上面的那个报错,刚才又试了一下直接touch 个文件所有模式都可以同步,但是sync模式会报上面的错误。同步大文件,几十兆以上的文件直接就报错。

      回复
  14. WYQ

    不知道是不是bug,以上的错误是在upload,download,sync压缩RAR文件的时候出现的。之前测试都是用的压缩文件,用了几个G的视频文件测试很ok,请看一下是不是代码的问题。

    回复
    1. WishInLife 文章作者

      可能是一个bug,今天发布了更新,跟你这个反馈的有点像,解决秒传文件时的404错误无法上传文件的bug,你先更新下看看,如还不行把error日志也贴出来,那样才好判断问题。

      回复
    1. WishInLife 文章作者

      你直接命令行执行/usr/bin/syncy.py,程序是不会退出的,SyncY设计的就是一直驻留内存,定时自动同步的,不是运行了一遍之后自动退出,你可以自行命令 /usr/bin/syncy.py & 把程序转到后台运行,这样就可以了。

      回复

好奇心驱使进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注