X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=virt-p2v.sh;h=228e1fc57aa101bd9a34e4a9c4ba4cce1e04a2fe;hb=ed6daabef5e8dfab691520e94e2c39458cd3a8ec;hp=ae0d021a56ef953c29701100cbafec072b3028e6;hpb=bb190cb82bc62bb3f3097abb0dbf7142bcef3ae5;p=virt-p2v.git diff --git a/virt-p2v.sh b/virt-p2v.sh index ae0d021..228e1fc 100755 --- a/virt-p2v.sh +++ b/virt-p2v.sh @@ -22,7 +22,11 @@ # # $Id$ +# Because we're running from a start-up script, we don't have much +# of a login environment, so set one up. export PATH=/usr/sbin:/sbin:/usr/local/bin:/usr/kerberos/bin:/usr/bin:/bin +export HOME=/root +export LOGNAME=root # The defaults here make a generic virt-p2v.sh script, but if you want # to build a partially-/fully-automatic P2V solution, then you can set @@ -96,12 +100,12 @@ function word_in_list { # Use the function read_line instead of the shell built-in read. # It reads from the console. function read_line { - read "$*" /dev/console 2>&1 + PS1='\u@\h:\w\$ ' bash } #---------------------------------------------------------------------- @@ -247,6 +251,13 @@ function search_parts { # $parts is returned. } +# This generates a snapshot device name from a device name. +# eg. sda -> snap_sda +# Sets $dname. +function snap_name { + dname=`echo -n snap_"$1" | tr -cs '[:alnum:]' _` +} + #---------------------------------------------------------------------- # Network configuration functions. @@ -286,7 +297,7 @@ function auto_network { echo "(Hint: if not sure, there is a shell on console [ALT] [F2])" echo -n " (y/n) " local line - read_line line /dev/$1 +fi + # We can safely write files into /tmp without modifying anything. cd /tmp #---------------------------------------------------------------------- # Dialog with the user. -log -log virt-p2v starting up at `date` - if [ "$greeting" != "no" ]; then dialog \ --title "virt-p2v" \ @@ -419,9 +437,12 @@ while [ "$state" != "exit" ]; do else stat=off fi + log running blockdev --getsize /dev/$d gigs=$(($(blockdev --getsize /dev/$d)/2/1024/1024)) + log /dev/$d has size $gigs deviceslist="$deviceslist $d /dev/$d(${gigs}GB) $stat" done + log deviceslist="$deviceslist" dialog \ --extra-button --extra-label "Back" --nocancel \ @@ -529,13 +550,14 @@ rm -f /etc/lvm/cache/.cache # Snapshot the block devices. for d in $devices_to_send; do - log snapshotting block device /dev/$d ... + snap_name $d + log snapshotting block device /dev/$d to $dname ... - snapshot $d snap_$d + snapshot $d $dname # The block devices are whole disks. Use kpartx to repartition them. - log running kpartx -a /dev/mapper/snap_$d ... - kpartx -a /dev/mapper/snap_$d + log running kpartx -a /dev/mapper/$dname ... + kpartx -a /dev/mapper/$dname done # Rescan for LVs. @@ -549,8 +571,11 @@ vgchange -a y log mount $root_filesystem as /mnt/root -if [ -f /dev/mapper/snap_$root_filesystem ]; then - mount /dev/mapper/snap_$root_filesystem /mnt/root +snap_name $root_filesystem +root_filesystem_dname="$dname" + +if [ -b /dev/mapper/$root_filesystem_dname ]; then + mount /dev/mapper/$root_filesystem_dname /mnt/root else mount /dev/$root_filesystem /mnt/root fi @@ -634,12 +659,14 @@ for dev in $devices_to_send; do name="$basename-$rdev.img" log sending $dev to $name - sectors=`blockdev --getsize /dev/mapper/snap_$dev` + snap_name $dev + + sectors=`blockdev --getsize /dev/mapper/$dname` gigs=$(($sectors/2/1024/1024)) echo "Sending /dev/$dev (${gigs} GB) to remote machine" - dd if=/dev/mapper/snap_$dev | gzip --best | + dd if=/dev/mapper/$dname | gzip --best | case "$remote_transport" in ssh) ssh -p "$remote_port" "$remote_host" \ @@ -647,7 +674,8 @@ for dev in $devices_to_send; do ;; tcp) echo "p2v $name $sectors" > header - cat header - | nc "$remote_host" "$remote_port" + echo > newline + cat header - newline | nc "$remote_host" "$remote_port" ;; esac done @@ -657,8 +685,9 @@ done # Clean up. #for d in $devices_to_send; do -# kpartx -d /dev/mapper/snap_$d -# drop_snapshot snap_$d +# snap_name $d +# kpartx -d /dev/mapper/$dname +# drop_snapshot $dname #done # This file must end with a newline