最近在尝试在本地做一个远程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不久,工具什么的都还不熟。感觉应该有更好的方法来做这个事情。
希望大家能多给些指点。
做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
-
- 帖子: 6
- 注册时间: 2007-11-01 14:39
- 来自: 北京
- poweroff
- 帖子: 395
- 注册时间: 2008-12-13 15:03
- Jarson
- 帖子: 2371
- 注册时间: 2008-07-21 9:44
- 来自: 深圳
- 联系:
Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
markpoweroff 写了:不懂,帮顶,召唤牛人
- hellojinjie
- 帖子: 1150
- 注册时间: 2007-09-14 21:03
- 来自: 浙江
-
- 帖子: 6
- 注册时间: 2007-11-01 14:39
- 来自: 北京
Re: 做一个750gib ftp的镜像,下载速度700kbps。关于下载策略和时间戳的问题
我刚开始用,不知道有什么多线程而且支持ftp的下载工具可以用。axel我去看看,谢谢hellojinjie 写了:单线程不行就多线程了。。axel
同时感谢前面几位回帖的
感受局限,感受真实