[Ovirt-devel] [PATCH node][REPOST 1/2] Fix uninstall to detect and cleanup correct partitions

Joey Boggs jboggs at redhat.com
Wed Mar 24 15:10:55 UTC 2010


On 03/24/2010 09:03 AM, Mike Burns wrote:
> Previous implementation had staticly defined partitions to remove.
> This would break in the case of split Root and HostVG devices.
>
> Signed-off-by: Mike Burns<mburns at redhat.com>
> ---
>   scripts/ovirt-config-boot      |   11 +--------
>   scripts/ovirt-config-uninstall |   48 ++++++++++++++++++++++++---------------
>   scripts/ovirt-functions        |   33 +++++++++++++++++++++++++++
>   3 files changed, 63 insertions(+), 29 deletions(-)
>
> diff --git a/scripts/ovirt-config-boot b/scripts/ovirt-config-boot
> index 28d1572..ac43daa 100755
> --- a/scripts/ovirt-config-boot
> +++ b/scripts/ovirt-config-boot
> @@ -50,12 +50,7 @@ ovirt_boot_setup() {
>       fi
>
>       # check that /boot mounted ok and find partition number for GRUB
> -    eval $(readlink -f /dev/disk/by-label/$grub_dev_label|awk {'
> -        print "disk=" substr($1,1,length($1)-1);
> -        print "disk2=" substr($1,1,length($1)-2);
> -        partN=substr($1,length($1),1); partN--;
> -        print "partN=" partN;
> -    }')
> +    get_part_info $(readlink -f /dev/disk/by-label/$grub_dev_label disk partN
>       rc=$?
>       if [ $rc -ne 0 -o $partN -lt 0 ]; then
>         log "unable to determine Root partition"
> @@ -70,10 +65,6 @@ ovirt_boot_setup() {
>             return 1
>           fi
>
> -        if [ ! -e "$disk" ]; then
> -            # e.g. c0d0p1
> -            disk="$disk2"
> -        fi
>           # prepare Root partition update
>           candidate=
>           if [ -e /dev/disk/by-label/RootBackup ]; then
> diff --git a/scripts/ovirt-config-uninstall b/scripts/ovirt-config-uninstall
> index 3b7b48d..b6675e7 100755
> --- a/scripts/ovirt-config-uninstall
> +++ b/scripts/ovirt-config-uninstall
> @@ -37,27 +37,37 @@ if ask_yes_or_no "Do you wish to continue and uninstall this node ([Y]es/[N]o)?"
>           rm -f /var/lib/multipath/bindings
>           unmount_logging
>           unmount_config /etc/default/ovirt
> +        #get partition info
> +        root2=""
> +        if findfs LABEL=RootBackup 2>&1>/dev/null; then
> +            root2=RootBackup
> +        elif findfs LABEL=RootUpdate 2>&1>/dev/null; then
> +            root2=RootUpdate
> +        elif findfs LABEL=RootNew 2>&1>/dev/null; then
> +            root2=RootNew
> +        fi
> +        if ! get_part_info $(findfs LABEL=Root 2>/dev/null) root_dev root_part; then
> +            log "Can't find Root device"
> +            exit 2
> +        fi
> +        if ! get_part_info $(findfs LABEL=${root2} 2>/dev/null) root2_dev root2_part; then
> +            log "Can't find RootBackup/RootNew/RootUpdate device"
> +            exit 3
> +        fi
> +        if ! get_part_info $(pvs --noheadings -o pv_name,vg_name | grep HostVG | awk '{print $1}') pv_dev pv_part; then
> +            log "Can't find HostVG device"
> +            exit 4
> +        fi
>           log "Removing volume group"
>           wipe_volume_group "HostVG"
> -        partition=$(readlink -f $(findfs LABEL=Root))
> -        if [ -n "$partition" ]; then
> -            log "Removing partitions"
> -            eval $(echo $partition | awk ' {
> -                print "drive=" substr($0,1,length($1)-1);
> -                print "drive2=" substr($0,1,length($1)-2);
> -            }')
> -            if [ ! -e "$drive" ]; then
> -                drive="$drive2"
> -                partpv="$drive}p2"
> -            else
> -                partpv="${drive}2"
> -            fi
> -	        parted -s $drive "rm 1"
> -            pvremove ${partpv}
> -	        parted -s $drive "rm 2"
> -            parted -s $drive "rm 3"
> -            wipe_partitions $drive
> -	    fi
> +        log "Removing partitions"
> +        parted -s $root_dev "rm $root_part"
> +        pvremove ${vg_dev}
> +        parted -s $root2_dev "rm $root2_part"
> +        parted -s $vg_dev "rm $vg_part"
> +        wipe_partitions $pv_dev
> +        wipe_partitions $root_dev
> +        wipe_partitions $root2_dev
>           #restart multipath
>           multipath -F
>           multipath -v3
> diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
> index c2ef94b..b98e31a 100644
> --- a/scripts/ovirt-functions
> +++ b/scripts/ovirt-functions
> @@ -851,6 +851,39 @@ get_dm_device ()
>       return $rc
>   }
>
> +#Function to determine partition and device names
> +get_part_info() {
> +    local drive_in=$1
> +    local dev_var=$2
> +    local part_var=$3
> +    local devname_1 devname2 part_number
> +    local rc=0
> +
> +    eval $(readlink -f $drive_in|awk {'
> +        print "devname_1=" substr($1,1,length($1)-1);
> +        print "devname_2=" substr($1,1,length($1)-2);
> +        part_number=substr($1,length($1),1);
> +        print "part_number=" part_number;
> +    }')
> +    rc=$?
> +
> +    if [[ "part_number" -lt 1 ]]; then
> +        log "Partition number was invalid"
> +        return 2
> +    fi
> +
> +
> +    if [ -e ${devname_1} ]; then
> +        eval "${dev_var}"="${devname_1}"
> +    elif [ -e ${devname_2} ]; then
> +        eval "${dev_var}"="${devname_2}"
> +    else
> +        return 1
> +    fi
> +    eval "${part_var}"="${part_number}"
> +    return $rc
> +}
> +
>   # execute a function if called as a script, e.g.
>   #   ovirt-functions ovirt_store_config /etc/hosts
>
>    
ACK




More information about the ovirt-devel mailing list