Rsync
Contingut
- 1 RSync
- 1.1 Script to only run rsync if $DEST responds
- 1.2 Force Rsync to only one folder
- 1.3 To avoid copying owner/group and permissions from a NTFS
- 1.4 To show stats at the end
- 1.5 Give a nice overall percentage
- 1.6 Using paths that contain spaces
- 1.7 See if a file is tranferred what differs
- 1.8 Compare files by content
- 1.9 To copy only the timestamps
- 1.10 Rsync to an untrusted location - encfs reverse
- 1.11 For files that grow/appended --append-verify
RSync
-a Archive. Mainly propogate file permissions, ownership, timestamp, etc. -v Verbose -vv More verbose. -vvv Even more verbose. -e ssh: Specify the remote shell as ssh --numeric-ids: Tells rsync to not map user and group id numbers local user and group names --delete: Makes server copy an exact copy of the source by removing any files that have been removed on the remote machine -n Don't do any copying, but display what rsync *would* copy. For testing. -u Update. Don't copy file if file on destination is newer. -z Comprimeix
rsync -avz -e "ssh -p23" /media/a/_PORTABLE/prog cube.aluzina.org:/var/www/carpeta.espai.de/htdocs/portable/_PORTABLE_UTIL/prog
rsync --delete -avz -e 'ssh -p 222' /usr/portage [email protected]:/usr/portage
Per copiar un sistema sencer:
rsync -axHv --delete-after / [email protected]:/home/test -x, --one-file-system don't cross filesystem boundaries -H, --hard-links preserve hard links
Per copiar un fitxer gran (ensenyar % i si es para continuar):
rsync -avr --partial --progress ...
equivalent a:
rsync -avrP ...
Script to only run rsync if $DEST responds
Més info a http://www.scrounge.org/linux/rsync.html
# Only run rsync if $DEST responds. VAR=`ping -s 1 -c 1 $DEST > /dev/null; echo $?` if [ $VAR -eq 0 ]; then rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR else echo "Cannot connect to $DEST." fi
Force Rsync to only one folder
mkdir ~/bin/ gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > ~/bin/rrsync chmod +x ~/bin/rrsync
.ssh/authorized_keys
command="$HOME/bin/rrsync /only/path/authorized/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAbCR623vGj976Eqz82SqECOqTP5TqAXVGUymmdyuzb4PW1TWZrb9sasQdUUBJGa4l6Pnb8UyDvPexrL2hIUudrHAIz1alWWQEKgK6ivgDZSUihzBGsRBKyrlfkeJz user@host
More info: https://www.whatsdoom.com/posts/2017/11/07/restricting-rsync-access-with-ssh/
More info: https://www.guyrutenberg.com/2014/01/14/restricting-ssh-access-to-rsync/
Easier method
Copy script from: https://ftp.samba.org/pub/unpacked/rsync/support/rrsync
vi /usr/bin/rrsync chmod +x /usr/bin/rrsync
.ssh/authorized_keys
command="/usr/bin/rrsync /only/path/authorized/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAbCR623vGj976Eqz82SqECOqTP5TqAXVGUymmdyuzb4PW1TWZrb9sasQdUUBJGa4l6Pnb8UyDvPexrL2hIUudrHAIz1alWWQEKgK6ivgDZSUihzBGsRBKyrlfkeJz user@host
To avoid copying owner/group and permissions from a NTFS
rsync -a --no-o --no-g --no-p --delete -v --log-file=/tmp/rsync2.txt --stats --modify-window=2 --exclude ".encfs6.xml" --exclude "/\$RECYCLE.BIN" --exclude "/System Volume Information" /media/marti/W2000/ /media/W3000LUKS_ENC/
To show stats at the end
--stats
Give a nice overall percentage
--info=progress2
Using paths that contain spaces
-s, --protect-args
This option sends all filenames and most options to the remote rsync without allowing the remote shell to interpret them. This means that spaces are not split in names, and any non-wildcard special characters are not translated (such as ~, $, ;, &, etc.). Wildcards are expanded on the remote host by rsync (instead of the shell doing it). [...]
The alternative is to escape twice (using ' and \ ) the parameters.
http://askubuntu.com/questions/597605/rsync-over-ssh-path-with-spaces-does-not-work-with-quotes
See if a file is tranferred what differs
-i --itemize-changes (also in the -vvv) YXcstpoguax path/to/file ||||||||||| ||||||||||╰- x: The extended attribute information changed |||||||||╰-- a: The ACL information changed ||||||||╰--- u: The u slot is reserved for future use |||||||╰---- g: Group is different ||||||╰----- o: Owner is different |||||╰------ p: Permission are different ||||╰------- t: Modification time is different |||╰-------- s: Size is different ||╰--------- c: Different checksum (for regular files), or || changed value (for symlinks, devices, and special files) |╰---------- the file type: | f: for a file, | d: for a directory, | L: for a symlink, | D: for a device, | S: for a special file (e.g. named sockets and fifos) ╰----------- the type of update being done:: <: file is being transferred to the remote host (sent) >: file is being transferred to the local host (received) c: local change/creation for the item, such as: - the creation of a directory - the changing of a symlink, - etc. h: the item is a hard link to another item (requires --hard-links). .: the item is not being updated (though it might have attributes that are being modified) *: means that the rest of the itemized-output area contains a message (e.g. "deleting") >f+++++++++ some/dir/new-file.txt .f....og..x some/dir/existing-file-with-changed-owner-and-group.txt .f........x some/dir/existing-file-with-changed-unnamed-attribute.txt >f...p....x some/dir/existing-file-with-changed-permissions.txt >f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt >f.s......x some/dir/existing-file-with-changed-size.txt >f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt cd+++++++++ some/dir/new-directory/ .d....og... some/dir/existing-directory-with-changed-owner-and-group/ .d..t...... some/dir/existing-directory-with-different-time-stamp/
http://stackoverflow.com/questions/4493525/rsync-what-means-the-f-on-rsync-logs
Compare files by content
-c
By default rsync compares only size and mtime of the file. -c is slow but it ensures that the content is correct
To copy only the timestamps
--size-only --existing
--size-only forces rsync to compare using only the size (not also the time)
Without the --size-only, rsync will detect them as diferent files and transfer the file
To copy only the timestamps (slow)
-c --existing
-c forces rsync to compare files using checksums
Rsync to an untrusted location - encfs reverse
in case you have an encrypted zfs unit import it with the -l to ask for the passphrase
zpool import Y5000LUKSB_zfs -l
mount reverse encfs:
ENCFS6_CONFIG=/media/encfs6.xml encfs --reverse /media/TEST5000LUKSB_zfs/enc /media/enc1/ rsync -avi --stats --inplace --progress /media/enc1/ /media/TEST5000LUKSB_zfs/enc2/
For files that grow/appended --append-verify
--append-verify isn't dangerous: It will always read and compare the data on both ends and not just assume they're equal. It does this using checksums, so it's easy on the network, but it does require reading the shared amount of data on both ends of the wire before it can actually resume the transfer by appending to the target.
More info: https://unix.stackexchange.com/questions/48298/can-rsync-resume-after-being-interrupted