用什么主要取决于你这套系统用来做什么,你说的比较简单,单纯的客户端服务器之间的文件互传,用socket写就可以了,为了应对大文件的问题可以参考下稀疏文件(NTFS的,用其他文件系统可以略过)、断点续传,基本就可以了。如果socket比较麻烦你可以去找一些开源的数据传输的库,帮你封装好的,你只要写好应用就皮败仔行了。枯宽
实现基本功能后如果想添加高级功能,可以参考下数据校验燃汪、数据包修复等等,www.sf.net上有很多现成的文件传输工具项目,把源码下回来参考实际实现比单单看资料好
xcopy是用来复制文件和目录树,下面是这个复制指令的详细解释和参数,你可以参考以后用来编写你的批处理文件。XCOPY 源 [目标] [/A | /M] [/D[:d ate]] [/P] [/S [/E]] [/V] [/W]
[/C][/I][/Q][/F][/L][/G][/H][/R][/T][/U]
[/K][/N][/O][/X][/Y][/-Y][/Z][/B][/J]
[/排除:file1[+file2][+file3]...][/压缩]
源 指定要复制的文件。
目标 指定新文件的位置和/或名称。
/A 仅复制具有存档属性集的文件,
不更改属性。
/M 仅复制具有存档属性集的文件,
关闭存档属性。
/D:m-d-y 复制在指定日期或之后更改的文件。
如果未给定日期,则仅复制那些
源时间比目标时间新的文件。
/排除:file1[+file2][+file3]...
指定包含字符串的文件列表。 每个字符串
应位于文件的单独行中。 当任意
字符串与要复制的文件的绝对路径的任意部分
匹配时,将从复制中排除该文件。 例
如,指定 \obj\ 或 .obj 等字符串将排除
目录 obj 下的所有文件或所有具有
.obj 扩展名的文件。
/P 创建每个目标文件之前会提示你。
/S 复制除空目录和空子目录之外的目录和子目录。
/E 复制毁冲目录和子目录,包括空目录郑余数和空子目录。
与 /S /E 相同。可用于修改 /T。
/V 验证每个新文件的大小。
/W 提示你在复制前按键。
/C 即使出现错误也继续复制。
/I 如果目标不存在,且正在复制多个文件,
则假定目标必须为目录。
/-I 如果目标不存在,且正在复制单个指定文件,
则假定目标必须为文件。
/Q 复制时不显示文件名。
/F 复制时显示完整的源文件名和目标文件名。
/L 显示要复制的文件。
/G 允许将加密文件复制到
不支持加密的目标。
/H 同时复制隐藏文件和系统文件。
/R 覆盖只读文件。
/T 创建目录结构,但不复制文件。不
包括空目录或空子目录。/T /E 包括
空目录和空子目录。
/U 仅复制已存在于目标中的文件。
/K 复制属性。普通 Xcopy 将重置只读属性。
/N 使用生成的短名称进行复制。
/O 复制文件所有权和 ACL 信息。
/X 复制文件审核设置(表示 /O)。
/Y 取消提示以确认要覆盖
现有目标文件。
/-Y 导致提示以确认要覆盖
现有目标文件。
/Z 在可重启模式下复制网络文件。
/B 复制符号链接本身与链接目标。
/J 使用未缓冲的 I/O 进行复制。建议用于非常大的文件。
/压缩 文件传输期间请求网络压缩(如果
适用)。
/稀疏 在复制稀疏文件喊首时保留稀疏状态。
可以在 COPYCMD 环境变量中预设开关 /Y。
这可能在命令行上被替代为 /-Y。
一、rsync简介用于替代rcp的一个工具,rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时rsync
server会开一渗尺猛个873端口,等待客户端去连接,连接时,rsync
server会检查口令是否相符,若通过口令查核,则可以通过进行文件传输,第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份;
二、rsync常用参数
-v,--verbose 详细模式输出;
-a,--archive 归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数-rlptgoD
-r, --recursive 对子目录以递归模式处理
-l, --links 保留软链结
-p, --perms 保持文件权限
-t, --times 保持文件时间信息
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息
-D, --devices 保持设备文件信息
-H, --hard-links 保留硬链结
-S, --sparse 对稀疏文件进行特殊处理以节省DST的 空间
--delete 删除那些DST中SRC没有的文件
-z, --compress 对备份的文件在传输时进行压缩处理;
三、rsync的六种不同的工作模式;
1)拷贝本地文件;
当SRC和DES路径信息中不包含冒号":"分隔符时,就启用这种工作模式:
[root@cmmailapp1 /]# rsync -avSH /home/coremail/ /cmbak/
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器,当DST路径地址包括冒号":"分隔符时启动该模式;
[root@cmmailapp1 /]# rsync -avSH /home/coremail/ 192.168.11.12:/home/coremail/
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器,当SRC地址路径包括冒号":"分隔符时启动该模式;
[root@cmmailapp2 /]# rsync -avSH 192.168.11.11:/home/coremail/ /home/coremail/
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
如:rsync -av root@172.16.78.192::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
如:rsync -av /databack root@172.16.78.192::www
6)列远程机的文件列表。这类似于rsync传输,不过困备只要在命令中省略掉本地机信息即可。
如:rsync -v rsync://192.168.11.11/data
四、rsync服务端的配置丛桥;
环境:192.168.11.11为生产机;192.168.11.12为备份机;
那么需要192.168.11.11需要作为rsync的client;
192.168.11.12作为rsync的service端;
1、192.168.11.12_service端的配置;
1)[root@cmmailapp2 data]# touch /etc/rsyncd.conf //此文件为rsync的主配置问题,默认不存在需要手动创建;
2)定义同步的配置;
[root@cmmailapp2 data]# cat /etc/rsyncd.conf
[data]
path = /data/
auth users = coremail
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
[mysql]
Path = /home/coremail/var/mysql
auth users = coremail
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
[cmxt]
Path = /home/coremail/
auth users = coremail
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
3)定义密码文件/etc/rsyncd.secrets
[root@cmmailapp2 data]# cat /etc/rsyncd.secrets
coremail:coremail
4)启动rsync启动服务
[root@cmmailapp2 data]# cat /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes //需要修改为no;
socket_type = stream
wait= no
user= root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
[root@cmmailapp2 data]# chkconfig --level 2345 rsync on
[root@cmmailapp2 data]# chkconfig rsync on
[root@cmmailapp2 data]# chkconfig --level 2345 xinetd on
[root@cmmailapp2 data]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
2、192.168.11.11_client端的配置;
[root@cmmailapp1 /]# cat /etc/rsyncd.secrets
coremail
[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::data
[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::mysql
[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::cmxt
五、定义定时自行rsync同步,指定同步的日志所在的路径/var/log/rsync/下;
[root@cmmailapp1 log]# cat /root/rsync.sh
DATE=`date +%Y%m%d%H%M`
rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::data>/var/log/rsync.date.$DATE
rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::mysql>/var/log/rsync.mysql.$DATE
rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::cmxt>/var/log/rsync.cmxt.$DATE
chmod u+x /root/rsync.sh
[root@cmmailapp1 log]# crontab -l
0 3 * * * /root/rsync.sh
执行时候的日子记录文件:
[root@cmmailapp1 log]# ls |grep 'rsync'
rsync.cmxt.201110180915
rsync.date.201110180915
rsync.mysql.201110180915
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)