1. 程式人生 > >rsync命令基礎使用詳解

rsync命令基礎使用詳解

rsync 遠程備份 linux

1.什麽是rsync ?

Rsync是一個功能強大的增量備份,復制工具,rsync能夠復制刪除,增量同步本地和遠程的文件或者目錄,在本地復制方面能夠替代cp 遠程復制能夠替代scp但是優於scp,本地和遠程清空目錄或者文件內容等又能夠代替rm 而且效率比rm 更高。還能通過將其配置為守護進程,使其遠程客戶端推送或者拉取數據不需要二次寫入密碼。

2.rsync命令幾個常用基本參數和使用格式

-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD

-r, --recursive 對子目錄以遞歸模式處理

-l, --links 保留軟鏈結

-p, --perms 保持文件權限

-t, --times 保持文件時間信息

-g, --group 保持文件屬組信息

-o, --owner 保持文件屬主信息

-D, --devices 保持設備文件信息

--delete 刪除那些DSTSRC沒有的文件

--password-file=FILE

這個參數可以讓我們指定一個密碼文件,通過密碼文件直接遠程連接拉取或者推送要備份的數據,這個密碼文件只需要寫入一個密碼,而且rsync只會讀取第一行的內容。這種方法避免了交互模式下需要手動輸入密碼的操作,能夠實現定時任務備份。

Rsync基本操作格式為 rsync 參數 /復制對象目錄(復制誰) /目標目錄(復制到哪裏)

期中如果復制對象或者目錄是遠程的文件

下需要使用 ip:文件 格式默認省略了 root@ip:文件

例如:rsync -a /app/hello/ 172.16.1.41:/oldboy_dir/

參數 復制的對象 復制到哪裏

3.本地復制操作,等同cp

復制文件 使用-a 保持源文件的屬性信息以及遞歸復制文件夾

rsync -a /etc/sysconfig/ /app

註意:使用這個命令需要註意的地方是目錄後面的/的使用,如下使用/代表,只復制目錄下的所有文件,不包括當前文件夾。

[root@nfs01 app]# ls

[root@nfs01 app]# rsync -a /etc/sysconfig/ /app

[root@nfs01 app]# ls

acpid ip6tables network sandbox

atd ip6tables-config networking saslauthd

auditd ip6tables.old network-scripts selinux

authconfig iptables ntpd smartmontools

cbq iptables-config ntpdate sshd

clock iptables.old prelink sysstat

console irqbalance quota_nld sysstat.ioconf

cpuspeed kdump raid-check system-config-firewall

crond kernel readahead system-config-firewall.old

grub keyboard readonly-root udev

i18n modules rngd

init netconsole rsyslog

不加/重新復制,進行測試,首先刪除掉app文件夾下所有內容

[root@nfs01 app]# rsync -a /etc/sysconfig /app

[root@nfs01 app]# ls

sysconfig

可以看到,已經復制此目錄以及目錄下的所有文件。

4.遠程復制,等同於scp命令的使用

環境:

nfs01 服務器和:172.16.1.31

backup服務器兩臺:172.16.1.41

目標:在nfs01服務器操作 將本地/etc/passwd 復制到backup服務器的/tmp

nfs01端:

[root@nfs01 app]# rsync -a /etc/passwd 172.16.1.41:/tmp

The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established.

RSA key fingerprint is b1:20:60:4f:cc:f2:b4:bf:66:4a:c1:12:54:78:93:74.

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

Warning: Permanently added '172.16.1.41' (RSA) to the list of known hosts.

[email protected]'s password:

[root@nfs01 app]#

Backup端:

[root@backup tmp]# ls

passwd

[root@backup tmp]#

5.遠程刪除目錄和文件,相當於rm

遠程操作和本地操作,一樣可行,這裏演示遠程操作清空文件內容和目錄

首先測試一下文件的內容情況,清空文件或目錄首先要創建一個空的文件或者目錄來進行數據覆蓋。這裏操作刪除需要使用--delete參數配合

清空一個文件:

創建一個空的文件null.txt

Back服務器:清空前

[root@backup oldboy_dir]# ls

a b c d e hh tmp

[root@backup oldboy_dir]# cat a

hello

Nfs01服務器:清空

[root@nfs01 app]# touch null.txt

[root@nfs01 app]# ls

null.txt

[root@nfs01app]#rsync -a (--delete) /app/null.txt 172.16.1.41:/oldboy_dir/a

[email protected]'s password:

[root@nfs01 app]#

Back服務器:清空後

[root@backup oldboy_dir]# ls

a b c d e hh tmp

[root@backup oldboy_dir]# cat a

[root@backup oldboy_dir]#

可以看到已經清空 而且測試的結果不使用--delete也是可以清空文件內容的,但清空目錄必須使用--delete

清空一個目錄:

創建一個空的目錄null

[root@nfs01 app]# mkdir null

[root@nfs01 app]#

Back服務器:清空前

[root@backup oldboy_dir]# ls

a b c d e hh tmp

Nfs01服務器:清空

