Home > linux基础 > 介绍rsync用于liunx系统备份

介绍rsync用于liunx系统备份

Rsync 作为 Samba 项目的一部分,Rysnc可以实现快速、增量的文件传输,并成为scp和rcp的替代工具。Rsync可以将文件上传到远程服务器上,尤其是当你需要远程机器来作为本地文件的一个镜像服务器的时候,rsync可以达到最小化传输,因为rsync在网络上传输是非常有效的。有很多工具和工作流程,可以使用rsync实现。这包括从开发计算机的更新内容部署到生产主机,将文件备份到一个远程文件服务器上,并保持两个生产服务器同步。

首先,安装rsync,centos下,yum install rsync即可。

第二步,创建不需要密码即可登录的ssh用户,这里假设A是客户端,B是服务器端。在A客户端里运行ssh-keygen,会在~/.ssh下产生一对公钥和私钥。

[A@yqf ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/A/.ssh/id_rsa):700权限
Created directory ‘/home/A/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/A/.ssh/id_rsa.私钥(600权限)
Your public key has been saved in /home/A/.ssh/id_rsa.pub. 公钥
The key fingerprint is:

在服务器端先建立.ssh文件夹:cd /home/B; mkdir .ssh; chmod 700 .ssh;

在客户端将上述产生的公钥上传的服务器端:

scp ~/.ssh/id_rsa.pub  B@hostname.com:/home/B/.ssh/uploaded_key.pub

在服务器端,

[B@B .ssh]$ cat uploaded_key.pub >> authorized_keys
[B@B .ssh]$ chmod 644 authorized_keys

现在在客户端ssh B@106.187.xxx.xxx就访问服务器B就不需要输入密码了。

第三步,介绍基本的rsync命令用法:

-r递归复制,-v显示进度,-a执行递归复制,保存符号链接,权限和修改时间,用户和组所有权,以及设备和特殊文件,-z传输数据的时候进行压缩,便于备份,节约带宽,但是增加服务器端的负载。

附鸟哥私房菜rsync说明:

[root@www ~]# rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]
选项与参数:
-v :观察模式,可以列出更多的信息,包括镜像时的档案档名等;
-q :与 -v  相反,安静模式,略过正常信息,仅显示错误讯息;
-r :递归复制!可以针对『目录』来处理!很重要!
-u :仅更新 (update),若目标档案较新,则保留新档案不会覆盖;
-l :复制链接文件的属性,而非链接的目标源文件内容;
-p :复制时,连同属性 (permission) 也保存不变!
-g :保存源文件的拥有群组;
-o :保存源文件的拥有人;
-D :保存源文件的装置属性 (device)
-t :保存源文件的时间参数;
-I :忽略更新时间 (mtime) 的属性,档案比对上会比较快速;
-z :在数据传输时,加上压缩的参数!
-e :使用的信道协议,例如使用 ssh 通道,则 -e ssh
-a :相当于 -rlptgoD ,所以这个 -a 是最常用的参数了!
更多说明请参考 man rsync 的解说!

# 1. 将 /etc 的数据备份到 /tmp 底下:
[root@www ~]# rsync -av /etc /tmp
....(前面省略)....
sent 21979554 bytes received 25934 bytes  4000997.82 bytes/sec
total size is 21877999  speedup is 0.99
[root@www ~]# ll -d /tmp/etc /etc
drwxr-xr-x. 106 root root 12288 Jul 26 16:10 /etc
drwxr-xr-x. 106 root root 12288 Jul 26 16:10 /tmp/etc <==瞧!两个目录一样!
# 第一次运作时会花比较久的时间,因为首次建立嘛!如果再次备份呢?

[root@www ~]# rsync -av /etc /tmp
sent 55716 bytes received 240 bytes  111912.00 bytes/sec
total size is 21877999  speedup is 390.99
# 比较一下两次 rsync 的传输与接受数据量,你就会发现立刻就跑完了!
# 传输的数据也很少!因为再次比对,仅有差异的档案会被复制。

# 2. 利用 student 的身份登入 clientlinux.centos.vbird 将家目录复制到本机 /tmp
[root@www ~]# rsync -av -e ssh student@192.168.100.10:~ /tmp 
student@192.168.100.10's password:  <==输入对方主机的 student 密码
receiving file list ... done
student/
student/.bash_logout
....(中间省略)....
sent 110 bytes  received 697 bytes  124.15 bytes/sec
total size is 333  speedup is 0.41

[root@www ~]# ll -d /tmp/student
drwx------. 4 student student 4096 Jul 26 16:52 /tmp/student
# 瞧!这样就做好备份啦!很简单吧!

第四步:实例操作

我想把linode的某个vpsB下/home和/usr/local/mysql/var 两个文件夹备份到另外一个linode VPS A的/backup下,该如何操作呢?

rsync -av -e ssh B@Bhost:/home  /backup

rsync 的传输方式至少可以透过三种方式来运作:

在本机上直接运作,用法就与 cp 几乎一模一样,例如:
rsync -av /etc /tmp (将 /etc/ 的数据备份到 /tmp/etc 内)

透过 rsh 或 ssh 的信道在 server / client 之间进行数据传输,例如:
rsync -av -e ssh user@rsh.server:/etc /tmp (将 rsh.server 的 /etc 备份到本地主机的 /tmp 内)

直接透过 rsync 提供的服务 (daemon) 来传输,此时 rsync 主机需要启动 873 port:
1. 你必须要在 server 端启动 rsync , 看 /etc/xinetd.d/rsync 即可;
2. 你必须编辑 /etc/rsyncd.conf 配置文件;
3. 你必须设定好 client 端联机的密码数据;
4. 在 client 端可以利用:rsync -av user@hostname::/dir/path /local/path

 


若非注明,本博客内容均为原创或翻译自Linode Library,教程默认Centos为linux发行版,转载请注明转自linode中文教程www.linode.im。linode中文教程QQ群:185393826,一起讨论linode及linux,linode中文教程、linode代购、linode合租、linode推介、linode返佣、linode优惠。日本VPS、美国VPS、海外独立服务器代购均在linode.im。

Categories: linux基础 Tags: , , ,