發新話題
打印

mirror、備份、資料轉移好用的指令 - rsync

mirror、備份、資料轉移好用的指令 - rsync

[轉貼自]http://ultraman.tw/blog/ultraman/rewrite.php/read-62.html

主機1 Fedora Core6

IP: 192.168.1.11  

# rpm -q rsync 

rsync-2.6.9-2.fc6


主機2 CentOS4.4

IP: 192.168.1.12  

# rpm -q rsync

rsync-2.6.3-1


參數意義:

-a, --archive

It is a quick way of saying  you want  recursion  and want to preserve almost everything.

-v, --verbose

This  option  increases  the amount of information you are given during the transfer.

-l, --links

When  symlinks are encountered, recreate the symlink on the destination.

-R, --relative

Use relative paths.

--delete

如果Server端刪除了一文件,那客戶端也相應把這一文件刪除,保持真正的一致,下這個指令時要非常小心!

-e ssh
建立起加密的連接。


  • 狀況一: 在192.168.1.11主機端,要copy一個檔案blog.tar.gz給192.168.1.12主機,若您雙方都有 root 權限 (本機→遠端)
                

// 目前在 192.168.1.11端

# rsync blog.tar.gz 192.168.1.12:/root/

Are you sure you want to continue connecting (yes/no)?yes

root@192.168.1.12's password:   // 輸入 192.168.1.12 的root密碼 

  •  狀況二:在 192.168.1.11主機端,要從192.168.1.12主機copy一個檔案blog.tar.gz到本機(遠端 →本機)
                

// 目前在 192.168.1.11端

# rsync 192.168.1.12:/root/blog.tar.gz .

root@192.168.1.12's password:   // 輸入 192.168.1.12 的root密碼  

  • 狀況三:在 192.168.1.11主機端,要mirror整個目錄theme/到192.168.1.12主機
                

// 目前在 192.168.1.11端

# cd /root

# rsync -avlR --delete theme/ 192.168.1.12:/root/

root@192.168.1.12's password:   // 輸入 192.168.1.12 的root密碼 

// 你也可以使用如下指令,跟上面同樣效果

# rsync -avlR --delete /root/theme/ 192.168.1.12:/

// 以上兩種方法都會在192.168.1.12主機上建立一個 /root/theme 目錄,跟192.168.1.11 的 /root/thehe 一模一樣的目錄

// 第二次執行時若資料有變動,它只會copy有變動的部分,或刪除有變動的部分,達到mirror的效果。

// 現在舉個一個錯誤的示範

# rsync -avlR --delete /root/theme/ 192.168.1.12:/root/

// 這樣的指令會使得在 192.168.1.12 產生一個目錄 /root/root/theme 跟 192.168.1.11 的 /root/theme 目錄一模一樣,所以這跟 cp 的指令是有點不太一樣的,這邊要稍微留意一下。

  • 狀況四:本機電腦的兩個資料夾要 mirror,這種情況通常是另外一個資料夾是 mount 到NFS的資料夾,要做備份的情況(本機→本機)
                

# rsync -avlR --delete /test1/ /backup/

// 以上會產生一個 /backup/test1 跟 /test1 一模一樣的資料夾,達到備份或者是mirror的效果。

// 以上的指令你也可以少掉 R 這個參數

# rsync -avl --delete /test1/ /backup/

// 這樣會使得 /backup 跟 /test1 兩個資料夾一模一樣,但是少掉 R 這個參數通常是比較危險的,它是會把 /backup 原來的東西給清空都換成 /test1 資料夾裡面的東西的喔。

 
  •  狀況五:copy 過程中要加密
                
# rsync -avlR --delete -e ssh /root/theme/ 192.168.1.12:/
 
  • 狀況六:為了使用SSH加密傳輸,而且不要需輸入密碼
                                

# cd /root/.ssh/ // 進到 /root/.ssh 這個隱藏目錄下

# ssh-keygen -d  // 產生一對公鑰跟私鑰

Enter file in which to save the key (/root/.ssh/id_dsa): // 按 Enter

Enter passphrase (empty for no passphrase): // 按 Enter

Enter same passphrase again: // 按 Enter

// 此時目錄下會產生公鑰id_dsa.pub和私鑰id_dsa,現在要把id_dsa.pub丟到192.168.1.12 並且更名為 authorized_keys

# scp id_dsa.pub 192.168.1.12:/root/.ssh/authorized_keys

// 完成以後,下次再使用 rsync連到192.168.1.12時就不需要輸入密碼了。

 

注意:

一、這個指令非常有殺傷力(刪殺力),尤其在搭配使用 --delete 參數做 mirror 時,請先在其他機器先做好指令測試再到實際的機器跑,否則後果真的會不堪設想喔!

二、若遠端身份不是 root 時,遠端請使用 smallken@192.168.1.12:/home/smallken 丟檔案給 smallken,密碼輸入 smallken 的登入密碼。 



引用:http://smallken.no-ip.org/blog/2007/04/09/linux/169.html


TOP

使用rsync同步网路备份

一. 简介

rsync常用的备份工具, 它目前是由 rsync.samba.org 维护.

rsync使用所谓的"rsync算法",提供一个非常快速的档案传输方法, 使local和远端二部主机之间的档案达到同步,它主要是传送二个档案的异动部份,而非每次都整份传送, 因此速度相当地快.

rsync它可以搭配rsh或ssh,也可以当成daemon模式使用直接的socket连接, 所以rsync可以当做一个优异的备份工具来使用.

我这简单介绍运用rsync备份远程网路主机档案的基本方法。

在这,我们是给rsync当成linux的一种daemon模式来运行.

首先,先给个简单的定义:当然要一台主机跑rsync daemon模式, 我们就称这台机器为一rsync Server, 或者说这台主机是一台备份主机( Backup Server).

