首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>linux服务器>正文

使用Rsync进行专家级的备份

http://www.oklinux.cn  2008-09-08  OKLinux   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

过去的两个月中,我疲于奔命。就在这两个月中,我的计算机也崩溃了。要是没有 Rsync 的话,我的麻烦就大了,不过,幸好我经常使用这个工具,我的数据 (实际上是大部分数据) 已经被拷贝到其他地方随时可用了。要熟悉 Rsync 需要花费一段时间,不过一旦熟悉了 Rsync,你就可以使用一个很短的脚本来掌控大部分地备份工作了。

Rsync 有什么突出优点呢?首先,它被设计成只传送文件的不同部分,而非传送整个文件,以加速文件传输。比如,我正在写作本文,那我就可以现在使用 Rsync 复制一次,而之后再进行一次传输。第二次(第三次、第四次……)父子文件的时候,Rsync 只传送文件的不同部分。这将极大地节省时间,特别是在日常备份的过程中复制整个目录的时候。第一次复制会消耗较长时间,而下一次的传输就少多了(如果你每天都不大幅修改目录的内容的话)。

Rsync的另一个好处是它可以保留文件地所有权和访问权限信息以及复制符号链接,简而言之,它被设计成灵巧地掌控你的文件。

要安装 Rsync,你应该不需要做什么 --- 一般的 Linux distro 都应该缺省安装它了。如果没有的话,你应该能在你的 distro 地软件包仓库里找到并安装它。如果你要把数据复制到远程系统上的话,两台机器都需要 Rsync。

当你使用 Rsync 把文件复制到另一台主机地时候,Rsync 通常使用一个远程 shell,如 ssh 或 rsh 来工作。在下面的例子中,出于安全性的考虑,我们将只使用 ssh。当然,我们也可以访问使用 Rsync daemon 的远程主机,不过,既然现在 ssh 几乎是无处不在的了,我们也没有必要费力气使用一个 daemon 了。

了解 Rsync
Rsync 的基本语法非常简单 --- 只要运行 Rsync [options] source destination 就可以把文件从 source 复制到 destination。

所以,举个例子,如果你要把你归属目录里的文件复制到USB硬盘上去,你可以这么做:Rsync -a /home/user/dir/ /media/disk/dir/ 。这里需要强调一下,对于 Rsync 来说 "/home/user/dir/" 和 "/home/usr/dir" 是截然不同地。如果没有最后的斜线,Rsync 会整个地复制目录;而有了最后的斜线,Rsync 将只复制目录中的内容,而不创建目录本身。如果你想复制一个目录结构,那你就应该去掉结尾的斜线,比如在镜像 /var/www 到其他机器的时候或类似的情况。

在这个例子中,我加入了归档开关 (-a),这实际相当于同时使用几个 Rsync 开关。它包括递归与复制符号链接开关、保留组与属主属性开关,总之就是让 Rsync 适用于进行归档拷贝。注意,-a 不保留硬链接;如果你需要的话,还应该加上硬链接开关 (-H)。

另一个常用开关是 verbose (-v),这将让 Rsync 报告更多信息。你还可以使用两个或三个 -v 开关 --- -v 将给出一些信息,-vv 会给出更多信息,而 -vvv 会把所有信息都给出来。

如果没有特别的选项,Rsync 会连隐藏文件 (以 . 开头的文件) 一起复制的。如果你希望不复制隐藏文件,你应该加入开关 --exclude=".*/" 。你还可以使用 --exclude 来防止复制 vim 交换文件 (.swp) 或其他一些程序的自动备份文件 (.bak) 。

进行本地拷贝
假设你有一个外接 USB 或 1394 硬盘,你希望把 home 目录复制到外接驱动器上。一个不错的方法是把重要数据保存在一个顶级目录中,之后复制到外接硬盘地备份目录之中,命令如下:

Rsync -avh /home/usr/dir/ /media/disk/backup/

如果你想保证本地删除的文件也在外接硬盘上被删除,你需要使用 --deleted 开关,如下:

Rsync -avh --delete /home/user/dir/ /media/disk/backup

小心使用这个开关; 这个开关可能会让你在无意识的情况下删除一批无辜文件。事实上,当你要用 Rsync 之前,使用 --dry-run 开关看一下要执行哪些操作而不真正同步文件可能是个好主意。如果你已经开始了一次 Rsync 传输,却突然意识到这条命令可能造成数据损失的话,应该立刻用 Ctrl-C 来中止执行。一些文件可能已经损失掉了,不过你还有机会保存住剩下的。

