Meanwhile I have worked out any issues and have a solution which works for me since a few weeks. In case anybody is interested I am posting the details here. This article by Troy Johnson has helped along the way.
Prerequisites
- Truecrypt installed on Linux and available on the path
- a TC container prepared and available at
/home/deepc/var/backup.tc
- cygwin and rsync installed on Windows and available on the path
Linux
I made two shell scripts to mount and unmount the Truecrypt container on the Linux box. Those scripts are being called remotely via ssh from the Windows machine:
~/bin/backup-mount.sh:
#!/bin/bash
# usage: backup-mount.sh <password>
~deepc/bin/backup-umount.sh
echo "$1" | sudo truecrypt -t --slot=2 -k "" --volume-type=normal --protect-hidden=no /home/deepc/var/backup.tc /home/deepc/mnt
~/bin/backup-umount.sh:
#!/bin/sh
sudo truecrypt -d /home/deepc/var/backup.tc
Windows
remote-backup.cmd:
@echo off
setlocal
set HOME=c:\home
set LC_ALL=de_DE.utf-8
set LC_CTYPE=de_DE.utf-8
set LANG=de_DE.utf-8
rem --iconv=utf-16,iso-88591
ssh -p THESSHPORT -i ../.ssh/id_dsa deepc@theremotehost.com bin/backup-mount.sh THEPASSWORD
rsync -rltvzPm --modify-window=1 --exclude-from=../etc/backup/excludes.txt --chmod=ugo=rwX --delete --delete-excluded --files-from=../etc/backup/files-from.txt -e "ssh -p THESSHPORT -i ../.ssh/id_dsa" --log-file=../tmp/remote-backup.log /cygdrive deepc@theremotehost.com:/home/deepc/mnt
ssh -p THESSHPORT -i ../.ssh/id_dsa deepc@theremotehost.com bin/backup-umount.sh
Put this batch file into the task scheduler, e.g. with a daily schedule. Be sure to adjust username, remote host, ssh port, Truecrypt container password, and of course the backup paths. Sorry but I could not bring myself to clean this up more after having wasted too much time already...
With this script Rsync will read includes and excludes from two text files, e.g.:
files-from.txt:
/c/Home/
/c/Users/deepc
...
excludes.txt:
Firefox/Cache
Firefox/*.lock
Thunderbird/*.lock
Thunderbird/**/*Junk*
Thunderbird/**/filterlog.html
Thunderbird/**/*.msf
Home/tmp
...
Done?
This is answers the original question. There is only one minor issue: special characters in filenames on Windows are mangled on Linux, with ext2 being used in the TC container on Linux. I tried all combinations for the --iconv
parameter I could think of but to no avail. Seems I have to live with that - unless some brave soul has read until here, knows the answer, and enlightens me in a comment ;-) (NTFS in the container is not an option)
rsync --ignore-errors
seems to do the trick, so far. I didn't expect it to work because the manual says:
--ignore-errors
Tells --delete to go ahead and delete files even when there are I/O errors.
where I didn't use --delete
option at all.
Best Answer
If you kill rsync with Ctrl+C it does stop it mid transfer but it will not keep any temporary files there unless running with the
--partial
option.For those also interested in just pausing rsync, if you press Ctrl+Z it pauses the program. When you resume it by running
fg
orbg
rsync will reiterate over the file that it didn't finish and continue downloading the rest of the files. To see all currently paused programs runjobs
About --inplace
The problem with --inplace is that it does not create a new file when updating data, it just writes to the existing one. If you press ctrl + c while running with --inplace and it is updating an existing file it will leave a half finished file without removing it. Also if you are syncing only new files and not updating existing ones then when you cut off a transfer (with ctrl + c) it will leave a half finished file that it won't remove. Just a note I would not recommend --inplace for OS files. You can really jack up some things (because they change frequently)