Zwei Festplatten synchron halten [gelöst]

Backup, Restore und Transfer von Daten
mad cow
Posts: 33
Joined: 2006-11-23 22:57
Location: Heidelberg (Baden)
 

Zwei Festplatten synchron halten [gelöst]

Post by mad cow »

Hallo,

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. :cry:
Last edited by mad cow on 2006-12-23 20:00, edited 2 times in total.
theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by theomega »

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.
aubergine
Posts: 471
Joined: 2005-09-10 17:52
Location: Frankfurt am Main
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by aubergine »

Software Raid mit => mdadm
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by Roger Wilco »

Alternativ zu einem Software-RAID1 vielleicht auch das Mirror-Target von LVM2.
mad cow
Posts: 33
Joined: 2006-11-23 22:57
Location: Heidelberg (Baden)
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by mad cow »

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.

So sehen die Fehler aus:

Code: Select all

rsync: readdir("/mnt/backup-2006-12-17/root/.aptitude"): Permission denied (13)
rsync: readdir("/mnt/backup-2006-12-17/root/.ssh"): Permission denied (13)
rsync: readdir("/mnt/backup-2006-12-17/dev/.static"): Permission denied (13)
Die 13er Fehler sind die, die große Schwierigkeiten bereiten.
aubergine
Posts: 471
Joined: 2005-09-10 17:52
Location: Frankfurt am Main
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by aubergine »

Du bist resistent gegen Beiträge hier oder wie?
mad cow
Posts: 33
Joined: 2006-11-23 22:57
Location: Heidelberg (Baden)
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by mad cow »

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.

Was nicht tut, ist das:

Code: Select all

rsync -au --delete --exclude-from=$EXCLUDE_FILE / $BACKUP_FOLDER/
Der Grund dafür ist, dass rsync auf der Backup-Platte die Rechte zum Lesen fehlen. Aus welchem Grund auch immer.
mad cow
Posts: 33
Joined: 2006-11-23 22:57
Location: Heidelberg (Baden)
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by mad cow »

Das Problem ist gelöst. :-D

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.

Hier das fertige Skript:

Code: Select all

#!/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.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11183
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by Joe User »

BTW: In Scripten sollte man auf Sonderzeichen (Umlaute, ß, etc...) möglichst verzichten, auch in den Kommentaren. (Hint: Unterschiedliche Zeichensätze)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„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.
mad cow
Posts: 33
Joined: 2006-11-23 22:57
Location: Heidelberg (Baden)
 

Re: Zwei Festplatten synchron halten [gelöst]

Post by mad cow »

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)

EDIT: ist erledigt