当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
帖子发表于 : 2009-01-03 16:20 

注册: 2007-11-01 14:39
帖子: 6
地址: 北京
送出感谢: 0 次
接收感谢: 0 次
最近在尝试在本地做一个远程ftp服务器的镜像。上面给了一周时间,要求是能在36小时之内把镜像下载一遍,而且之后的维护和更新比较简单。

远程服务器有20个子目录,大小不同,最大163gib,最小188kib。每一两周,这些目录对应的数据都会被重新产生,就需要整个的重新下载。

手头的资源
(1)4个远程ftp服务器供选择。单线程ftp下载速度从200kb到1mb不等,下载速度那个好不能一次确定。
(2)3个本地机器,晚上8点到早上8点之间可用于下载。其中一台有2 x 500gib的sata盘来存储镜像,另外两个也可以通过nfs对这些盘进行写入。机器上的系统都是Ubuntu 8.04 Server Edition。
(3)本地100mb的网络。

约束和问题
(1)每个文件的时间戳要与服务器上的完全一致
开始用"wget -m (-r -I inf -N)",发现文件的时间戳与服务器端一致,文件夹的时间戳却是在本地创建的时间。
尝试了rsync,文件夹的时间戳也留下来了。但是远程服务器管理员不是很喜欢别人用rsync连,理由是rsync跟基于ftp协议下载的程序相比,会占用更多的服务器资源,而且也不快。
(2)必须在36小时内可以完成一次完整下载
a 使用单线程wget下载,每天12个小时可以下载28.1gib,3台机器下完全部需要9天。
b 使用多个wget -m,如果每一个一级目录都使用一个wget -m下载,那么整体的下载时间将大于等于最大那个一级目录的下载时间,最大的一级目录163gib,单线程下载需要6天。
尝试过同时以一个本地目录为目的目录wget -m同一个远程目录,从wget输出看,两个进程各下各的,没有协作。试着玩儿而已,wget也没说支持这个。
(3)怎么从几个服务器中选择一个下载速度最快的一个?

现在想使用的方法(还没做完)
(1)关于时间戳和下载速度的考虑
想用bash做,步骤如下
a 让三个下载用的机器下载用的目录都相同,假设说是/srv/ftpserv。一台机器拥有这份数据,另两台只是通过nfs写。
让它们用于下载守护的目录也相同,这样方便存储各类状态信息,这个目录的数据也是在存放数据的机器上,两外两台通过nfs写。
守护目录下一定要有一个服务器端的来的ls-lR文件作为下载依据

b 通过脚本实现如下内容
改变工作目录到下载目录,同时开始按行读入守护目录下的ls-lR

读入第一行

如果读入行是某目录详细的最开始一行
./databank:
total 166271392
......dira
......fileb
,把“.”替代为下载目录路径,删除最后的“:”,然后更改工作目录到这个所得路径。
在当前工作目录下创建.maintain文件,以保存所有在ls-lR中有匹配的目录和文件的名字。
跳过total那行,然后读入下一行

如果当前行是目录行
drwxr-xr-x 113 mirror archive 3842 Dec 7 21:48 databank
,检查在当前目录下有没有同名的子目录。如果有,什么都不做,如果没有,创建一个此名字的目录。
保存从行中得到的时间戳信息到目录下文件,假设名字是.dir-timestamp。
把目录名字加入到当前目录的.maintain文件
读入下一行

如果读入行是普通文件行
-r--r--r-- 1 mirror archive 1093786235 Dec 5 03:46 env_nt.01.tar.gz
,检查在当前目录下有没有名字、时间戳和大小都相同的文件,如果有,什么都不做。如果没有,删除同名的本地文件,使用“wget -N”下载文件。
把文件名字加入到当前目录的.maintain文件
读入下一行

如果读入行是符号链接行,如果链接不存在则创建一个。不做其他处理。
把符号链接名字加入到当前目录的.maintain文件
读入下一行

在改变工作目录之前,做些收尾工作:
扫描当前目录中的所有目录、普通文件和符号链接,如果名字在.maintain中没有,删除它。
删除.maintain文件
根据.dir-timestamp文件内容设定目录时间戳

关于时间戳:下载文件使用“wget -N”,文件夹的时间戳则在对文件夹修改完成,离开时设定。
关于多线程下载:上面的方法,理论上可以为一个目录的每一个文件开一个wget下载,但是考虑到网速,还有不想被封ip,就考虑在一台机器上限制10个wget,速度应该可以到3mbps左右。如果顺利,25个小时可以下完一遍。

(2)关于找到一台较快服务器的考虑。
服务器在一级目录肯定有ls-lR.Z和ls-lR.old.Z两个文件。考虑在下载前先下载这两个文件,根据 10mib/下载时间 做个速度估计。

刚开始用Ubuntu不久,工具什么的都还不熟。感觉应该有更好的方法来做这个事情。

希望大家能多给些指点。


_________________
感受局限,感受真实


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
帖子发表于 : 2009-01-03 18:33 
头像

注册: 2008-12-13 15:03
帖子: 395
送出感谢: 0 次
接收感谢: 1
不懂,帮顶,召唤牛人


_________________
一条狗的马甲!
对不起,我承认我是一只穿着马甲的狗!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
帖子发表于 : 2009-01-03 18:57 
头像

注册: 2008-07-21 9:44
帖子: 2371
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
poweroff 写道:
不懂,帮顶,召唤牛人

mark


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
帖子发表于 : 2009-01-04 20:26 
头像

注册: 2007-09-14 21:03
帖子: 1143
地址: 浙江
送出感谢: 1
接收感谢: 1
单线程不行就多线程了。。axel


_________________
Say hello to everyday!


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
帖子发表于 : 2009-01-04 23:57 

注册: 2007-11-01 14:39
帖子: 6
地址: 北京
送出感谢: 0 次
接收感谢: 0 次
hellojinjie 写道:
单线程不行就多线程了。。axel


我刚开始用,不知道有什么多线程而且支持ftp的下载工具可以用。axel我去看看,谢谢

同时感谢前面几位回帖的


_________________
感受局限,感受真实


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译