[linux] Re: Mirror data naar een andere disk

Johan Swenker Johan.Swenker op xs4all.nl
Za Dec 3 11:35:16 CET 2005


Erik van der Meulen wrote:
> Beste allemaal -
> 
> Ik heb een behoorlijk grote hoeveelheid (kostbare) data op een Windows
> machine. Nu heb een ik extra schijf in mijn server (Debian 3.1)
> geplaatst en wil een een actuele copie bijhounden van mijn data.
> Veranderingen vinden alleen plaats op de Win kant en deze moeten (liefst
> automatisch) worden doorgevoerd op de server.
> 
> Ik heb mijn data op de Win machine sharable gemaakt en deze dmv mount -t
> smb gemount op de server. Nu heb ik daar dus:
> 
> /var/data/ en
> /var/remotedata/
> 
> Ik wil nu op de server een scriptje draaien die zorgt dat /var/data
> exact gelijk gehouden wordt aan /var/remotedata.

Hiervoor is rsync een oplossing. Rsync controleert eerst of de 
meta-data (creatie tijd, lengte en dergelijke) verschillen. Alleen dan 
wordt de daadwerkelijke copieerslag uitgevoerd.

<test>
Twee files gemaakt: a/test en b/test die dezelfde meta-data hebben

$ rsync a/test b/test
$ cat ?/test
Dit is een test van mij.
Dat is een test van mij.

Dus ondanks dat ik met rsync ze gelijk getrokken zou hebben, blijven 
ze verschillend.
</test>

Dit betekent dus, dat zolang de files op de windows machine niet 
wijzigen, ze niet door de Linux machine gelezen worden. Zodra er ook 
maar een kleine wijziging in zit, zal de Linux machine de hele file 
door het netwerk heentrekken om source en destination met elkaar te 
kunnen vergelijken (middels het rsync algorithme). Het zou daarom 
beter zijn om rsync op je windows machine te draaien.

Ik gebruik zelf het volgende stukje code om een windows machine te 
backuppen:
<script>
           STATUS_DIR=/usr/local/lib/backup
           RDIR=SYS1
           TMP_FILE=`mktemp -t`
           if [ -e ${STATUS_DIR}/${RDIR} ]
           then LINKDIR=`cat ${STATUS_DIR}/${RDIR}`
           else LINKDIR=/dev/null
           fi
           if rsync -av --exclude=win386.swp \
                    --delete  --link-dest=$LINKDIR \
                    /mnt/smb/ /WindowsBackup/SYS1/TMP > $TMP_FILE
           then mv $TMP_FILE ${STATUS_DIR}/${RDIR}.list
                BACKUPDIR=/WindowsBackup/SYS1/`date +%Y%m%d-%H%M%S`
                mv /WindowsBackup/SYS1/TMP $BACKUPDIR
                echo $BACKUPDIR > ${STATUS_DIR}/${RDIR}
           else mv --backup=t $TMP_FILE ${STATUS_DIR}/${RDIR}half
           fi
</script>
Het gebruik van --link-dest en het manipuleren van LINKDIR en 
BACKUPDIR zorgen ervoor dat ik voor de opslagruimte van een 
differential backup een full backup krijg.

> 
> Heeft iemand een suggestie hoe dit het meest efficient aan te pakken? Ik
> heb wat met unison gespeeld, maar denk dat dit meer voor geavanceerde
> bi-directionele synchronisatie is.
> 
> Hartelijk dank voor alle suggesties!
> 
> --
>   Erik van der Meulen <e.van.der.meulen op avondel.com>

Succes, Johan



More information about the Linux mailing list