ich suche nach einer Möglichkeit, zwei Festplatten synchron zu halten. Mit rsync klappt das überhaupt nicht, weil beim Lesen der Daten auf der Backup-Platte oft die Rechte fehlen. Es läuft wohl intern als Benutzer nobody.
Die Platten befinden sich im selben System. Die System-Platte als /dev/sda, die Backup Platte als /dev/sdb, angeschlossen am USB-/eSATA-Port.
Gibt es eine Möglichkeit, die ACLs zu erhalten und trotzdem Daten updaten zu können? Momentan lösche ich die Backup-Platte und führe dann erst rsync aus.
Last edited by mad cow on 2006-12-23 20:00, edited 2 times in total.
dann lass doch rsync als root laufen, was anders bleibt dir eh nicht übrig wenn du alle Dateien sichern willst, denn wer ausser root darf die dateien von root lesen.
theomega wrote:dann lass doch rsync als root laufen, was anders bleibt dir eh nicht übrig wenn du alle Dateien sichern willst, denn wer ausser root darf die dateien von root lesen.
Genau das tue ich auch. Nutzt aber nichts.
Ich überlege gerade, ob ich eine Alternative aus find, grep -s -v und cp -au baue. Rsync hat auf jeden Fall eine ordentliche Macke, was das Updaten angeht.
Ein Software-Raid habe ich eigentlich nicht vor, weil die zweite Platte nicht permanent läuft. Zumindest ist das bis jetzt nicht geplant.
Die Synchronisation findet nur aus einem Grund statt: Wenn die Systemplatte stirbt, soll sie einfach durch die Backup-Platte erstetzt werden. Ein interner und ein externer Wechselrahmen sind bereits vorhanden. Die Platten sitzen seit heute auch in den Rahmen.
Schließt man das externe Gehäuse über SATA an, gibt es Ärger. Über USB läuft es fehlerfrei. Mich würde nur noch interessieren, ob es an den Kernel-Treibern (2.6.18, Debian Etch), Rsync oder der Hardware liegt. Aber wenigstens läuft es jetzt.
#!/bin/bash
# Vorbereitungen:
# Die Backup-Festplatte muss zuerst partitioniert werden. Dabei darf
# die Swap-Partition nicht vergessen werden. Danach wird auf jeder
# Partition ein Dateisystem angelegt. Dann werden auf der /-Partition
# alle Ordner erzeugt, die notwendig sind, um alle anderen Partitionen
# mounten zu koennen. Hier sollten die Permissions angepasst werden.
# Wichtig: Gegebenenfalls die /etc/fstab anpassen, damit die
# Backup-Platte lauffaehig ist. Zudem muss noch der Bootloader Grub in
# den MBR geschrieben werden. Dieser muss in der /boot/grub/menu.lst
# richtig konfiguriert sein. Dies alles nur auf der Backup-Platte
# aendern!
# ### nach Fehler aufraeumen
exit_failed() {
touch $FAIL_STAMP
sync
umount /dev/sdb5 /dev/sdb6 /dev/sdb8 /dev/sdb9 /dev/sdb1
if [ $? -ne 0 ] && [ "$MOUNT" == "okay" ]; then
echo "FATAL ERROR: Couldn't even unmount partitions."
>> $BACKUP_REPORT
else
rm -rf $BACKUP_FOLDER
fi
cat $BACKUP_REPORT | mail -s "daily backup failed (`date +%F`)" root
rm -f $BACKUP_REPORT
rm -f $EXCLUDE_FILE
exit 1
}
BACKUP_FOLDER=/tmp/backup-`date +%F`
BACKUP_REPORT=/tmp/backupreport
EXCLUDE_FILE=/tmp/rsync-excludes
FAIL_STAMP=/root/backupfailed
mkdir -p $BACKUP_FOLDER
# ### diese Dateien und Ordner werden weggelassen
EXCLUDE=(home/shares/* tmp/* proc/* sys/* media/*/* lost+found/*)
for I in ${EXCLUDE[*]}; do
echo $I >> $EXCLUDE_FILE
done
# ### lief das Skript letztes Mal durch?
echo -n "Starting backup: " >> $BACKUP_REPORT
if [ ! -e $FAIL_STAMP ]; then
echo "done" >> $BACKUP_REPORT
else
echo "failed" >> $BACKUP_REPORT
echo "FATAL ERROR: Backup failed again. Remove $FAIL_STAMP first."
>> $BACKUP_REPORT
exit_failed
fi
# ### Platte mounten
echo -n "Mounting partitions: " >> $BACKUP_REPORT
MOUNT=okay
mount -t ext3 /dev/sdb1 $BACKUP_FOLDER
if [ $? -ne 0 ]; then
MOUNT=failed
fi
mount -t ext3 /dev/sdb5 $BACKUP_FOLDER/usr
if [ $? -ne 0 ]; then
MOUNT=failed
fi
mount -t ext3 /dev/sdb6 $BACKUP_FOLDER/var
if [ $? -ne 0 ]; then
MOUNT=failed
fi
mount -t ext3 /dev/sdb8 $BACKUP_FOLDER/tmp
if [ $? -ne 0 ]; then
MOUNT=failed
fi
mount -t ext3 /dev/sdb9 $BACKUP_FOLDER/home
if [ $? != 0 ]; then
MOUNT=failed
fi
if [ "$MOUNT" == "okay" ]; then
echo "done" >> $BACKUP_REPORT
else
echo "failed" >> $BACKUP_REPORT
exit_failed
fi
# ### Daten synchronisieren
echo -n "Synchronizing data: " >> $BACKUP_REPORT
rsync -nau --delete --exclude-from=$EXCLUDE_FILE / $BACKUP_FOLDER/
if [ $? -eq 0 -o $? -eq 24 ]; then
rsync -au --delete --exclude-from=$EXCLUDE_FILE / $BACKUP_FOLDER/
if [ $? -eq 0 -o $? -eq 24 ]; then
echo "done" >> $BACKUP_REPORT
else
echo "failed" >> $BACKUP_REPORT
echo "FATAL ERROR: Backup failed during synchronization."
>> $BACKUP_REPORT
exit_failed
fi
else
echo "failed" >> $BACKUP_REPORT
exit_failed
fi
# ### Platte unmounten
echo -n "Unmounting partitions: " >> $BACKUP_REPORT
sync
umount /dev/sdb5 /dev/sdb6 /dev/sdb8 /dev/sdb9 /dev/sdb1
if [ $? -eq 0 ]; then
echo "done" >> $BACKUP_REPORT
else
echo "failed" >> $BACKUP_REPORT
exit_failed
fi
# ### aufraeumen
rm -rf $BACKUP_FOLDER
cat $BACKUP_REPORT | mail -s "daily backup report (`date +%F`)" root
rm -f $BACKUP_REPORT
rm -f $EXCLUDE_FILE
exit 0
Last edited by mad cow on 2006-12-23 19:58, edited 1 time in total.
BTW: In Scripten sollte man auf Sonderzeichen (Umlaute, ß, etc...) möglichst verzichten, auch in den Kommentaren. (Hint: Unterschiedliche Zeichensätze)
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Eigentlich waren die mal Englisch. Nur soll ich auf andere Rücksicht nehmen. :roll:
Alle Systeme, die ich aufsetze, bekommen eigentlich immer als Zeichensatz UTF-8. Daher gibt es keine Probleme. Ich kann sie aber auch ändern, ist eigentlich keine schlechte Idee. (ä -> ae)