--- trunk/vz-clone.pl 2009/03/03 20:58:48 69 +++ trunk/vz-clone.pl 2009/03/09 19:04:19 73 @@ -1,10 +1,10 @@ #!/usr/bin/perl -w use strict; -use Shell qw/rsync vzlist lvcreate mount umount lvremove which lvdisplay mke2fs vzctl/; +use Shell qw/rsync lvcreate mount umount lvremove which lvdisplay mke2fs/; -my $vz = '/vz'; -my $conf = '/etc/vz/conf'; +use lib 'lib'; +use VZ; my $snap_size = '10G'; @@ -14,7 +14,7 @@ my $valid_actions = 'create|mount|umount|destroy'; -die "Usage: $0 ($valid_actions) VEID\n\n",vzlist unless $VEID && $action && $action =~ m/($valid_actions)/; +die "Usage: $0 ($valid_actions) VEID\n\n",`vzlist` unless $VEID && $action && $action =~ m{($valid_actions)}; my $CVEID = "10$VEID"; @@ -68,15 +68,13 @@ my $vz_lv; -open(my $m, '<', '/etc/fstab') || die "can't open /etc/fstab: $!"; +open(my $m, '-|', "df $vz_root") || die "can't open df $vz_root: $!"; while(<$m>) { - next if m/^#/; + next if ! m{^/}; my @v = split(/\s+/,$_); - if ( $v[1] =~ m/\Q$vz\E/ ) { - $vz_lv = $v[0]; - warn "found LV $vz_lv for $vz\n"; - last; - } + $vz_lv = $v[0]; + warn "found LV $vz_lv for $vz_root\n"; + last; } sub fs_quota { @@ -132,8 +130,8 @@ do_mount( "$vz_lv_path/$snap", "/tmp/$snap" ); - mount_bind( "/tmp/$snap/private/$VEID", "$vz/private/$CVEID" ); - mount_bind( "/tmp/$snap/root/$VEID", "$vz/root/$CVEID" ); + mount_bind( "/tmp/$snap/private/$VEID", "$vz_root/private/$CVEID" ); + mount_bind( "/tmp/$snap/root/$VEID", "$vz_root/root/$CVEID" ); } else { @@ -152,16 +150,16 @@ test_mkdir( "/tmp/$clone/private" ); test_mkdir( "/tmp/$clone/root" ); - copy_files( "$vz/private/$VEID", "/tmp/$clone/private" ); + copy_files( "$vz_root/private/$VEID", "/tmp/$clone/private" ); - mount_bind( "/tmp/$clone/private", "$vz/private/$CVEID" ); - mount_bind( "/tmp/$clone/root", "$vz/root/$CVEID" ); + mount_bind( "/tmp/$clone/private", "$vz_root/private/$CVEID" ); + mount_bind( "/tmp/$clone/root", "$vz_root/root/$CVEID" ); } } else { - copy_files( "$vz/private/$VEID", "$vz/private/$CVEID" ); + copy_files( "$vz_root/private/$VEID", "$vz_root/private/$CVEID" ); } exit if $action eq 'mount'; @@ -188,8 +186,8 @@ return $note . qq{HOSTNAME="$hostname"}; } -open(my $o, '<', "$conf/$VEID.conf") || die "can't open $conf/$VEID.conf: $!"; -open(my $n, '>', "$conf/$CVEID.conf") || die "can't open $conf/$CVEID.conf: $!"; +open(my $o, '<', "$vz_conf/$VEID.conf") || die "can't open $vz_conf/$VEID.conf: $!"; +open(my $n, '>', "$vz_conf/$CVEID.conf") || die "can't open $vz_conf/$CVEID.conf: $!"; while(<$o>) { s{^HOSTNAME=(.*)$}{fix_hostname($1)}ie; s{^IP_ADDRESS=(.*)$}{fix_ip($1)}ie; @@ -201,5 +199,5 @@ my $iptables="iptables -t nat -A POSTROUTING -s $ve_clone_ip -o eth0 -j MASQUERADE"; system( $iptables ); -print "\nConfig file: $conf/$CVEID.conf\nAdded NAT for new VE with: $iptables\nStart clone of $VEID with: vzctl start $CVEID\n" +print "\nConfig file: $vz_conf/$CVEID.conf\nAdded NAT for new VE with: $iptables\nStart clone of $VEID with: vzctl start $CVEID\n"