Sử dụng Rsync để đồng bộ thư mục trên Linux

Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:
    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Access via rsync daemon:
    Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

[OPTION]:

 

 

  • -a, --archive: Nó sẽ kích hoạt chế độ archive, nó copies được các thuộc tính như quyền hạn, thời gian chỉnh sửa, và các loại ngày khác, a đại diện cho -rlptgoD :
    • -r : Đệ quy qua các thư mục (thay vì chỉ hoạt động trên các tệp trong thư mục hiện tại)
    • -l : Sao chép các liên kết tượng trưng dưới dạng liên kết tượng trưng mới
    • -p : Duy trì quyền
    • -t : Bảo tồn thời gian sửa đổi
    • -g : Duy trì quyền sở hữu nhóm
    • -o : Duy trì quyền sở hữu của người dùng (chỉ giới hạn đối với người dùng cấp cao khi xử lý các tệp của người dùng khác)
    • -D : Sao chép tệp thiết bị

Các tùy chọn đáng chú ý khác bao gồm:

  • -n : Chạy lệnh khô mà không cần chuyển tệp
  • --list-only: Chỉ hiển thị danh sách các tệp rsync sẽ chuyển
  • -P : Hiển thị tiến trình trên mỗi tệp
  • -v : Hiển thị tiến độ tổng thể, xuất thông tin về từng tệp khi nó hoàn thành
  • -u : Bỏ qua cập nhật tệp đích nếu chúng mới hơn nguồn
  • -q: Chế độ yên lặng. Hữu ích để đưa vào tập lệnh khi đầu ra đầu cuối không được yêu cầu
  • -c : Sử dụng giá trị tổng kiểm tra để xác định tệp nào cần bỏ qua, thay vì thời gian và kích thước sửa đổi
  • --existing : Chỉ cập nhật tệp, nhưng không tạo tệp mới bị thiếu
  • --files-from=FILE : Đọc tệp nguồn danh sách từ tệp văn bản
  • --exclude=PATTERN : Sử dụng PATTERN để loại trừ các tệp khỏi đồng bộ hóa
  • --exclude-from=FILE : Tương tự như trên, nhưng đọc từ một tệp
  • --include=PATTERN : Cũng được sử dụng để phủ định các quy tắc loại trừ
  • --include-from=FILE : Tương tự như trên, nhưng đọc từ một tệp
  •  
  • -v, --verbose: Lệnh này sẽ giúp hiển thị tiến trình của thao tác.
  • -h, --human-readable format: Kết quả dưới định dạng đọc được.
  • -z, --compress: Lệnh này sẽ nén data trong quá trình truyền.
  • -r : recursive Lệnh này dùng để copy dữ liệu toàn bộ (bao gồm thư mục con).

 

TT Câu lệnh Ý nghĩa
1
rsync [optional modifiers] [SRC] [DEST]
Tổng quát đồng bộ từ nguồn đến đích: Local, Remote, Daemon
 
rsync -r original/ duplicate/
Dấu / đặt sau thư mục original dùng để nói rsync copy nội dung từ thư mục gốc đến thư mục duplicate
 
rsync -r original duplicate/
Copy 2 chiều, những file nằm trong thư mục duplicate mà không có trong thư mục original sẽ được copy ngược lại
 
rsync -av --dry-run  Original/ Duplicate/
—dry-run chỉ hiển thị những file sẽ được copy mà không thực sự copy file
 
rsync -av --delete  original/ duplicate/
Đồng bộ 2 thư mục, nhưng xóa những files bị trùng không có trong thư mục gốc
 
rsync -av --exclude=file1,file2  original/ duplicate/
 loại trừ file hoặc thư mục con nhất định khi đồng bộ
 
rsync -av --include=L* --exclude=*  original/ duplicate/
Đẩy file kèm file bắt đầu với chữ cái L, và loại bỏ những files còn lại
 
rsync -av --max-size=10k original/ duplicate/
xác định kích thước size dùng để đồng bộ
 
rsync -az ~/Desktop/Original edward@192.168.22.90:~/tmp/
sẽ tổng hợp cái files lại và truyền qua mạng
 
rsync -azP [SRC] [DEST]
P là kết hợp giữa –progress và –partial. Nó sẽ tạo ra thanh progress bar cho biết files đang được chuyển đi và cũng cho phép bạn ngắt việc truyền files
 
