On Mon, Dec 21, 2009 at 4:43 PM, Bryce Stenberg <br...@hrnz.co.nz> wrote:
> Hi Everyone,
>
>
>
> Almost two months back I enquired about doing point-in-time backups
> (snapshots) of my server and was pointed to some different products.
>
> Here is what I finished up with in the end.  It allows me to quiesce live
> databases, take disk snapshots (they take less than a second), un-quiesce
> databases (only tested with Postgresql so far) and then using backup
> software copy the snapshot to another drive (in my case it is a removable
> usb drive for now) for a consistent point-in-time backup.
>
> I used LVM to take the snapshots, rdiff-backup to perform the backup and
> restores, and some scripting to allow restore to new hard drive.
>
> I’m not sure if it would restore to completely different hardware as I’m not
> sure where linux has the hardware dependencies? – I’ll have to test that
> some time.
>
> The LVM physical volume and volume group (“hrnzlx02”) are around twice the
> size of the LVM logical volumes in use, so there is plenty of room for the
> snapshot volumes.
>
> I had to label my partitions and use these labels in /etc/fstab instead of
> the uuid’s just to remove another layer of editing after the restore – means
> I don’t have to alter fstab after restore
>
> The only manual editing I have to perform after restore is putting the new
> UUID for the boot partition into the grub ‘menu.lst’ file.
>
>
>
> This has been a great learning exercise for me (with a steep curve), had
> many a frustrating dead-end found. Once I have a better grasp of bash
> scripting I hope to generalize this to use parameters so I could run it on
> any server. Also, once we have a central backup location that understands
> linux file systems I’ll change the rdiff-backup to go across the network.
>
>
>
> Anyway, in case I might have missed something important, or there is an
> easier way to do something, here are my scripts.  If you see anything that
> may catch me out in the future when trying to restore please let me know…
>             like, for example, are my exclusions from backup all I need or
> excessive?
>
>
>
> Since you guys have a great depth of linux understanding I appreciate any
> comments or ideas you may have that help this backup scheme.
>
>
>
>
>
> BACKUP SCRIPT:
>
> ############################################################################
>
> #!/bin/bash
>
>
>
> # save partition table locally and on removable drive:
>
> sfdisk -dx /dev/sda > /home/adminstrator/scripts/sda-pt.sf
>
> cp /home/adminstrator/scripts/sda-pt.sf /media/usbdrive/restore_info
>
>

Hard coded sda. Remove it to a variable, like

DISK=sda
sfdisk -dx /dev/$DISK > /home/adminstrator/scripts/$DISK-pt.sf
etc

etc. Makes changing disks easier.

Theres probably many other similar points where you could abstract
stuff out, look for anywahere where you are typing the same characters
or expression more than 2 or 3 times.