备份主机会开启一个873的端口(port), 等待对方rsync连接.所以服务器记的要开这个端口

连接时, rsync Server 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输.

第一次连通完成时, 会把整份档案传输一次, 下一次就只传送二个档案之间异动的部份.

以上是rsync client (欲加以备份的远程网路主机) 和rsync server 的运作方式。


藉由上述方法, 我们当然也可以设立多部备份主机, 使网路主机上重要的档案能分散至数部主机中, 以分散风险.

一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用tar打成tar的包, 把档案备份到硬盘之类.

以下内容,我用Ubuntu 7.10做客户机,Centos5做服务器测试过.


二. 安装法


rsync目前最新版是 2.6.8, 可以到rsync.samba.org 下载.

若您使用 rpm 套件,请用下面的方法安装,当然rhel5和centos5中默认就安装了
#rpm -ivh rsync*.rpm
#yum install rsync


它的设定档位置在 /etc/rsyncd.conf,奇怪,我的没有自动生成这个文件,那我们就来自己配置他



三. 设定 rsync server: (假设这台主机名称为 rsync.x111.com)


rsync server 端要设定以下四项:


1.规划建立备份目录区


2.启动xinetd中的rsync

3.设定: /etc/rsyncd.conf


4.设定: 密码档


依次说明如下:


1. 规划建立备份目录区:

建议您准备一个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /blackup/x99


2. 启动xinetd中的rsync
系统默认没有安装xinetd。

# yum install xinetd

#service xinetd restart
#chkconfig rsync on


以上的操作,主要是要打开rsync这个daemon,一旦有rsync client要连接时,xinetd会把它转介给rsyncd (port 873).


3. 设定 /etc/rsyncd.conf :

全局设置
uid = root
gid = root
use chroot = no # 不使用chroot
max connections = 4 # 最大连接数为4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log # 日志记录文件

以下的部分,代表开放给某一台rsync client 主机的设定, 简单范本如下:

[x99]

path = /blackup/x99/x99_backup

auth users = x99_backup

secrets file = /etc/rsyncd.secrets

read only = no

以上文件的注解:


[x99] 代表要备份的主机代号, 名称自己设置.


path 用来设定备份档案要存放在那一个目录.这个可先要mkdir开好,可以自己设置

auth users 代表授权的帐号, 可以自己设置.

secrets file 代表储存帐号密码的密码档, 其放置的路径档名.


当然, 这台备份主机, 可以容纳许多 rsync client 连接, 只要在 rsyncd.conf中设置对应的多个部分即可.


以下例子,代表二个主机x99及x100欲备份进来:



[x99]

path = /blackup/x99/x99_backup
comment = XXXXX

auth users = x99_backup

secrets file = /etc/rsyncd.secrets

read only = no


[x100]

path = /blackup/x100/x100_backup

auth users = x100_backup

secrets file = /etc/rsyncd.secrets

read only = no



4. 设定密码文件:


rsyncd.secrets 的内容很容易, 格式为"帐号:密码";

如以下例子:

x99_backup:x99pass

注意! 上述设定只是一个例子,你自己设置可一定千万不要直接套用.

接下来, 要将 rsyncd.secrets 这个密码档的档案属性设为root拥有, 且权限要设为600, 否则无法备份成功!


因此, 请下:

#chown root.root rsyncd.secrets

#chmod 600 rsyncd.secrets


至此, rsync的服务器这端已设定完成, 若欲查看备份日志.
#tail -f /var/log/rsyncd.log

接下来是 client 端(即欲备份的网路主机) 的设定.

四. 设定 rsync client (假设这台主机 IP 为 : 11.22.33.44)

步骤:


1.设定密码档


2.测试rsync命令是否可以正常


3.将rsync指令放入定时任务(crontab)


另外, 假设x99这台主机是网路上的服务器, 现打算把/var/www/html这个目录加以备份至backup server(上面讲的rsync.x111.com),


但不想备份下面的目录中的内容/html/log,(也就是说要把/html/log目录排除), 整个操作方式如下:


1. 假设把密码档放在 /root/rsyncd.secrets, 内容只要含有密码一行即可:


x99pass


注意: rsyncd.secrets 的权限属性必须设为600,设置方法见上面.


2. 测试指令是否可以成功?


/usr/bin/rsync -rvztopglHpogDtS –progress –password-file=/root/rsyncd.secrets /var/www/html –exclude /html/log x99_backup@rsync.x111.com::x99


若出现传输目录档案的画面, 即表示测试成功.上面这个命令行中-rv里的v是verbose,z是压缩,r是递归,字目录一直,topg都是保持文件原有属性如属主、时间的参数。- -progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的 x99_backup@ip中,的x99_backup是指的用户名


3. 置入工作排程, 假设每天凌晨5点开始备份:


crontab -u root -e

0 5 * * * /usr/bin/rsync -rvlHpogDtS –password-file=/root/rsyncd.secrets /var/www/html –exclude apache /html/log x99_backup@rsync.x111.com::x99


若您有其它目录(如 /home)要备份, 则如法泡制:

20 5 * * * /usr/bin/rsync -rvlHpogDtS –password-file=/root/rsyncd.secrets /home x99_bakup@rsync.x111.com::x99


当然您觉得备份一台Backup Server不够,还可再按上述方法,自行增加任意多台Backup Server, 以分散风险!

五. 安全性:


防火墙的 iptables 指令, 来限制 rsync client 的连线范围, 例子如下:


iptables -A INPUT -p tcp -s ! xx.xx.xx.xx –dport 873 -j DROP


如此, 只有 xx.xx.xx.xx 这个 client IP 能连入这台 rsync server.

附:
详细格式说明:
-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为
~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。
(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial –progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=FORMAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

TOP

發新話題