Linux中rsync命令使用方式
一、rsync簡介
rsync 是一種高效的文件復(fù)制和同步工具,常用于在本地或遠程計算機之間同步文件和目錄
主要特性:
增量同步:rsync 會檢測源和目標文件之間的差異,只傳輸發(fā)生變化的部分,而不是重新傳輸整個文件。這樣就能有效減少數(shù)據(jù)傳輸量。
支持遠程同步:rsync 可以通過 SSH、RSH 或者 rsync 自身的協(xié)議在遠程服務(wù)器之間傳輸文件。
文件壓縮:可以在傳輸過程中啟用壓縮選項,減少網(wǎng)絡(luò)帶寬的使用。
文件權(quán)限、時間戳和符號鏈接的保留:rsync 支持保留文件的權(quán)限、時間戳、符號鏈接等文件屬性。
支持排除規(guī)則:可以通過排除規(guī)則,指定哪些文件或目錄不被同步。
支持斷點續(xù)傳:在傳輸過程中斷開連接后,rsync 可以從斷點繼續(xù)傳輸數(shù)據(jù),而不需要重新開始。
二、rsync本地模式和遠程模式
1、命令說明
通過rsync的命令,來實現(xiàn),數(shù)據(jù)目錄A 拷貝到數(shù)據(jù)目錄B
語法:rsync [選項] 源數(shù)據(jù) 目的數(shù)據(jù)
2、安裝
centos: yum install rsync -y ubuntu: apt-get install rsync
3、命令語法,分幾個模式
- 本地模式
rsync 參數(shù) 源路徑 目標路徑
rsync -xxxxx /var/log /tmp
- 遠程模式,推送方式,把自己的數(shù)據(jù)推送到另一臺機器上(上傳)
語法1 ,rsync默認走ssh協(xié)議
rsync 參數(shù) 源路徑 user@ip:目標路徑
例如:
rsync -avzP /var/log/ root@10.0.0.31:/tmp/
語法2
rsync 參數(shù) 源路徑 user@ip::目標路徑
- 遠程模式,拉取方式,拉取別人機器的數(shù)據(jù)到自己的機器上(下載)
- rsync 參數(shù) user@ip:源路徑 目標路徑
- rsync 參數(shù) user@ip::源路徑目標路徑
例如:
rsync -avzP root@10.0.0.31:/var/log/ /tmp/
參數(shù)解釋:
-v
詳細模式輸出-a
歸檔模式,遞歸的方式傳輸文件,并保持文件的屬性,等同于 -rlptgoD-r
遞歸拷貝目錄-l
保留軟鏈接-p
保留原有權(quán)限-t
保留原有時間(修改)-g
保留屬組權(quán)限-o
保留屬主權(quán)限-D
等于--devices --specials 表示支持b,c,s,p類型的文件-R
保留相對路徑-H
保留硬鏈接-A
保留ACL策略-e
指定要執(zhí)行的遠程shell命令-E
保留可執(zhí)行權(quán)限-X
保留擴展屬性信息 a屬性
比較常用的組合參數(shù)
rsync -avzP
-a
保持文件原有屬性-v
顯示傳輸細節(jié)情況-z
對傳輸數(shù)據(jù)壓縮傳輸-P
顯示文件傳輸?shù)倪M度信息
你在命令行里,執(zhí)行命令,如果喜歡看到命令的執(zhí)行過程 ,則使用
-avzP
腳本里面?則使用
bash xxx.sh rsync -az
4、本地模式
linux機器本身,數(shù)據(jù)來回發(fā)送
# 后面cp命令可以不用了,用rsync當作cp使用
# /var/log/50G cp /var/log/ /tmp/ touch /var/log/new1.file cp /var/log/ /tmp/
# 用rsync,支持增量備份 # /var/log/50G
rsync -avzP /var/log/ /tmp/ touch /var/log/new1.file rsync -avzP /var/log/ /tmp/
4.1 對文件同步
把本地的的/var/log/messages 文件 拷貝到/opt下 拷貝單個文件 [rsync-41 root ~] # rsync -avzP /var/log/messages /opt sending incremental file list messages 247,040 100% 51.09MB/s 0:00:00 (xfr#1, to-chk=0/1) sent 28,823 bytes received 35 bytes 57,716.00 bytes/sec total size is 247,040 speedup is 8.56 拷貝單個大文件,拷貝大文件時,要注意限速,否則占用磁盤IO太多 --bwlimit=10 先生成一個5G文件 dd bs=100M count=50 if=/dev/zero of=/var/log/my_self.log [rsync-41 root ~] # [rsync-41 root ~] # dd bs=100M count=50 if=/dev/zero of=/var/log/my_self.log 50+0 records in 50+0 records out 5242880000 bytes (5.2 GB) copied, 47.1259 s, 111 MB/s rsync -avzP /var/log/my_self.log /opt iotop查看磁盤的讀寫IO情況 限制單個大文件的傳輸,速度只給他20M每秒 [rsync-41 root ~] # rsync -avzP --bwlimit=20 /var/log/my_self.log /opt sending incremental file list my_self.log 3,957,981,184 75% 20.12MB/s 0:01:02
4.2 對同步目錄(注意語法的區(qū)別)
拷貝后的數(shù)據(jù),是否攜帶該目錄本身 [rsync-41 root ~] # rsync -avzP /var/log /opt sending incremental file list log/ log/boot.log 8,382 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=53/55) log/boot.log-20241203 8,973 100% 8.56MB/s 0:00:00 (xfr#2, to-chk=52/55) log/boot.log-20250104 16,793 100% 5.34MB/s 0:00:00 (xfr#3, to-chk=51/55) ...... [rsync-41 root ~] # [rsync-41 root ~] # ls -lh /opt/ total 4.9G drwxr-xr-x 7 root root 4.0K Jan 6 11:04 log -rw------- 1 root root 242K Jan 6 10:54 messages -rw-r--r-- 1 root root 4.9G Jan 6 10:55 my_self.log 不拷貝該目錄本身,拷貝目錄下的數(shù)據(jù) [rsync-41 root ~] # rsync -avzP /var/log/ /opt sending incremental file list ./ boot.log 8,382 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=53/55) boot.log-20241203 8,973 100% 8.56MB/s 0:00:00 (xfr#2, to-chk=52/55) boot.log-20250104 ...... [rsync-41 root ~] # ls -lh /opt/ total 4.9G drwxr-xr-x 2 root root 232 Dec 2 16:13 anaconda drwx------ 2 root root 23 Dec 2 16:37 audit -rw------- 1 root root 11K Jan 6 11:04 cron -rw------- 1 root root 21K Jan 4 18:38 cron-20250104 -rw-r--r-- 1 root root 286K Jan 6 10:55 lastlog drwxr-xr-x 7 root root 4.0K Jan 6 11:04 log -rw------- 1 root root 184 Jan 6 10:28 maillog -rw------- 1 root root 564 Jan 4 17:09 maillog-20250104 -rw------- 1 root root 254K Jan 6 11:04 messages -rw------- 1 root root 833K Jan 4 18:37 messages-20250104 -rw-r--r-- 1 root root 4.9G Jan 6 10:55 my_self.log .... 測試文件夾的增量拷貝 [rsync-41 root ~] # mkdir /test1 [rsync-41 root ~] # rsync -avzP /test1/ /test2 sending incremental file list ./ sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 0 speedup is 0.00 [rsync-41 root ~] # echo "123" >/test1/1.png [rsync-41 root ~] # rsync -avzP /test1/ /test2 sending incremental file list ./ 1.png 4 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/2) sent 111 bytes received 38 bytes 298.00 bytes/sec total size is 4 speedup is 0.03 [rsync-41 root ~] # ls -lh /test2/ total 4.0K -rw-r--r-- 1 root root 4 Jan 6 11:10 1.png [rsync-41 root ~] #
4.3 無差異化拷貝
使用--delete參數(shù) 將目標目錄的數(shù)據(jù)清空,保證完全和源目錄的數(shù)據(jù)一致
[rsync-41 root ~] # ls /test1/ 1.png 2.png 3.png 4.png 5.png [rsync-41 root ~] # [rsync-41 root ~] # ls /test2/ 1.png [rsync-41 root ~] # [rsync-41 root ~] # rsync -azvP --delete /test1/ /test2/ sending incremental file list ./ 1.png 4 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=4/6) 2.png 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=3/6) 3.png 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=2/6) 4.png 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=1/6) 5.png 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=0/6) sent 319 bytes received 114 bytes 866.00 bytes/sec total size is 4 speedup is 0.01 [rsync-41 root ~] # ls /test1/ 1.png 2.png 3.png 4.png 5.png [rsync-41 root ~] # ls /test2/ 1.png 2.png 3.png 4.png 5.png # rsync拷貝文件夾,攜帶目錄本身 # 把test1目錄本身,連帶著數(shù)據(jù),都拷貝到test2下 rsync -avzP /test1 /test2/ 最終會生成 /test2/test1/ 該文件夾的數(shù)據(jù),和源數(shù)據(jù)目錄 /test1是一樣的
注:對rsync限速,因為rsync在傳輸數(shù)據(jù)時,會占用大量的磁盤IO,以及如果是網(wǎng)絡(luò)傳輸?shù)脑?,占用網(wǎng)絡(luò)帶寬,會導(dǎo)致其他程序受影響
所以rsync這樣的備份服務(wù),都是在夜里,凌晨操作,被影響其他程序
--bwlimit
5、遠程模式
將/root下的數(shù)據(jù),拷貝到/tmp下面
- 把rsync-41 /root下的數(shù)據(jù)
- 拷貝到 nfs-31 /tmp下
使用rsync命令實現(xiàn)如scp的作用
# PUSH 推送模式,上傳模式 把rsync-41 /root下的數(shù)據(jù),拷貝到 nfs-31 /tmp下 登錄rsync41 用ip形式、再用主機名形式 添加無差異化參數(shù),該參數(shù),慎用!搞清楚了自己在做什么! rsync -avzP --delete /root/ root@172.16.1.31:/tmp/
rsync同步后,nfs-31機器/tmp目錄下面文件就變成rsync-41 /root下的數(shù)據(jù)了
# PULL 拉取模式(需要確定,數(shù)據(jù)最終放在了哪) # 把rsync-41 /root下的數(shù)據(jù),拷貝到 nfs-31 /tmp下 rsync -avzP root@172.16.1.41:/root/ /tmp/
注意:
# 不同主機之間同步數(shù)據(jù) --delete rsync -avzP --delete root@172.16.1.41:/root /tmp/ #坑:如果/和一個空目錄進行完全同步,那么效果和刪根一樣 # 坑:傳輸過程不限速導(dǎo)致帶寬被占滿 ,--bwlimit=50 遠程傳輸 nfs-31下的 /tmp/2G.log 備份到 rsync-41的/opt下 rsync -avzP /tmp/2G.log root@172.16.1.41:/opt
-a
保持文件原有屬性-v
顯示傳輸過程-z
壓縮傳輸數(shù)據(jù)-P
顯示傳輸進度
遠程備份文件,并重命名
遠程傳輸 nfs-31下的 /tmp/2G.log 備份到 rsync-41的/opt下,且是無差異化備份 等于清空原有/opt下的數(shù)據(jù) [nfs-31 root ~] # rsync -avzP /tmp/2G.log root@172.16.1.41:/opt/2G.log root@172.16.1.41's password: sending incremental file list 2G.log 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 84 bytes received 35 bytes 47.60 bytes/sec total size is 0 speedup is 0.00 [nfs-31 root ~] # [rsync-41 root ~] # ls /opt/ vmware-network.3.log vmware-network.3.log2 [rsync-41 root ~] # [rsync-41 root ~] # [rsync-41 root ~] # ls anaconda-ks.cfg network.sh
三、rsync服務(wù)模式-服務(wù)端配置
1、為什么需要服務(wù)模式
Rsync 借助 SSH 協(xié)議同步數(shù)據(jù)存在的缺陷:
(1).使用系統(tǒng)用戶(不安全) /etc/passwd
(2).使用普通用戶(會導(dǎo)致權(quán)限不足情況) 3.守護進程傳輸方式: rsync 自身非常重要的功能(不使用系統(tǒng)用戶,更加安全)
2、修改rsync配置文件
[rsync-41 root ~] # vim /etc/rsyncd.conf uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log ##################################### [backup] comment = niumait.cn about rsync path = /backup [data] comment = this is secord backup dir,to website data.. path = /data
3、創(chuàng)建用戶和數(shù)據(jù)目錄
根據(jù)配置文件中定義的信息,創(chuàng)建對應(yīng)的用戶,備份的目錄 該無法登錄的用戶,只是用于運行進程的賬戶 useradd -u 1000 -M -s /sbin/nologin www 創(chuàng)建配置文件中定義的2個備份目錄 mkdir -p /data/ /backup [rsync-41 root ~] # useradd -u 1000 -M -s /sbin/nologin www [rsync-41 root ~] # [rsync-41 root ~] # mkdir -p /data /backup [rsync-41 root ~] # [rsync-41 root ~] # chown -R www:www /data/ [rsync-41 root ~] # chown -R www:www /backup/ [rsync-41 root ~] # ll -d /data/ /backup/ drwxr-xr-x 2 www www 6 Jan 6 14:01 /backup/ drwxr-xr-x 2 www www 6 Jan 6 14:01 /data/ [rsync-41 root ~] #
4、創(chuàng)建rsync專用的賬號密碼
(這一步很重要,如果后面有錯基本也是來這排查)
1.創(chuàng)建密碼文件,寫入賬戶和密碼,用于和客戶端連接時候的認證 vim /etc/rsync.passwd 2.寫入賬戶密碼 [rsync-41 root ~] # cat /etc/rsync.passwd rsync_backup:niuma666 3.待會客戶端向rsync服務(wù)器推送數(shù)據(jù),就得用這個賬號密碼?。。?! 4.這一步,非常重要,rsync要求降低密碼文件的權(quán)限,且必須是600 [rsync-41 root ~] # chmod 600 /etc/rsync.passwd [rsync-41 root ~] # ll /etc/rsync.passwd -rw------- 1 root root 22 Jan 6 14:05 /etc/rsync.passwd
5、設(shè)置開機自啟動
設(shè)置rsyncd服務(wù),運行,且開機自啟 [rsync-41 root ~] # systemctl start rsyncd [rsync-41 root ~] # systemctl status rsyncd ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2025-01-06 14:11:28 CST; 12s ago Main PID: 3686 (rsync) CGroup: /system.slice/rsyncd.service └─3686 /usr/bin/rsync --daemon --no-detach Jan 06 14:11:28 rsync-41 systemd[1]: Started fast remote file copy program daemon. Jan 06 14:11:28 rsync-41 rsyncd[3686]: params.c:Parameter() - Ignoring badly formed line in conf...rors Jan 06 14:11:28 rsync-41 rsyncd[3686]: rsyncd version 3.1.2 starting, listening on port 873 Hint: Some lines were ellipsized, use -l to show in full. [rsync-41 root ~] # [rsync-41 root ~] # systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. 檢查服務(wù)進程是否運行 [rsync-41 root ~] # ps -ef|grep 'rsync' | grep -v 'grep' root 3686 1 0 14:11 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [rsync-41 root ~] # [rsync-41 root ~] # netstat -tunlp|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3686/rsync tcp6 0 0 :::873 :::* LISTEN 3686/rsync
四、rsync服務(wù)模式-客戶端配置
1、安裝rsync
2、配置密碼文件及授權(quán)
非交互式密碼的操作,如下2個方法 1. 生成密碼文件,每次連接都指定這個密碼文件(在客戶端生成) [nfs-31 root ~] # cat /etc/rsync.passwd niuma666 還必須降低密碼文件的權(quán)限才行,必須是600 [nfs-31 root ~] # chmod 600 /etc/my_rsync.pwd [rsync-41 root ~] # ll /etc/rsync.passwd -rw------- 1 root root 22 Jan 6 14:05 /etc/rsync.passwd [nfs-31 root ~] # rsync -avzP --password-file=/etc/rsync.passwd test.tar.gz rsync_backup@rsync-41::bac p sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69 2. 生成密碼變量,讓當前系統(tǒng)中存在叫做 RSYNC_PASSWORD 這個變量,以及變量的值,是配置文件中的密碼即可 [nfs-31 root ~] # tail -1 .bashrc export RSYNC_PASSWORD="niuma666" [nfs-31 root ~] # rsync -avzP test.tar.gz rsync_backup@rsync-41::backup sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69 [nfs-31 root ~] # rsync -avzP test.tar.gz rsync_backup@rsync-41::data sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤圖文教程
這篇文章主要介紹了阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤圖文教程,阿里云服務(wù)器一般需要購買額外的數(shù)據(jù)盤,本文就講解如何掛載使用額外的數(shù)據(jù)盤,需要的朋友可以參考下2014-09-09詳解CentOS 6.5搭建Redis3.2.8單機分布式集群
這篇文章主要介紹了詳解CentOS 6.5搭建Redis3.2.8單機分布式集群,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05解讀Linux下ip命令展示的網(wǎng)絡(luò)連接信息
這篇文章主要給大家介紹了關(guān)于Linux下解讀ip命令展示的網(wǎng)絡(luò)連接信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。2018-03-03linux Jenkins配置salve節(jié)點實現(xiàn)過程圖解
這篇文章主要介紹了linux Jenkins配置salve節(jié)點實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08Linux 初始化MySQL 數(shù)據(jù)庫報錯解決辦法
這篇文章主要介紹了Linux 初始化MySQL 數(shù)據(jù)庫報錯解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05