Doorgaan naar hoofdcontent

Migratie server met rsync

De hardware waarop mijn server draaide was nog goed, maar wat traag. Ik had een kandidaat om de nieuwe server op te installeren. Maar met de software was eigenlijk niets mis, dus in plaats van een nieuwe install, besloot ik de software te klonen naar de nieuwe server.

Hierbij maakte ik gebruik van ploplinux via pxe boot. Verder was het plan om met rsync de software (inclusief user data) over te zetten. Dit heeft als voordeel dat de operatie niet in één keer hoeft te worden afgerond. Na een eerste rsync waarbij de bulk wordt overgezet, kunnen de laatste wijzigingen nog altijd op het laatste moment gesynchroniseerd worden.

Het klonen van een computer heeft ook een paar (operationele) nadelen. Om te beginnen mogen de servers (oud en nieuw) niet tegelijkertijd op het netwerk actief zijn. Ten tweede hoeven de omstandigheden op de kloon niet persé exact hetzelfde te zijn. Hieronder in het verslag mijn workaround:

Ik begon dus met een pxeboot met ploplinux op de nieuwe server. Op de harde schijf met fdisk de partities aangemaakt en van een filesystem voorzien met mkfs.ext3. Let bij het partitioneren er op dat de partitie waarin /boot komt te staan de bootable flag krijgt.

Vervolgens heb ik een script gemaakt die automatisch deze partities kunnen mounten zodat het complete target filesystem op zijn plek komt te staan. Een ander script zorgde ervoor dat dit ook weer automatisch unmount kan worden. Voor de source heb ik twee vergelijkbare scripts gemaakt. Zie hieronder de scripts.

Nu komt rsync in beeld. Bijna alles kan en moet worden overgezet. Maar sommige zaken niet. Je wilt bijvoorbeeld niet dat lost+found wordt overschreven. Maar ook het kopieren van /proc en /sys levert problemen op. Het kopieren van een externe disk of een cd is ook tamelijk overbodig. Hieronder staat het gebruikte rsync script (clone.sh) en de excludes die ik heb gemaakt.

Na afloop van de rsync moest er nog wat nazorg gedaan worden, in mijn geval moest de fstab worden aangepast, omdat de disk indeling en de partitionering afweek van het orgineel. Ook de udev regels gaven problemen. Dit deed ik met het script setfiles.sh, dit wordt aangeroepen vanuit clone.sh.

Om de zaak te kunnen booten moest het MBR nog worden aangepast met het draaien van grub-update. Met het commando chroot zorg je ervoor /mnt/target veranderd in /. Dan kan de grub-update gedraaid worden. Om de chroot weer te verlaten Ctrl D.

Voor de finale rsync heb ik op de server zoveel mogelijk stil gelegd en op de router de internet connectie tijdelijk onderbroken. Op de server heb ik alle niet essentiele services stil gelegd. Na de laatste rsync werd het dan tijd voor een test. Oude server uit en nieuwe server aan. Het was meteen goed! ;-)

De scripts:



======
#!/bin/sh


echo "prepare targets clone operation"
echo "-------------------------------"
echo "creating mountpoint target"
echo "--- -------------------------"
mkdir /mnt/target
echo "mounting targets on target"
echo "-----------------------------"
mount /dev/hda3   /mnt/target
mount /dev/hda1   /mnt/target/boot
mount /dev/hda5   /mnt/target/home
mount /dev/hda10  /mnt/target/tmp
mount /dev/hda6   /mnt/target/var/mail
mount /dev/hda7   /mnt/target/var/spool/cups
mount /dev/hda8   /mnt/target/var/spool/mqueue
mount /dev/hda9   /mnt/target/var/spool/mqueue-client

======
#!/bin/sh


echo "umount targets clone operation"
echo "-------------------------------"
echo "umounting targets on target"
echo "-----------------------------"
umount /mnt/target/boot
umount /mnt/target/home
umount /mnt/target/tmp
umount /mnt/target/var/mail
umount /mnt/target/var/spool/cups
umount /mnt/target/var/spool/mqueue
umount /mnt/target/var/spool/mqueue-client
umount /mnt/target
echo "deleting mountpoint target"
echo "--- -------------------------"
rm -r /mnt/target

======
#!/bin/sh


