使用 rsync
可以非常高效地將文件或目錄從一個服務器傳輸到另一個服務器。
能力:
- 支持 64 位文件、64 位 inode、64 位時間戳、64 位長整型
- 支持套接字對、符號鏈接、符號鏈接時間、硬鏈接、硬鏈接特殊文件、硬鏈接符號鏈接
- 支持 IPv6、訪問時間(atimes)、批處理文件、就地更新、附加操作、ACLs、擴展屬性、可選的隔離參數、字符集轉換(iconv)、預分配
- 支持停止操作、無創建時間(crtimes)
優化:
- SIMD 優化、無匯編優化、OpenSSL 加密、無 MD5 匯編優化
校驗和算法:
- xxh128、xxh3、xxh64 (xxhash)、MD5、MD4、SHA1、無校驗
壓縮算法:
- zstd、lz4、zlibx、zlib、無壓縮
守護進程認證:
- sha512、sha256、sha1、md5、md4
rsync
完全不提供任何保證。這是自由軟件,您可以在某些條件下重新分發它。詳情請參見 GNU 通用公共許可證。
rsync
是一個文件傳輸程序,能夠通過快速的差異化算法高效地進行遠程更新。
01 安裝
apt-get install rsync
02 使用
使用方法:
rsync [選項]... 源 [源]... 目標
或者 rsync [選項]... 源 [源]... [用戶@]主機:目標
或者 rsync [選項]... 源 [源]... [用戶@]主機::目標
或者 rsync [選項]... 源 [源]... rsync://[用戶@]主機[:端口]/目標
或者 rsync [選項]... [用戶@]主機:源 [目標]
或者 rsync [選項]... [用戶@]主機::源 [目標]
或者 rsync [選項]... rsync://[用戶@]主機[:端口]/源 [目標]### 選項:
- **`--verbose` 或 `-v`**:增加詳細輸出
- **`--info=FLAGS`**:細化信息輸出的詳細程度
- **`--debug=FLAGS`**:細化調試輸出的詳細程度
- **`--stderr=e|a|c`**:更改標準錯誤輸出模式(默認:錯誤)
- **`--quiet` 或 `-q`**:抑制非錯誤消息
- **`--no-motd`**:抑制守護進程模式的 MOTD(消息)
- **`--checksum` 或 `-c`**:基于校驗和跳過文件,而不是根據修改時間和大小
- **`--archive` 或 `-a`**:歸檔模式(即 `-rlptgoD`,不包括 `-A,-X,-U,-N,-H`)
- **`--no-OPTION`**:關閉隱式選項(例如,`--no-D`)
- **`--recursive` 或 `-r`**:遞歸進入目錄
- **`--relative` 或 `-R`**:使用相對路徑名稱
- **`--no-implied-dirs`**:不與 `--relative` 一起發送隱式目錄
- **`--backup` 或 `-b`**:制作備份(參見 `--suffix` 和 `--backup-dir`)
- **`--backup-dir=DIR`**:將備份制作到 `DIR` 指定的目錄結構中
- **`--suffix=SUFFIX`**:備份的后綴(默認是 `~`,不使用 `--backup-dir`)
- **`--update` 或 `-u`**:跳過接收端已經更新的文件
- **`--inplace`**:就地更新目標文件
- **`--append`**:將數據附加到較短的文件
- **`--append-verify`**:附加并驗證舊數據的文件校驗和
- **`--dirs` 或 `-d`**:傳輸目錄時不遞歸
- **`--old-dirs` 或 `--old-d`**:在與舊版 `rsync` 通信時,`--dirs` 的表現
- **`--mkpath`**:創建目標路徑中缺少的組件
- **`--links` 或 `-l`**:保持符號鏈接為符號鏈接
- **`--copy-links` 或 `-L`**:將符號鏈接轉換為它們指向的文件/目錄
- **`--copy-unsafe-links`**:只轉換“危險”的符號鏈接
- **`--safe-links`**:忽略指向樹外的符號鏈接
- **`--munge-links`**:修改符號鏈接使其安全且不可用
- **`--copy-dirlinks` 或 `-k`**:將符號鏈接的目錄轉換為引用的目錄
- **`--keep-dirlinks` 或 `-K`**:將接收端的符號鏈接目錄視為目錄
- **`--hard-links` 或 `-H`**:保持硬鏈接
- **`--perms` 或 `-p`**:保持權限
- **`--executability` 或 `-E`**:保持可執行權限
- **`--chmod=CHMOD`**:修改文件和/或目錄的權限
- **`--acls` 或 `-A`**:保持 ACL(這會自動啟用 `--perms`)
- **`--xattrs` 或 `-X`**:保持擴展屬性
- **`--owner` 或 `-o`**:保持文件所有者(僅限超級用戶)
- **`--group` 或 `-g`**:保持文件組
- **`--devices`**:保持設備文件(僅限超級用戶)
- **`--copy-devices`**:將設備內容作為普通文件復制
- **`--write-devices`**:將數據寫入設備作為文件(啟用 `--inplace`)
- **`--specials`**:保持特殊文件
- **`-D`**:與 `--devices --specials` 相同
- **`--times` 或 `-t`**:保持修改時間
- **`--atimes` 或 `-U`**:保持訪問時間
- **`--open-noatime`**:避免更改打開文件的訪問時間
- **`--crtimes` 或 `-N`**:保持創建時間
- **`--omit-dir-times` 或 `-O`**:在 `--times` 時省略目錄
- **`--omit-link-times` 或 `-J`**:在 `--times` 時省略符號鏈接
- **`--super`**:接收端嘗試執行超級用戶活動
- **`--fake-super`**:使用擴展屬性存儲/恢復特權屬性
- **`--sparse` 或 `-S`**:將零序列轉換為稀疏塊
- **`--preallocate`**:在寫入文件前預分配目標文件
- **`--dry-run` 或 `-n`**:進行試運行,不做任何更改
- **`--whole-file` 或 `-W`**:以整體文件方式復制文件(不使用差異傳輸算法)
- **`--checksum-choice=STR`**:選擇校驗和算法
- **`--one-file-system` 或 `-x`**:不要跨越文件系統邊界
- **`--block-size=SIZE` 或 `-B`**:強制使用固定的校驗塊大小
- **`--rsh=COMMAND` 或 `-e`**:指定要使用的遠程 shell
- **`--rsync-path=PROGRAM`**:指定遠程機器上運行的 `rsync` 程序
使用 :
時通過遠程 shell 連接,使用 ::
和 rsync://
連接時通過 rsync
守護進程,且要求源或目標以模塊名稱開頭。
常用選項:
--verbose
或-v
:增加詳細輸出--quiet
或-q
:抑制非錯誤信息--checksum
或-c
:基于校驗和而非修改時間和文件大小來跳過文件--archive
或-a
:歸檔模式,包括-rlptgoD
(不包括-A,-X,-U,-N,-H
)--recursive
或-r
:遞歸進入目錄--links
或-l
:保持符號鏈接為符號鏈接--copy-links
或-L
:將符號鏈接轉換為引用文件/目錄--delete
:從目標目錄刪除多余的文件--dry-run
或-n
:執行試運行,不做任何更改--progress
:在傳輸過程中顯示進度--compress
或-z
:在傳輸過程中壓縮文件數據--exclude
:排除匹配特定模式的文件--include
:不要排除匹配特定模式的文件--bwlimit
:限制套接字 I/O 帶寬--version
或-V
:打印版本信息并退出--help
或-h
:顯示幫助信息
常用的守護進程相關選項:
--daemon
:啟動rsync
守護進程--password-file
:從文件中讀取守護進程的密碼
錯誤代碼和調試:
如果遇到問題或錯誤,rsync
會提供錯誤代碼和詳細的調試信息,可以通過 --debug
參數獲取更詳細的調試信息。
如果要查看完整的文檔,可以使用 rsync(1)
和 rsyncd.conf(5)
手冊,或訪問 rsync 官方網站。
03 常用案例
基本命令格式:
rsync -avz /path/to/local/file_or_directory username@remote_host:/path/to/remote/directory
命令選項解釋:
-a
:歸檔模式,等同于-rlptgoD
,表示遞歸復制并保留文件屬性(如權限、時間戳等)。-v
:啟用詳細輸出,顯示傳輸過程。-z
:啟用壓縮傳輸,適合大文件,減少傳輸的數據量。username
:遠程主機的用戶名。remote_host
:遠程主機的IP地址或域名。/path/to/remote/directory
:遠程服務器上的目標目錄。
例子 1:將本地文件傳輸到遠程服務器
rsync -avz /home/user/file.txt username@remote_server:/home/username/target_directory
例子 2:將本地目錄傳輸到遠程服務器
rsync -avz /home/user/myfolder/ username@remote_server:/home/username/target_directory/
注意: /
在目錄路徑末尾的差異。末尾帶 /
會將目錄內容傳輸到目標目錄中,不帶 /
會傳輸整個目錄。
例子 3:從遠程服務器同步到本地服務器
rsync -avz username@remote_server:/home/username/remote_folder /local/destination_folder
常用
rsync -avzP -e "ssh -p 17226" /mnt/data/home/XXXX h4tk3rwu5w84thvx.XXX:/mnt/data/home/#/決定是整個目錄,還是目錄內部-a(歸檔模式):歸檔模式用于保留文件的符號鏈接、權限、時間戳、組和所有者等屬性,相當于啟用 -rlptgoD 選項。
-r:遞歸進入目錄。
-l:保留符號鏈接。
-p:保留文件權限。
-t:保留修改時間。
-g:保留文件所屬組。
-o:保留文件所有者。
-D:保留設備文件。
-v(詳細模式):增加命令執行時的輸出,顯示哪些文件正在傳輸。
-z(壓縮):在傳輸過程中壓縮數據,以減少帶寬使用。
-P:這個選項等同于 --partial --progress:
--partial:保持已傳輸的部分文件,即使傳輸中斷,也不會丟失已傳輸的部分。
--progress:顯示文件傳輸的進度。
-e "ssh -p 17226":使用 ssh 連接遠程主機,并指定端口 17226。這是用來加密數據傳輸的協議,-p 選項指定 SSH 連接的端口。
/mnt/data/home/XXXX:本地源目錄:rsync 將從這個路徑開始同步文件。請注意,路徑末尾有一個斜杠 /,這表示將同步目錄內的所有內容。
h4tk3rwu5w84thvx.XXX:/mnt/data/home/:遠程目標目錄:數據將被傳輸到遠程主機 h4tk3rwu5w84thvx.XXX 上的 /mnt/data/home/ 目錄。
h4tk3rwu5w84thvx.XXX 是遠程主機的地址,:/mnt/data/home/ 是目標路徑。
常用額外選項:
-e ssh
:指定使用 SSH 作為傳輸協議(默認就是 SSH,但可以明確指定)。--progress
:顯示傳輸進度。--delete
:刪除目標目錄中不再源目錄中的文件。
例子 4:顯示進度
rsync -avz --progress /home/user/myfolder/ username@remote_server:/home/username/target_directory/
例子 5:刪除目標文件夾中源目錄已刪除的文件
rsync -avz --delete /home/user/myfolder/ username@remote_server:/home/username/target_directory/
注意:
- 使用
rsync
進行數據傳輸時,最好通過 SSH 進行連接。 - 通過添加選項如
-v
、-z
、--progress
等可以讓你更好地控制和監控傳輸過程。 - 根據具體需要選擇是否使用
--delete
來同步刪除不再存在的文件。