[Ovirt-devel] [PATCH node] Checks the request partitions against the size of the disk.

Jim Meyering jim at meyering.net
Sun Jan 18 10:44:18 UTC 2009


Perry Myers <pmyers at redhat.com> wrote:
> NOTE: This is Darryl's patch rebased on top of recent pushes to next as well
> as the two patches I posted earlier this evening.  I've tested this patch and
> it works for me.  Unless I hear objections, I'll push this when I get ack's
> on my previous two patches.
>
> Before partitioning is performed, the request size of the partitions are
> compared to the size of the disk itself. If the partitions combined are
> larger than the disk then an error message is presented to the user and
> they are returned to the main menu.

ACK.
modulo minor suggestions

> Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
> Signed-off-by: Perry Myers <pmyers at redhat.com>
> ---
>  scripts/ovirt-config-storage |   49 +++++++++++++++++++++++++++++------------
>  1 files changed, 34 insertions(+), 15 deletions(-)
>
> diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage
> index 7489c68..e3acc05 100755
> --- a/scripts/ovirt-config-storage
> +++ b/scripts/ovirt-config-storage
> @@ -20,17 +20,6 @@ default_root_size=256
>  default_config_size=5
>  default_logging_size=256
>
> -check_partition_sizes()
> -{
> -    # FIXME: use this function before performing any partitioning, auto or not
> -    :
> -    # Perform some sanity checks.  E.g.,
> -    # What if DATA_SIZE ends up zero or negative?
> -    # What if any of those partition sizes is smaller than
> -    # the minimum size for an ext3 partition?  Diagnose it here
> -    # or just let the mke2fs failure suffice.
> -}
> -
>  get_selected_drive_size()
>  {
>      local udi=$(hal-find-by-property --key block.device --string $DRIVE)
> @@ -47,6 +36,32 @@ get_selected_drive_size()
>      echo "selected device: $DRIVE ($SPACE MB)"
>  }
>
> +check_partition_sizes()
> +{
> +    local disk_size need_size
> +
> +    get_selected_drive_size
> +    disk_size=$SPACE
> +    need_size=$(echo "scale=0; $BOOT_SIZE+$SWAP_SIZE+$ROOT_SIZE+$CONFIG_SIZE+$LOGGING_SIZE;" | bc -l)

it's a little easier to read this way:

    need_size=$(echo "scale=0;" \
                     "$BOOT_SIZE + $SWAP_SIZE + $ROOT_SIZE" \
                     "+ $CONFIG_SIZE + $LOGGING_SIZE" | bc -l)

> +    printf "disk_size=$disk_size\n"
> +    printf "need_size=$need_size\n"
> +
> +    if [ $need_size -gt $disk_size ]; then
> +        gap_size=$(echo "scale=0; $need_size-$disk_size;" | bc -l)
> +        printf "\n"
> +        printf "=============================================================\n"
> +        printf "The target storage device is too small for the desired sizes:\n"
> +        printf " Size of target storage device: $disk_size MB\n"
> +        printf " Total storage size to be used: $need_size MB\n"
> +        printf "\n"
> +        printf "You need an addition $gap_size MB of storage.\n"
> +        printf "\n"
> +        return 1
> +    fi
> +
> +    return 0
> +}
> +
>  # Find a usable/selected storage device.
>  # If there are none, give a diagnostic and return nonzero.
>  # If there is just one, e.g., /dev/sda, treat it as selected (see below).
> @@ -309,8 +324,10 @@ do_confirm()
>          case $REPLY in
>              Y|y)
>                  check_partition_sizes
> -                perform_partitioning
> -		        exit 0
> +                if [ $? = 0 ]; then
> +                    perform_partitioning
> +                    exit 0
> +                fi

However, this is more maintainable:

              if check_partition_sizes; then
                  perform_partitioning
                  exit 0
              fi

ovirt has already seen cases where the command and the
following test of "$?" were accidentally separated.
When you combine running the command and testing its
exit status on the same line, that can't happen.

...
>  if [ "$1" == "AUTO" ]; then
>      check_partition_sizes
> -    printf "Partitioning hard disk..."
> -    perform_partitioning
> +    if [ $? = 0 ]; then
> +        printf "Partitioning hard disk..."
> +        perform_partitioning
> +    fi

    if check_partition_sizes; then
        printf "Partitioning hard disk..."
        perform_partitioning
    fi




More information about the ovirt-devel mailing list