--- trunk/vz-clone.pl 2007/10/04 18:54:41 24 +++ trunk/vz-clone.pl 2007/10/04 23:23:20 26 @@ -1,14 +1,43 @@ #!/usr/bin/perl -w use strict; -use Shell qw/rsync vzlist lvcreate mount umount lvremove which lvdisplay mke2fs/; +use Shell qw/rsync vzlist lvcreate mount umount lvremove which lvdisplay mke2fs vzctl/; my $vz = '/vz'; my $conf = '/etc/vz/conf'; my $snap_size = '100M'; -my $VEID = shift @ARGV || die "Usage: $0 VEID\n\n",vzlist; +my ( $action, $VEID ) = @ARGV; + +my $valid_actions = 'create|umount|destroy'; + +die "Usage: $0 ($valid_actions) VEID\n\n",vzlist unless $VEID && $action && $action =~ m/($valid_actions)/; + +if ( $action eq 'destroy' ) { + my $vzlist = vzlist(); + if ( $vzlist =~ m/$VEID/ ) { + print "stop $VEID\n"; + vzctl('stop', $VEID); + } +} + +if ( $action =~ m/(umount|destroy)/ ) { + my $clone; + open(my $m, '-|', 'mount') || die "can't open mount: $!"; + while(<$m>) { + my @v = split(/\s+/,$_); + if ( $v[2] =~ m!/(private|root)/$VEID$! && $v[5] =~ m/bind/ ) { + umount( $v[2] ); + } elsif ( $v[2] =~ m!vz-clone-$VEID$! ) { + $clone = $v[2]; + } + } + umount( $clone ) if $clone; +} + +#die "unknown action: $action" unless $action eq 'create'; +exit unless $action eq 'create'; my $CVEID = "10$VEID"; @@ -53,7 +82,7 @@ my ( $vz_lv_path, $vz_lv_name ) = ( $1, $2 ) if ( $vz_lv =~ m!^(.+)/([^/]+)$! ); my $snap = $vz_lv_name . '-snap'; - my $clone = "$vz_lv_name-clone-$CVEID"; + my $clone = "vz-clone-$CVEID"; sub do_mount { my ( $from, $to ) = @_;