>
> # save master boot record locally and on removable drive:
>
> dd if=/dev/sda of=/home/adminstrator/scripts/mbr-backup bs=512 count=1
>
> cp /home/adminstrator/scripts/mbr-backup
> /media/usbdrive/restore_info/mbr-backup
>
>
>
>
>
> #### Next will perform a 'snapshot' backup of root drive to usbdrive.
>
>
>
> #
>
> # insert databases quiesce/block commands here ….
>
> #
>
>
>
> # create the snapshot...
>
> lvcreate -L8G -s -n rootsnapshot /dev/hrnzlx02/root
>
>
>
> #
>
> # insert databases un-quiesce/un-block commands here ….
>
> #
>
>
>
> # mount the snapshot for backing up from:
>
> mkdir -p /mnt/hrnzlx02/rootsnapshot
>
> mount /dev/hrnzlx02/rootsnapshot /mnt/hrnzlx02/rootsnapshot
>
>
>
> # do the backup to removable drive
>
> rdiff-backup -b -v2 --print-statistics --exclude-sockets --exclude
> /mnt/hrnzlx02/rootsnapshot/tmp --exclude /mnt/hrnzlx02/rootsnapshot/media
> --exclude /mnt/hrnzlx02/rootsnapshot/proc --exclude
> /mnt/hrnzlx02/rootsnapshot/mnt /mnt/hrnzlx02/rootsnapshot
> /media/usbdrive/backup
>
>
>
> # unmount the snapshot
>
> umount /mnt/hrnzlx02/rootsnapshot
>
>
>
> # remove the snapshot logical partition
>
> lvremove /dev/hrnzlx02/rootsnapshot -f
>
>
>
> # backup boot partition (ubuntu so far has always created it as /dev/sda5)
>
> rdiff-backup -b -v2 --print-statistics --exclude-sockets /boot
> /media/usbdrive/backup_boot_sda5
>
>
>
> #end
>
> ############################################################################
>
>
>
>
>
> RESTORE SCRIPT – using Ubuntu desktop live cd to boot machine…
>
> Assume running from directory where script is on the removable drive, where
> I also have the
>
> Necessary rdiff-backup package files.
>
> ############################################################################
>
> #!/bin/bash
>
> # THIS IS FOR A RESTORE TO A NEW DISK.
>
>
>
> echo NOTE: Must have root permissions to work - run  ‘sudo su’ first.
>
> echo Any key to continue
>
> read -n 1
>
>
>
> # load required software:
>
> apt-get update
>
> apt-get install lvm2
>
> dpkg -i /media/disk/restore_info/librsync1_0.9.7-5_i386.deb
>
> dpkg -i /media/disk/restore_info/rdiff-backup_1.2.7-1ubuntu2_i386.deb
>
>
>
>
>
> echo New drive must be clean - no partitions nor LVM volumes, etc!!
>
> echo Create partition table?  using sfdisk
>
> echo Any key to continue
>
> read -n 1
>
>
>
> sfdisk -fx /dev/sda < sda-pt.sf
>
>
>
> echo creating the physical volume on /dev/sda1
>
> pvcreate -ff /dev/sda1
>
>
>
> echo creating virtual group hrnzlx02
>
> vgcreate hrnzlx02 /dev/sda1
>
>
>
> echo creating logical volumes
>
> lvcreate -L10.24G -n root hrnzlx02
>
> lvcreate -L1G -n swap hrnzlx02
>
>
>
> echo formatting and mounting new volumes to use for restore...
>
> mkfs.ext3 /dev/hrnzlx02/root
>
> mkfs.ext2 /dev/sda5
>
> mkswap -v1 /dev/hrnzlx02/swap
>
>
>
> mkdir /media/hd
>
> mkdir /media/boot
>
> mount -t ext3 /dev/hrnzlx02/root /media/hd
>
> mount -t ext2 /dev/sda5 /media/boot
>
>
>
> ## restore data to drive:
>
> echo Restoring boot partition
>
> rdiff-backup -v4 --force --restore-as-of now /media/disk/backup_boot_sda5
> /media/boot
>
>
>
> echo Restoring root partition
>
> rdiff-backup -v4 --force --restore-as-of now /media/disk/backup /media/hd
>
>
>
>
>
> echo Creating directories that were excluded from original backup:
>
> mkdir /media/hd/proc
>
> mkdir /media/hd/tmp
>
> mkdir /media/hd/mnt
>
> mkdir /media/hd/media
>
> mkdir /media/hd/media/usbdrive
>
> mkdir /media/hd/media/cdrom
>
> mkdir /media/hd/media/cdrom0
>
> mkdir /media/hd/media/floppy
>
> mkdir /media/hd/media/floppy0
>
>
>
>
>
> echo Restoring master boot record
>
> dd if=/media/disk/restore_info/mbr-backup of=/dev/sda bs=446 count=1
>
>
>
> echo Redo volume label for boot partition - in case I lost it?
>
> e2label /dev/sda5 BootPart
>
>
>
> echo NOTE - you now have to modify new /boot/grub/menu.lst to reflect new
> UUID !!!!   - use 'blkid' to get numbers
>
> echo You are changing the uuid values to point to the boot partitions uuid -
> /dev/sda5 in our case
>
>
>
> # end.
>
> ############################################################################
>
>
>
>
>
> Thanks and Regards,
>
>   Bryce Stenberg
>
>   IT Department
>
>   Harness Racing New Zealand Inc.
>
>
>
>
>
> DISCLAIMER: If you have received this email in error, please notify us
> immediately by reply email, facsimile or collect telephone call to +64 3
> 9641200 and destroy the original.
>
> Please refer to full DISCLAIMER at http://www.hrnz.co.nz/eDisclaimer.htm
>
>

Reply via email to