Ich führe ein Backup-Skript aus einer Udev-Regel aus. Das Skript mountet und kopiert Daten mithilfe von rsync auf ein neu angeschlossenes USB-Laufwerk.
# Mounting stuff
MOUNTPOINT=/media/backup
export OUTPUT=/tmp/rsync-output.log
# -a does not work on exFAT partitions, because of permissions, groups, owner. Use -rltD instead of -rlptgoD, which -a would imply.
rsync -rltDv --exclude '*.app' --exclude-from=/home/gauthier/rsync-exclude.txt /home/gauthier/ $MOUNTPOINT/gauthier/ > $OUTPUT 2>&1
touch /home/gauthier/tmp/I_came_here
rsync
startet, wie gezeigt durch /tmp/rsync-output.log
:
gauthier@ionian:~/tmp $ tail /tmp/rsync-output.log
rsync: symlink "/media/backup/gauthier/code/wine64/loader/wine" -> "/home/sandbox/wine3264/loader/wine" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/loader/wine-preloader" -> "/home/sandbox/wine3264/loader/wine-preloader" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/po/LINGUAS" -> "../../wine/po/LINGUAS" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/l_intl.nls" -> "../../wine/tools/l_intl.nls" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/winegcc/winecpp" -> "winegcc" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/winegcc/wineg++" -> "winegcc" failed: Function not implemented (38)
sent 30,239,649,237 bytes received 237,923 bytes 18,123,995.90 bytes/sec
total size is 206,189,220,918 speedup is 6.82
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]
aber die Datei /home/gauthier/tmp/I_came_here
, die von erstellt werden sollte, touch
ist nicht da. Nach dem kommt noch anderes Zeug touch
, das anscheinend auch nicht ausgeführt wird.
rsync
Es soll trotz der Fehler nicht zurückgegeben werden? Was könnte dazu führen, dass es nicht zurückgegeben wird?
Ich habe versucht, das Skript über die Bash-Eingabeaufforderung auszuführen (anstatt es über die Udev-Regel ausführen zu lassen), und dann scheint es durchzugehen und danach fortzufahren rsync
.
Vollständiges Skript:
#!/bin/bash
#export DISPLAY=:0
export XAUTHORITY=~/.Xauthority
xmessage -buttons abort -default abort -center -timeout 10 "Starting backup. Press enter to abort."
ANSWER=$?
if [ $ANSWER -eq 101 ] ; then
xmessage -timeout 3 "Aborted!"
exit
fi
if [[ ! -L /dev/backup_external_hd ]] ; then
xmessage "External disk not present at /dev/backup_external_hd, aborting backup."
exit
fi
MOUNTPOINT=/media/backup
sudo mkdir -p $MOUNTPOINT
sudo mount /dev/backup_external_hd $MOUNTPOINT
if ! grep "$MOUNTPOINT" /proc/mounts ; then
xmessage "Failed to mount $MOUNTPOINT!"
rmdir $MOUNTPOINT
exit
fi
export OUTPUT=/tmp/rsync-output.log
# -a does not work on exFAT partitions, because of permissions, groups, owner. Use -rltD instead of -rlptgoD, which -a would imply.
rsync -rltDv --exclude '*.app' --exclude-from=/home/gauthier/rsync-exclude.txt /home/gauthier/ $MOUNTPOINT/gauthier/ > $OUTPUT 2>&1
touch /home/gauthier/tmp/I_came_here
xmessage "AAAAyyye"
# Pop up a result window
# Get a summary
export RESULT_MESSAGE=/tmp/rsync-result.txt
echo "Backup result:" > $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE # \n does not seem to work in echo strings
tail -3 $OUTPUT >> $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE
echo "Details in $OUTPUT" >> $RESULT_MESSAGE
xmessage -file $RESULT_MESSAGE
# Apparently unmounting too fast after writing could be a problem.
sleep 1
sudo umount $MOUNTPOINT
if grep "$MOUNTPOINT" /proc/mounts ; then
xmessage "Could not unmount $MOUNTPOINT."
exit
fi
sudo rmdir $MOUNTPOINT