rsync (remote sync) is a utility for file transfer and synchronizing computer file between a computer and a storage drive and across computer network by comparing the modification times and sizes of files. It is commonly found on Unix-like and is under the GPL-3.0-or-later license.Rasch, David; Burns, Randal; In-Place Rsync: File Synchronization for Mobile and Wireless Devices , Department of Computer Science, Johns Hopkins University
rsync is written in C as a single-threaded application. The rsync algorithm is a type of delta encoding, and is used for minimizing network usage. zstd, LZ4, or Zlib may be used for additional data compression, and Secure Shell or stunnel can be used for security.
rsync is typically used for synchronizing files and directories between two different systems. For example, if the command rsync local-file user@remote-host:remote-file is run, rsync will use SSH to connect as user to remote-host. Once connected, it will invoke the remote host's rsync and then the two programs will determine what parts of the local file need to be transferred so that the remote file matches the local one. One application of rsync is the synchronization of software repositories on Mirror site used by Package manager.
rsync can also operate in a daemon mode (rsyncd), serving and receiving files in the native rsync protocol (using the rsync:// syntax).
Because of its flexibility, speed, and scriptability, rsync has become a standard Linux utility, included in all popular Linux distributions. It has been ported to Windows (via Cygwin, Grsync, or SFU), FreeBSD, NetBSD, OpenBSD, and macOS.
Generic syntax:
where is the file or directory (or a list of multiple files and directories) to copy from, is the file or directory to copy to, and square brackets indicate optional parameters.
rsync can synchronize Unix clients to a central Unix server using rsync/ssh and standard Unix accounts. It can be used in desktop environments, for example to efficiently synchronize files with a backup copy on an external hard drive. A scheduling utility such as [[cron]] can carry out tasks such as automated encrypted rsync-based mirroring between multiple hosts and a central server.
The Apache HTTP Server supports rsync only for updating mirrors.
The preferred (and simplest) way to mirror a PuTTY website to the current directory is to use rsync.
A way to mimic the capabilities of Time Machine (macOS);
Delete all files and directories, within a directory, extremely fast:
$ rsync -a --delete /path/to/empty/dir /path/to/dir/to/empty
Rsync has numerous command line options and configuration files to specify alternative shells, options, commands, possibly with full path, and port numbers. Besides using remote shells, tunnelling can be used to have remote ports appear as local on the server where an rsync daemon runs. Those possibilities allow adjusting security levels to the state of the art, while a naive rsync daemon can be enough for a local network.
One solution is the --dry-run option, which allows users to validate their command-line arguments and to simulate what would happen when copying the data without actually making any changes or transferring any data.
Rsync performs a slower but comprehensive check if invoked with --checksum. This forces a full checksum comparison on every file present on both systems. Barring rare hash collision, this avoids the risk of missing changed files at the cost of reading every file present on both systems.
The recipient splits its copy of the file into chunks and computes two for each chunk: the MD5 hash function, and a weaker but easier to compute 'Rolling hash'. It sends these checksums to the sender.
The sender computes the checksum for each rolling section in its version of the file having the same size as the chunks used by the recipient's. While the recipient calculates the checksum only for chunks starting at full multiples of the chunk size, the sender calculates the checksum for all sections starting at any address. If any such rolling checksum calculated by the sender matches a checksum calculated by the recipient, then this section is a candidate for not transmitting the content of the section, but only the location in the recipient's file instead. In this case, the sender uses the more computationally expensive MD5 hash to verify that the sender's section and recipient's chunk are equal. Note that the section in the sender may not be at the same start address as the chunk at the recipient. This allows efficient transmission of files which differ by insertions and deletions. The sender then sends the recipient those parts of its file that did not match, along with information on where to merge existing blocks into the recipient's version. This makes the copies identical.
The rolling hash used in rsync is based on Mark Adler's adler-32 checksum, which is used in zlib, and is itself based on Fletcher's checksum.
If the sender's and recipient's versions of the file have many sections in common, the utility needs to transfer relatively little data to synchronize the files. If typical data compression algorithms are used, files that are similar when uncompressed may be very different when compressed, and thus the entire file will need to be transferred. Some compression programs, such as gzip, provide a special "rsyncable" mode which allows these files to be efficiently rsynced, by ensuring that local changes in the uncompressed file yield only local changes in the compressed file.
Rsync supports other key features that aid significantly in data transfers or backup. They include compression and decompression of data block by block using zstd, LZ4, or zlib, and support for protocols such as Secure Shell and stunnel.
The rdiff-backup script maintains a backup mirror of a file or directory either locally or remotely over the network on another server. rdiff-backup stores incremental rdiff deltas with the backup, with which it is possible to recreate any backup point.[[Category:2 = rdiff-backup
Official website]]
The librsync library used by rdiff is an independent implementation of the rsync algorithm. It does not use the rsync network protocol and does not share any code with the rsync application.Pool, Martin; "librsync" It is used by Dropbox, rdiff-backup, duplicity, and other utilities.
The acrosync library is an independent, cross-platform implementation of the rsync network protocol. Unlike librsync, it is wire-compatible with rsync (protocol version 29 or 30). It is released under the Reciprocal Public License and used by the commercial rsync software Acrosync.
The duplicity backup software written in python allows for incremental backups with simple storage backend services like local file system, sftp, Amazon S3 and many others. It utilizes librsync to generate delta data against signatures of the previous file versions, encrypting them using gpg, and storing them on the backend. For performance reasons a local archive-dir is used to cache backup chain signatures, but can be re-downloaded from the backend if needed.
As of macOS 10.5 and later, there is a special -E or --extended-attributes switch which allows retaining much of the HFS Plus file metadata when syncing between two machines supporting this feature. This is achieved by transmitting the Resource Fork along with the Data Fork.
zsync is an rsync-like tool optimized for many downloads per file version. zsync is used by Linux distributions such as Ubuntu for distributing fast changing beta ISO image files. zsync uses the HTTP protocol and .zsync files with pre-calculated rolling hash to minimize server load yet permit diff transfer for network optimization. zsync web site
Rclone is an open-source tool inspired by rsync that focuses on cloud and other high latency storage. It supports more than 50 different providers and provides an rsync-like interface for cloud storage. However, Rclone does not support rolling checksums for partial file syncing (binary diffs) because cloud storage providers do not usually offer the feature and Rclone avoids storing additional metadata.
| Direct mirror or with history, VSS. | |
| Based on Cygwin. | |
| Graphical Interface for rsync. | |
| Inspired by rsync and supports more than 50 cloud storage providers and other high latency storage services. Does not actually use rsync or support rolling checksums and partial file synchronization. | |
| Time rsYnc Machine – backup à la Time Machine – Bash script | |
| Incremental backup script using rsync and hard links to keep full snapshots locally or remotely via ssh. Space and bandwidth are preserved because only modifications are transmitted and stored. It provides a compromise between speed, size, ease of restore and redundancy. |
|
|