echo "prepare source clone operation"
echo "------------------------------"
echo "creating mountpoint source"
echo "--- -----------------------"
mkdir /mnt/source
echo "mounting source source"
echo "-----------------------"
mount source://                        /mnt/source
mount source://boot                    /mnt/source/boot
mount source://home                    /mnt/source/home
mount source://tmp                     /mnt/source/tmp
mount source://var/mail                /mnt/source/var/mail
mount source://var/spool/cups          /mnt/source/var/spool/cups
mount source://var/spool/mqueue-client /mnt/source/var/spool/mqueue-client
mount source://var/spool/mqueue        /mnt/source/var/spool/mqueue

======
#!/bin/sh


echo "umount source clone operation"
echo "------------------------------"
echo "umounting source source"
echo "- ----------------------"
umount /mnt/source/boot
umount /mnt/source/home
umount /mnt/source/tmp
umount /mnt/source/var/mail
umount /mnt/source/var/spool/cups
umount /mnt/source/var/spool/mqueue-client
umount /mnt/source/var/spool/mqueue
umount /mnt/source
echo "deting mountpoint source"
echo "--- ---------------------"
rm -r /mnt/source

======
#!/bin/sh


# Script to do clone operation | clone.sh


# set path
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin


# excludes file
EXCLUDES=/media/ploplinux/myscripts/files/ExcludeFileRsync


# options
OPTIONS="--delete-after  --exclude-from=$EXCLUDES -av"


# source
SOURCE=/mnt/source/


# target
TARGET=/mnt/target


# our actual rsyncing function
do_rsync()
{
   rsync $OPTIONS $SOURCE $TARGET
   setfiles.sh
}


# some error handling and/or run our backup
if [ -f $EXCLUDES ]; then
        if [ -d $TARGET/home ]; then
                # now the actual transfer
                do_rsync
        else
                echo "cant find $TARGET/home"; exit
        fi
        else
                echo "cant find $EXCLUDES"; exit
fi

=======
exclude file

lost+found
/proc
/sys
/media

======
#!/bin/sh



# post clone operation | setfiles.sh


echo "setting fstab on target"

cp -v /media/ploplinux/myscripts/files/fstab /mnt/target/etc

echo "setting device.map on target"

cp -v /media/ploplinux/myscripts/files/device.map /mnt/target/boot/grub

echo "setting menu.lst on target"

cp -v /media/ploplinux/myscripts/files/menu.lst /mnt/target/boot/grub

echo "setting udev rules on target"

cp -v /media/ploplinux/myscripts/files/70-persistent-net.rules /mnt/target/etc/udev/rules.d

Reacties

Populaire posts van deze blog

Maillist using procmail

OS: UNIX in general PACKAGE: procmail Why Some time ago I received a list of email addresses wich I needed to sent a bulk message to. Because I didn't had an easy solution like copy-paste and typing some easy comments, I started to look for a recipe with procmail. I found one here . This recipe is just like so many UNIX recipes: nice, but it has to be tweaked before it's ready to serve. dedicated user First of all: assign this procmail rules to a dedicated UNIX user. It will prevent mixing up with procmail rules in your own account. Of course it is more professional this way :-) Make sure that your MTA can deliver email to this user, also make sure this user can send email assigning a different user like the sendmail -f option. In sendmail, use the virtuserstable. controling the mail list I created three brands of procmail rules: open, semi-open and closed. Closed is a list to wich only the owner can send email to, and of course he is also the only one who can put...

Onderzoeksdata redden van kapotte computers

Eerder op facebook gepubliceerd op 02-10-2016 Dagboek van een systeembeheerder Op een dag werd ik bij een computer geroepen waar data opstonden van een onderzoek dat een tijd geleden was gedaan en al bijna vergeten. Eerder die dag herinnerde een wetenschapper zich deze data, die plotseling toch belangrijk waren en liever gisteren dan vandaag van die computer afmoesten om in veiligheid te worden gesteld. Of wij dat niet even konden oplossen? Het probleem met de computer was dat het niet verbonden was met het netwerk en de floppydrive niet meer werkte. Ter plaatse aangekomen constateerde ik dat het ding geen standaardspul was. Maar hij zag er wel indrukwekkend uit. Het was een enorme toren die niet onder mijn buro zou passen. Waarschijnlijk clandestien ingekocht voor een speciaal onderzoek. Maar geen netwerkkaart. Waar ik toch niks aan zou hebben gehad, want onze netwerksoftware stond er niet op. Maar uiteraard had het ding wel een parallelle poort. Dus ik haalde van boven een st...