rsync is a free software computer program for Unix and Linux like systems which synchronizes files and directories from one location to another while minimizing data transfer using delta encoding when appropriate.
Install rsync
For ubuntu or debian
# apt-get install rsync
For RHEL/CentOS 4.x or older
# up2date rsync
For RHEL/CentOS 5.x or newer or Fedora
# yum install rsync
** Always use rsync over ssh because rsync does not provide any security while transferring data.
rsync over ssh (with password)
rsync -avz -e ssh /home/user/ [email protected]:/backup/user/
To use a different ssh port, e.g., 123:
rsync -avz -e 'ssh -p 123' /home/user/ [email protected]:/backup/user/
The terminal will prompt for password before proceed.
To rsync without prompting for password, we can generate a ssh public key and add it to backup server’s ssh authorized keys. Below are the steps.
Assuming the file server is ServerA and backup server is ServerB
Genarate the public key in ServerA
$ ssh-keygen $ Enter passphrase (empty for no passphrase): $ Enter same passphrase again:
The public key will be generated and stored in
~/.ssh/id_rsa.pub
Copy public key to remote host
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100
Or
Open id_rsa.pub, copy the content
Login to ServerB using the same user in the rsync command
In ServerB, append the contents to ~/.ssh/authorized_keys. Create the file if not exist. Make sure the file mode is 700.
rsync command options
-r, –recursive recurse into directories
-R, –relative use relative path names
–exclude=PATTERN Exclude files matching PATTERN
–exclude-from=FILE Read exclude patterns from FILE
-I, –ignore-times Don’t exclude files that match length and time
–size-only only use file size when determining if a file should be transferred
–modify-window=NUM Timestamp window (seconds) for file match (default=0)
–include=PATTERN Don’t exclude files matching PATTERN
–include-from=FILE Read include patterns from FILEHow to copy it:
-n, –dry-run Perform a trial run with no changes made
-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 links outside the destination tree
-H, –hard-links Preserve hard links
-D, –devices Preserve devices (super-user only)
-g, –group Preserve group
-o, –owner Preserve owner (super-user only)
-p, –perms Preserve permissions
-t, –times Preserve times
-S, –sparse Handle sparse files efficiently
-x, –one-file-system Don’t cross filesystem boundaries
-B, –block-size=SIZE Force a fixed checksum block-size (default 700)
-e, –rsh=COMMAND Specify rsh replacement
–rsync-path=PATH Specify path to rsync on the remote machine
–numeric-ids Don’t map uid/gid values by user/group name
–timeout=TIME Set IO timeout in seconds
-W, –whole-file Copy whole files, no incremental checksDestination options:
-a, –archive Archive mode
-b, –backup Make backups (see –suffix & –backup-dir)
–backup-dir=DIR Make backups into this directory
–suffix=SUFFIX Override backup suffix
-z, –compress Compress file data during the transfer
-c, –checksum Skip based on checksum, not mod-time & size
-C, –cvs-exclude Auto ignore files in the same way CVS does
–existing Only update files that already exist
–delete Delete files that don’t exist on the sending side
–delete-excluded also delete excluded files on the receiving side
–delete-after Receiver deletes after transfer, not during
–force Force deletion of directories even if not empty
–ignore-errors Delete even if there are IO errors
–max-delete=NUM Don’t delete more than NUM files
–log-format=FORMAT Log file transfers using specified format
–partial Keep partially transferred files
–progress Show progress during transfer
-P equivalent to –partial –progress
–stats Give some file transfer stats
-T –temp-dir=DIR Create temporary files in directory DIR
–compare-dest=DIR also compare destination files relative to DIR
-u, –update update only (don’t overwrite newer files)Misc Others:
–address=ADDRESS bind to the specified address
–blocking-io Use blocking IO for the remote shell
–bwlimit=KBPS Limit I/O bandwidth, KBytes per second
–config=FILE Specify alternate rsyncd.conf file
–daemon Run as a rsync daemon
–no-detach Do not detach from the parent
–password-file=FILE Get password from FILE
–port=PORT Specify alternate rsyncd port number
-f, –read-batch=FILE Read batch file
-F, –write-batch Write batch file
–version Print version number
-v, –verbose Increase verbosity
-q, –quiet Decrease verbosity
-4, –ipv4 Prefer IPv4
-6, –ipv6 Prefer IPv6
-h, –help show this help screen