[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/

[email protected]'s password:

[root@nfs01 app]#

Back服務器:清空後

[root@backup oldboy_dir]# ls

[root@backup oldboy_dir]#

已經清空

6.配置rsync服務器

默認linux中是沒有rsync的配置文件的。需要我們自自己創建,默認識別的配置文件是/etc/rsyncd.conf

創建它並寫入配置:如下

#rsync_config

#created by HQ at 2017

##rsyncd.conf start##

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

[backup]

comment = "backup dir by oldboy"

path = /backup

詳解配置文件:

uid = rsync #指定rsync進程啟動的虛擬用戶名

gid = rsync #指定rsync進程用戶組

use chroot = no #是否修改根路徑 安全配置,沒多大用

max connections = 200 #rsyn最大連接數 rsyn最多可以同時鏈接過來的數量

timeout = 300 #超時時間,達到這個時間沒有響應之後自動踢出用戶,解除占用

pid file = /var/run/rsyncd.pid #指定pid存放的路徑

lock file = /var/run/rsync.lock #指定socket信息存放的路徑

log file = /var/log/rsyncd.log #指定日誌文件存放的路徑

ignore errors #忽略錯誤警告

read only = false #是否只讀模式

list = false #是否列出目錄

hosts allow = 172.16.1.0/24 #白名單

hosts deny = 0.0.0.0/32 #黑名單

auth users = rsync_backup #指定可以連接的用戶名

secrets file = /etc/rsync.password #指定用戶賬號密碼的配置文件

[backup] #模塊的名字,相當於一個變量或者容器

comment = "backup dir by oldboy" #註釋

path = /backup #備份或者拉取數據的路徑

創建配置文件中指定的用戶信息:touch /etc/rsync.password

echo 'rsync_backup:oldboy123'>/etc/rsync.password

註意:這裏需要指定600權限,否則會出現錯誤。

chmod 600 /etc/rsync.password

創建rsync的用戶和用戶組

Useradd -M -s /sbin/nologin rsync

創建備份目錄

mkdir /backup

/backup rsync權限

chown rsync.rsync /backup

啟動rsync服務端進程

rsync --daemon

查看進程是否產生:

[root@backup oldboy_dir]# ps -ef |grep rsync

root 3482 1 0 12:40 ? 00:00:00 rsync --daemon

root 3891 3606 0 16:41 pts/0 00:00:00 grep rsync

到這裏已經配置好服務器端。

rsync客戶端鏈接服務器端使用格式

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

[OPTION...] ---命令相關參數

[USER@] ---遠程連接認證用戶身份信息,認證用戶為一個虛擬用戶,不需要進行創建

HOST:: ---遠程主機地址信息,或者可以寫為遠程主機名稱信息

SRC... ---要進行遠程傳輸備份的遠程模塊信息

[DEST] ---把遠程數據備份到本地什麽位置

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

[OPTION...] ---命令相關參數

[USER@] ---遠程連接認證用戶身份信息,認證用戶為一個虛擬用戶,不需要進行創建

HOST:: ---遠程主機地址信息,或者可以寫為遠程主機名稱信息

SRC... ---本地要進行遠程傳輸復制的文件或目錄信息

DEST ---要進行遠程傳輸備份的遠程模塊信息

7.測試rsync客戶端連接服務器端

Backup服務器:推送數據前

[root@backup backup]# ls

[root@backup backup]#

Nfs01服務器:推送數據

[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/

[email protected]'s password:

[root@nfs01 app]# rsync -avz /etc/hosts [email protected]::backup

Password:

sending incremental file list

hosts

sent 201 bytes received 27 bytes 41.45 bytes/sec

total size is 371 speedup is 1.63

Backup服務器:推送數據後

[root@backup backup]# ls

hosts

[root@backup backup]#

已經接收到推送過來的數據。

在這裏我們輸入的密碼是oldboy123 不再是root的密碼了。也指定了固定的用戶,雖然數據內容安全方面得到了加密,但是每次輸入密碼也是非常麻煩的,在rsync工具中,可以使用非交互式來進行文件的備份功能。

在客戶端nfs01服務器創建一個文件,裏面存放oldboy123這個密碼:

[root@nfs01 /]# cat rsync.passwd

oldboy123

設置權限為600 不設置會出問題。

[root@nfs01 /]# ll rsync.passwd

-rw------- 1 root root 10 Nov 28 14:25 rsync.passwd

免輸入密碼進行備份測試:

Backup服務器:備份前

[root@backup backup]# ls

[root@backup backup]#

Nfs01客戶端:備份

[root@nfs01 /]# rsync -avz /tmp [email protected]::backup --password-file=/rsync.passwd

sending incremental file list

tmp/

tmp/a.out

tmp/passwd

sent 139 bytes received 50 bytes 378.00 bytes/sec

total size is 0 speedup is 0.00

Backup服務器:備份前

[root@backup backup]# tree

.

└── tmp

├── a.out

└── passwd

1 directory, 2 files

至此,rsync的基本用法已經介紹完。


rsync命令基礎使用詳解