Perry Myers
2009-Jan-19 08:25 UTC
[Ovirt-devel] [PATCH node] Add data partition to ovirt_vol parameter and o-c-storage
data partition size can be specified as follows: -1 = data partition uses up remaining disk available 0 = no data partition X = positive number indicates exact size for data partition Signed-off-by: Perry Myers <pmyers at redhat.com> --- scripts/ovirt-config-storage | 96 +++++++++++++++++++++++++++++++++-------- scripts/ovirt-early | 12 ++++-- 2 files changed, 85 insertions(+), 23 deletions(-) diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage index a8d679e..efe55f5 100755 --- a/scripts/ovirt-config-storage +++ b/scripts/ovirt-config-storage @@ -1,7 +1,7 @@ #!/bin/bash # # To automate the partitioning, pass in the specific fields in this order -# ovirt-config-storage [swap size] [boot size] [root size] [logging size] +# ovirt-config-storage [swap size] [boot size] [root size] [logging size] [data size] # # All sizes are in megabytes # @@ -19,6 +19,15 @@ default_boot_size=50 default_root_size=256 default_config_size=5 default_logging_size=256 +# -1 indicates data partition should use remaining disk +default_data_size=-1 + +boot_min_size=50 +root_min_size=256 +config_min_size=5 +logging_min_size=5 +data_min_size=5 +swap_min_size=5 get_selected_drive_size() { @@ -33,20 +42,24 @@ get_selected_drive_size() size=$(hal-get-property --udi "$udi" --key storage.removable.media_size) fi SPACE=$(echo "scale=0; $size / (1024 * 1024)" | bc -l) - echo "selected device: $DRIVE ($SPACE MB)" + echo "Selected Device: $DRIVE ($SPACE MB)" } check_partition_sizes() { local disk_size need_size + local min_data_size=$DATA_SIZE + if [ "$DATA_SIZE" = -1 ]; then + min_data_size=5 + fi + + printf "\n" get_selected_drive_size disk_size=$SPACE 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" + "+ $CONFIG_SIZE + $LOGGING_SIZE + $min_data_size" | bc -l) if [ $need_size -gt $disk_size ]; then gap_size=$(echo "scale=0; $need_size-$disk_size;" | bc -l) @@ -59,6 +72,8 @@ check_partition_sizes() printf "You need an addition $gap_size MB of storage.\n" printf "\n" return 1 + else + printf "Required Space : $need_size MB\n\n" fi return 0 @@ -126,19 +141,40 @@ do_configure() DRIVE=$(get_dev_name) || exit 1 get_selected_drive_size - for i in boot swap root config logging ; do + printf "\n\nPlease configure storage partitions.\n\n" + printf "Enter partition sizes in MB.\n" + printf "A value of 0 indicates the partition should be disabled.\n" + printf "If the partition is enabled, it will have a minimum valid size.\n" + printf "For the Data partition, a size of -1 indicates that the\n" + printf "partition should use up the remaining space on the disk.\n\n" + + for i in boot swap root config logging data ; do + part_regexp="^0$" + if [ "$i" = "data" ]; then + part_regexp="^\-1|0$" + fi uc=$(echo $i|tr '[[:lower:]]' '[[:upper:]]') - var=${uc}_SIZE - eval "size=\$$var" - read -ep "Change $i partition size (Currently $size MB)? " + size_var=${uc}_SIZE + eval "size=\$$size_var" + min_size_var=${i}_min_size + eval "min_size=\$$min_size_var" + read -ep "Change $i partition size. (Current $size MB, Minimum $min_size MB)? " r=$REPLY test -z "$r" && r=$size - if [[ $r =~ ^[0-9]+$ ]] && [[ $r -ge 0 ]]; then - eval "$var=$r" + if [[ $r =~ ^-*[0-9]+$ ]] && [[ $r -ge $min_size || + $r =~ $part_regexp ]] ; then + eval "$size_var=$r" else printf "invalid $i size: '$r' retaining $size MB.\n" fi done + + if ! check_partition_sizes; then + printf "Please try partitioning again.\n" + DRIVE+ return 1 + fi + # save input variables augtool <<EOF set /files$OVIRT_DEFAULTS/OVIRT_INIT $DRIVE @@ -147,6 +183,7 @@ set /files$OVIRT_DEFAULTS/OVIRT_VOL_SWAP_SIZE $SWAP_SIZE set /files$OVIRT_DEFAULTS/OVIRT_VOL_ROOT_SIZE $ROOT_SIZE set /files$OVIRT_DEFAULTS/OVIRT_VOL_CONFIG_SIZE $CONFIG_SIZE set /files$OVIRT_DEFAULTS/OVIRT_VOL_LOGGING_SIZE $LOGGING_SIZE +set /files$OVIRT_DEFAULTS/OVIRT_VOL_DATA_SIZE $DATA_SIZE EOF } @@ -157,6 +194,13 @@ do_review() return fi + local data_size_display="$DATA_SIZE MB" + if [ "$DATA_SIZE" = -1 ]; then + local remaining_mb=$(( $SPACE - $BOOT_SIZE - $SWAP_SIZE \ + - $ROOT_SIZE - $CONFIG_SIZE - $LOGGING_SIZE )) + data_size_display="$remaining_mb MB" + fi + cat <<EOF The local disk will be repartitioned as follows: @@ -168,6 +212,7 @@ The local disk will be repartitioned as follows: Installation partition size: $ROOT_SIZE MB Configuration partition size: $CONFIG_SIZE MB Logging partition size: $LOGGING_SIZE MB + Data partition size: $data_size_display EOF } @@ -277,14 +322,26 @@ perform_partitioning() tune2fs -c 0 -i 0 /dev/HostVG/Logging echo "/dev/HostVG/Logging /var/log ext3 defaults 0 0" >> /etc/fstab fi - log "Creating data partition" - lvcreate --name Data -l 100%FREE /dev/HostVG - mke2fs -T ext3 /dev/HostVG/Data -L "DATA" - tune2fs -c 0 -i 0 /dev/HostVG/Data - echo "/dev/HostVG/Data /data ext3 defaults 0 0" >> /etc/fstab - echo "/data/images /var/lib/libvirt/images bind bind 0 0" >> /etc/fstab - log "Mounting data partition" - mount_data + + local use_data=1 + if [ "$DATA_SIZE" -eq -1 ]; then + log "Creating data partition with remaining free space" + lvcreate --name Data -l 100%FREE /dev/HostVG + use_data=0 + elif [ "$DATA_SIZE" -gt 0 ]; then + log "Creating data partition" + lvcreate --name Data --size ${DATA_SIZE}M /dev/HostVG + use_data=0 + fi + + if [ "$use_data" = 0 ]; then + mke2fs -T ext3 /dev/HostVG/Data -L "DATA" + tune2fs -c 0 -i 0 /dev/HostVG/Data + echo "/dev/HostVG/Data /data ext3 defaults 0 0" >> /etc/fstab + echo "/data/images /var/lib/libvirt/images bind bind 0 0" >> /etc/fstab + log "Mounting data partition" + mount_data + fi log "Mounting config partition" if mount_config; then @@ -365,6 +422,7 @@ BOOT_SIZE=${OVIRT_VOL_BOOT_SIZE:-$default_boot_size} ROOT_SIZE=${OVIRT_VOL_ROOT_SIZE:-$default_root_size} CONFIG_SIZE=${OVIRT_VOL_CONFIG_SIZE:-$default_config_size} LOGGING_SIZE=${OVIRT_VOL_LOGGING_SIZE:-$default_logging_size} +DATA_SIZE=${OVIRT_VOL_DATA_SIZE:-$default_data_size} if [ -n "$OVIRT_INIT" ]; then # if present, use the drive selected with 'ovirt_init' boot parameter diff --git a/scripts/ovirt-early b/scripts/ovirt-early index 6c7b29b..a7cf4dc 100755 --- a/scripts/ovirt-early +++ b/scripts/ovirt-early @@ -116,7 +116,7 @@ start() { # oVirt boot parameters # BOOTIF=link|eth*|<MAC> (appended by pxelinux) # ovirt_init=usb|scsi[:serial#] - # ovirt_vol=BOOT_MB:SWAP_MB:ROOT_MB:CONFIG_MB:LOGGING_MB + # ovirt_vol=BOOT_MB:SWAP_MB:ROOT_MB:CONFIG_MB:LOGGING_MB:DATA_MB # ovirt_overcommit # ovirt_local_boot # ovirt_standalone @@ -147,13 +147,17 @@ start() { # e.g. ovirt_init=usb:Generic_STORAGE_DEVICE_0000145418-0:0 init - # ovirt_vol=BOOT_MB:SWAP_MB:ROOT_MB:CONFIG_MB:LOGGING_MB + # ovirt_vol=BOOT_MB:SWAP_MB:ROOT_MB:CONFIG_MB:LOGGING_MB:DATA_MB # local partition sizes in MB vol_boot_size vol_swap_size vol_root_size vol_config_size vol_logging_size+ # data size can be set to 0 to disable data partition, -1 to use + # remaining free space after the other above partitions are defined + # or a specific positive number in MB + vol_data_size # ovirt_local_boot # install/update oVirt Node image on the local installation target disk @@ -250,7 +254,7 @@ start() { ;; ovirt_vol=*) i=${i#ovirt_vol=} - eval $(printf $i|awk -F: '{print "vol_boot_size="$1; print "vol_swap_size="$2; print "vol_root_size="$3; print "vol_config_size="$4; print "vol_logging_size="$5;}') + eval $(printf $i|awk -F: '{print "vol_boot_size="$1; print "vol_swap_size="$2; print "vol_root_size="$3; print "vol_config_size="$4; print "vol_logging_size="$5; print "vol_data_size="$6;}') ;; ovirt_local_boot*) local_boot=1 @@ -305,7 +309,7 @@ start() { ip_gateway=$gateway fi # save boot parameters as defaults for ovirt-config-* - params="bootif init vol_boot_size vol_swap_size vol_root_size vol_config_size vol_logging_size local_boot standalone overcommit ip_address ip_netmask ip_gateway ipv6 dns syslog_server syslog_port collectd_server collectd_port bootparams hostname" + params="bootif init vol_boot_size vol_swap_size vol_root_size vol_config_size vol_logging_size vol_data_size local_boot standalone overcommit ip_address ip_netmask ip_gateway ipv6 dns syslog_server syslog_port collectd_server collectd_port bootparams hostname" mount_config if [ -e $OVIRT_DEFAULTS ]; then echo "update ovirt defaults" -- 1.6.0.6
Alan Pevec
2009-Jan-19 12:44 UTC
[Ovirt-devel] [PATCH node] Add data partition to ovirt_vol parameter and o-c-storage
ack and pushed -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://listman.redhat.com/archives/ovirt-devel/attachments/20090119/d56adc36/attachment.htm>