[vox-tech] Cloning LVM volume over network

Nick Schmalenberger nick at schmalenberger.us
Tue May 29 16:51:45 PDT 2012


On Tue, May 29, 2012 at 02:09:16PM -0700, Alex Mandel wrote:
> On 05/29/2012 11:36 AM, Brian Lavender wrote:
> > On Sun, May 27, 2012 at 09:16:24AM -0700, Wes Hardaker wrote:
> >> Alex Mandel <tech_dev at wildintellect.com> writes:
> >>
> >>> I'm looking for the most efficient way to clone an LVM volume 50GB from
> >>> one physical machine to another. Both machines must stay up, so that
> >>> rules out clonezilla. I'd also like it to be more efficient that dd, so
> >>> more similar to partimage or partclone where it skips the empty space
> >>> and only copies the filled part.
> >>>
> >>> Anyone have examples that show how to do this?
> >>
> >> I'd typically use rsync...  Fast and efficient :-)
> > 
> > Assuming the lvm volume is mounted on both sides and you tunnel rsync over ssh. 
> > If you are in an internal network, you could do it over rsh and avoid the crypto
> > overhead.
> > 
> > cd /mnt/local
> > 
> > Then use the the following from the rsync man page, clipped below. 
> > rsync uses the -e option for ssh, but I don't quite have a machine to test it.
> > 
> >  To synchronize my samba source trees use the following: 
> > 
> >                    rsync -Cavuzb . remote_machine:/mnt/local/
> > 
> > It is clipped from where Tridgell talks abut syncing his samba shares using
> > a Makefile and samba source code for CVS commits.
> > 
> > brian
> > 
> 
> I think the tricky part here is that the lvm volume may contain multiple
> partitions (I think it does have a / and a swap since it's a virtual
> machine disk), and I need the partition information, including the boot
> flags.
> 
> Yes it is local network, same rack, I even have a private subnet between
> the machines.
> 
> This seems to be the foolproof way
> http://www.alethe.com/brad/2008/04/move-an-lvm-based-virtual-machine-to-another-host/
> 
> Was just hoping I could figure out how to do it faster, clonezilla seems
> fancier than just partclone though. I think I need something that dumps
> the partition information too.
> 
> Thanks,
> Alex
I wrote a script a while ago for this sort of situation, which
assumes certain things about the VMs /etc/fstab and
/boot/grub/menu.lst files, then it mounts the lvm partition
filesystems in the dom0 appropriately and you could run rsync
across all of them together:
#!/bin/bash

export DISK=$1
export MOUNTPOINT=$2
ROOTPART=1

/sbin/kpartx -av $DISK

mount "$DISK"1 $MOUNTPOINT

if [ -L $MOUNTPOINT/boot  ]; then
ROOTPART=`cat $MOUNTPOINT/boot/grub/menu.lst | perl -nle 'if ($_ =~ /^[\s]kernel.+root=\/dev\/\p{L}+([\d])/) { print "$1"; exit}'`
umount $MOUNTPOINT
mount "$DISK""$ROOTPART" $MOUNTPOINT
fi

cat $MOUNTPOINT/etc/fstab | perl -nle 'if ($_ =~ /^\/dev\/\p{L}+([\d])[\s]+((\/\p{L}+)+)/ ) { $device=$ENV{DISK} . $1 ; $mountpoint=$ENV{MOUNTPOINT} . $2 ; system "mount $device $mountpoint"}'

mixing bash and perl is a little ugly, and I don't even know if
this was ever actually used for the intended purpose because it
was for somebody else, but I hope it might help you! :)
Nick


More information about the vox-tech mailing list