rsync -a --delete --backup --backup-dir=/path/to/backup
 /path/to/SRC [DEST]
Bạn kết hợp giữa option –backup với –dir để xác định nơi backup được chứa là ở đâu.
  rsync -aruv -e ssh  ./* root@192.168.11.111:/usr/share/httpd/enable Đồng bộ qua đường hầm SSH
     
     
     

 


 

# man rsync

-v, --verbose increase verbosity
--info=FLAGS fine-grained informational verbosity
--debug=FLAGS fine-grained debug verbosity
--msgs2stderr special output handling for debugging
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see caveat)
-c, --checksum skip based on checksum, not mod-time & size
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
--append-verify --append w/old data in file checksum
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
--munge-links munge symlinks to make them safer
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
-E, --executability preserve executability
--chmod=CHMOD affect file and/or directory permissions
-A, --acls preserve ACLs (implies -p)
-X, --xattrs preserve extended attributes
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve modification times
-O, --omit-dir-times omit directories from --times
-J, --omit-link-times omit symlinks from --times
--super receiver attempts super-user activities
--fake-super store/recover privileged attrs using xattrs
-S, --sparse turn sequences of nulls into sparse blocks
--preallocate allocate dest files before writing
-n, --dry-run perform a trial run with no changes made
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
--checksum-choice=STR choose the checksum algorithms
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before xfer, not during
--delete-during receiver deletes during the transfer
--delete-delay find deletions during, delete after
--delete-after receiver deletes after transfer, not during
--delete-excluded also delete excluded files from dest dirs
--ignore-missing-args ignore missing source args without error
--delete-missing-args delete missing source args from destination
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
--groupmap=STRING custom groupname mapping
--chown=USER:GROUP simple username/groupname mapping
--timeout=SECONDS set I/O timeout in seconds
--contimeout=SECONDS set daemon connection timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
-@, --modify-window=NUM set the accuracy for mod-time comparisons
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
-C, --cvs-exclude auto-ignore files in the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
  repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *from/filter files are delimited by 0s
-s, --protect-args no space-splitting; wildcard chars only
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--outbuf=N|L|B set out buffering to None, Line, or Block
--stats give some file-transfer stats
-8, --8-bit-output leave high-bit chars unescaped in output
-h, --human-readable output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
-M, --remote-option=OPTION send OPTION to the remote side only
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read daemon-access password from FILE
--list-only list the files instead of copying them
--bwlimit=RATE limit socket I/O bandwidth
--stop-at=y-m-dTh:m Stop rsync at year-month-dayThour:minute
--time-limit=MINS Stop rsync after MINS minutes have elapsed
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
--noatime do not alter atime when opening source files
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
-h)--help show this help (see below for -h comment)
--protocol=NUM force an older protocol version to be used
--iconv=CONVERT_SPEC request charset conversion of filenames
--checksum-seed=NUM set block/file checksum seed (advanced)
--noatime do not alter atime when opening source files
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
-h)--help show this help (see below for -h comment)
synccanalsoberunasada emon, in which case the following options are
ccepted: run as an rsync daemon
--daemon bind to the specified address
--address=ADDRESS limit socket I/O bandwidth
--bwlimit=RATE specify alternate rsyncd.conf file
--config=FILE override global daemon config parameter
-M, --dparam=OVERRIDE do not detach from the parent
--no-detach listen on alternate port number
--port=PORT override the "log file" setting
--log-file=FILE override the "log format" setting
--log-file-format=FMT specify custom TCP options
--sockopts=OPTIONS increase verbosity
-v, --verbose prefer IPv4
-4, --ipv4 prefer IPv6
-6, --ipv6 show this help (if used after --daemon)
-h, --help  

 


Here's how I verify backups to ensure that they're working on my systems:

  • Create a restore_test.txt file for each system buried deep in the filesystem.
  • Create a script to scrape the backup logs for your restore_test.txt file.
  • Select a random system once per week and restore the restore_test.txt file.
  • Create a backup_restore_log.txt file and log your weekly progress.
  • Prepare to share the backup_restore_log.txt file with your manager in case of a failure, disaster, accident, or neglect.