进行远程拷贝
想要把文件复制到远程主机上? 没问题 --- 你需要做的就是加入主机和用户信息。举个例子,如果你想把同一个目录复制到远程主机上,你应该用:

Rsync -avhe ssh --delete /home/user/dir/ [email protected]:dir/

如果你想知道文件传输的速度,以及还有多少需要复制,可以加上 --progress 开关:

Rsync --progress -avhe ssh --delete /home/user/dir/ [email protected]:dir/

如果你不想每次使用 Rsync 都被提示一次输入密码,确认一下你使用了 SSH 公钥机制而不是密码。要想这么做,你应该使用 ssh-keygen -t dsa ,并在密码提示环节直接按回车,以在本机上生成公钥。之后,使用 ssh-copy-id -i .ssh/id_dsa.pub [email protected] 把公钥复制到远端主机上。

如果你想从远端主机上找回一些以前的备份文件,可以使用如下命令:

Rsync -avze ssh remote.host.com:/home/user/dir/ /local/path/

其中,z 开关会在传输过程中压缩数据,如果你在复制的文件在本地已经存在了,Rsync 将不再传输 --- 这和把文件从本地传送到远端主机没什么区别。

用一个脚本进行封装
一旦你指出了哪些目录需要进行同步,确定了同步文件的命令,就可以很容易地把这些命令封装在一个简单脚本里。这是一个简单的例子:

Rsync --progress -avze ssh --delete /home/user/bin/ [email protected]:bin/ Rsync --progress -avze ssh --delete /home/user/local/data/ [email protected]:local/data/ Rsync --progress -avze ssh --delete /home/user/.tomboy/ [email protected]:/.tomboy/

如果你是在交互模式下运行 Rsync,可以使用 --progress 开关。如果不是交互模式的话,也就不需要这个开关了。

如果你看 Rsync 的 man page 有可能会被它弄糊涂了。不过,当有了一些 Rsync 的经验之后,你会发现设置 Rsync 任务并不困难,它将为某天可能会来临的硬盘故障和数据损失做准备。


上一篇:vxworks与Linux内核比较   下一篇:让Windows下的文件夹被Linux虚拟系统中共享

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·让Windows下的文件夹被Linux虚拟系统中共享
·Linux - ping通路由器却上不了网解决一例
·Linux下增加自动执行的命令
·Linux下oracle asmlib的使用
·vsftp 限制用户切换目录
·Linux下安装eclipse与myeclipse
·Linux下建web服务器
·Linux移植后没能挂载VFS解决
·windows下以及Linux下经常切换ip的批处理脚本
·Linux lftp乱码解决
·Red Hat Enterprise Linux 4.7中vsftp的设置
·Linux下关于subversion权限配置问题
·Linux下的基于NET-SNMP的MRTG流量监控安装与配置
·如何设置ssh信任关系
·Linux - 主机之间copy保持符号链接不变
·ajax在Linux和Windows下的兼容问题(系统错误:-107289
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·利用VSFTP架设Linux环境下的FTP服务器
·Linux下安装Apache 2.2.6 笔记
·Linux下的主要VPN技术
·Linux下Samba服务器搭建实例
·用Sendmail在Linux下架设邮件服务器
·2009服务器盘点:再见Sun 再见麦克利尼
·SUSE 10上做VPN服务器
·在Ubuntu 9.10中打造带tdbsam Backend
·Ubuntu服务器上SSH Server 的安装配置
·Nginx 禁止某个 User_Agent 的方法
·Linux-Apache-MySQL-PHP网站架构方案分
·Nginx 对某些 User_Agent 进行限速的方
  阅读排行
·Linux系统下架设APACHE SVN服务器全过
·Linux下用vsftp轻松搭建FTP服务器(修订
·Ubuntu下安装tftp服务器的步骤
·Linux 下配置vsftp虚拟用户总结
·详解远程SHELL下安装配置RedHat ES 5的
·Linux下安装eclipse与myeclipse
·Linux DNS Server -bind 9.5.0 安装配
·Linux与Linux,Linux与Windows之间使用S
·Ubuntu上搭建SVN服务器全攻略
·LVS集群学习笔记(NAT\DR\IP tunnel)
·Linux下tomcat启动jvm内存设置
·Linux shell 中FTP实现自动下载上传文
·安装大型Linux集群(4):节点安装和 GPFS
·Linux系统下架设PPTP VPN服务器
·Linux系统中下查看内存的方法
网摘收藏: