add feature to reserve space umounted on disk

Change-Id: I6060a48f5e38521974b34fef6d8990f1127b5813
Closes-Bug: 1399880
This commit is contained in:
xiaodongwang 2014-12-06 00:19:41 -08:00
parent bc97a1b193
commit 1c245a51f1
3 changed files with 85 additions and 5 deletions

View File

@ -2,6 +2,7 @@
#set partition = $getVar('partition', None)
#set partition_size = $getVar('partition_size', None)
#set partition_maxsize = $getVar('partition_maxsize', None)
#set disk_reserve_size = $getVar('disk_reserve_size', None)
#if $hostname == None
#set $vgname = "VolGroup00"
@ -113,6 +114,30 @@ echo "only partition \$sorted_disks_str" >> /tmp/log
echo "ignoredisk --only-use=\$sorted_disks_str" >> /tmp/part-include
#end if
declare -A reserve_disks_size
#if $disk_reserve_size != None
#set disk_sizes = [disk_size.strip() for disk_size in $disk_reserve_size.split(';') if disk_size.strip()]
#for disk_and_size in $disk_sizes
#set disk_name, size = $disk_and_size.split(' ', 1)
#set disk_name = $disk_name.strip()
#if $size.endswith('K')
#set disk_size = $int($size[:-1])
#elif $size.endswith('G')
#set disk_size = $int($size[:-1]) * 1000
#elif $size.endswith('T')
#set disk_size = $int($size[:-1]) * 1000000
#else
#set disk_size = $int($size)
#end if
#if $getVar('partition_by_path', '0') != "0"
disk=/dev/disk/by-path/\${disk_mapping[\${disk_name}]}
#else
disk=/dev/${disk_name}
#end if
reserve_disks_size[\$disk]=${disk_size}
#end for
#end if
declare -A partitions_percentage
declare -A partitions_name
declare -A partitions_size
@ -241,8 +266,14 @@ let disk_offset=0
while [ \$disk_offset -lt \$disk_nums ];
do
let pv_id=\$disk_offset+1
disk=\${sorted_disks[\$disk_offset]}
if [ ! -z \${reserve_disks_size[\${disk}]} ]; then
reserve_partname="reverse.0\$pv_id"
reserve_disk_size=\${reserve_disks_size[\${disk}]}
echo "part \${reserve_partname} --size=\${reserve_disk_size} --ondisk=\${disk}" >> /tmp/part-include
fi
partname="pv.0\$pv_id"
echo "part \$partname --size=1 --grow --ondisk=\${sorted_disks[\$disk_offset]}" >> /tmp/part-include
echo "part \$partname --size=1 --grow --ondisk=\${disk}" >> /tmp/part-include
vggroup="\$vggroup \$partname"
let disk_offset=\$disk_offset+1;
done

View File

@ -18,3 +18,4 @@ d-i partman/confirm_write_changes_to_disks_and_configure_lvm boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i mdadm/boot_degraded boolean true
d-i partman-auto-lvm/no_boot boolean true
d-i partman-basicfilesystems/no_mount_point false

View File

@ -2,6 +2,7 @@
#set partition = $getVar('partition', None)
#set partition_size = $getVar('partition_size', None)
#set partition_maxsize = $getVar('partition_maxsize', None)
#set disk_reserve_size = $getVar('disk_reserve_size', None)
#if $hostname == None
#set $vgname = "VolGroup00"
@ -32,6 +33,7 @@ while [ \$disk_mapping_offset -lt \$disk_mapping_nums ]; do
fi
disk_path=\$(echo \$1 | tr '-' '_' | tr ':' '_' | tr '.' '_')
eval "disk_\${disk_name}=\${disk_path}"
eval "disk_\${disk_path}=\${disk_path}"
eval "disk_path_\${disk_path}=/dev/\${disk_name}"
eval "disk_path_\${disk_name}=/dev/\${disk_name}"
fi
@ -133,8 +135,16 @@ echo "first disk \${first_disk_name}" >> /tmp/preseed.log
#if $getVar('keep_old_partitions', '0') != "0"
for disk_name in \${sorted_disks}; do
dd if=/dev/zero of=/dev/\${disk_name} bs=512 count=1
if [ -z \${disk_name} ]; then
continue
fi
eval "disk=\\${disk_path_\${disk_name}}"
if [ -z \${disk} ]; then
continue
fi
dd if=/dev/zero of=\${disk} bs=512 count=1
done
remove_disks=\${sorted_disks}
#else
remove_disks=\${disks}
@ -153,10 +163,13 @@ for disk_partition in \${disk_partitions}; do
remove_vg=""
remove_partition=""
for remove_disk_name in \${remove_disks}; do
eval "remove_disk=\\${disk_path_\${remove_disk_name}}"
if [ -z \${remove_disk_name} ]; then
continue
fi
eval "remove_disk=\\${disk_path_\${remove_disk_name}}"
if [ -z \${remove_disk} ]; then
continue
fi
if expr match "\${disk_partition}" "\${remove_disk}.*"; then
remove_vg="\$vg"
remove_partition="\${disk_partition}"
@ -200,6 +213,9 @@ done
select_disks=""
echo "remove disks \${remove_disks}" >> /tmp/preseed.log
for remove_disk_name in \${remove_disks}; do
if [ -z \${remove_disk_name} ]; then
continue
fi
eval "remove_disk=\\${disk_path_\${remove_disk_name}}"
if [ -z \$remove_disk ]; then
continue
@ -215,6 +231,9 @@ echo "select disks \${select_disks}" >> /tmp/preseed.log
partition_disks=""
for disk_name in \${sorted_disks}; do
if [ -z \${disk_name} ]; then
continue
fi
eval "disk=\\${disk_path_\${disk_name}}"
if [ -z \$disk ]; then
continue
@ -234,6 +253,24 @@ partition_fstype=$getVar('partition_fstype', 'ext3')
echo "default partition \${default_partition}" >> /tmp/preseed.log
echo "partition fstype \${partition_fstype}" >> /tmp/preseed.log
#if $disk_reserve_size != None
#set disk_sizes = [disk_size.strip() for disk_size in $disk_reserve_size.split(';') if disk_size.strip()]
#for disk_and_size in $disk_sizes
#set disk_name, size = $disk_and_size.split(' ', 1)
#set disk_name = $disk_name.strip()
#if $size.endswith('K')
#set disk_size = $int($size[:-1])
#elif $size.endswith('G')
#set disk_size = $int($size[:-1]) * 1000
#elif $size.endswith('T')
#set disk_size = $int($size[:-1]) * 1000000
#else
#set disk_size = $int($size)
#end if
reserve_disk_size_${disk_name}=${disk_size}
#end for
#end if
partition_names=""
default_partition_name=""
#if $partition != None
@ -392,7 +429,7 @@ fi
partition_param_boot="\${partition_fstype} \
\\$primary{ } \\$bootable{ } method{ format } \
format{ } use_filesystem{ } filesystem{ \${partition_fstype} } \
mountpoint{ /boot } device{ \$first_disk } \
mountpoint{ /boot } device{ \${first_disk} } \
"
if [ -z \$partition_point_swap ]; then
@ -418,7 +455,7 @@ fi
partition_param_swap="linux-swap \
\\$primary{ } method{ swap } format{ } \
device{ \$first_disk } \
device{ \${first_disk} } \
"
if [ -z \$partition_point_root ]; then
@ -471,10 +508,21 @@ mountpoint{ \$partition }"
done
for disk_name in \${sorted_disks}; do
if [ -z \${disk_name} ]; then
continue
fi
eval "disk=\\${disk_path_\${disk_name}}"
if [ -z \$disk ]; then
continue
fi
disk_name=\$(basename \$disk)
eval "reserve_disk_size=\\${reserve_disk_size_\${disk_name}}"
if [ ! -z \${reserve_disk_size} ]; then
reserve_disk_param="\${partition_fstype} \
method{ format } format{ } use_filesystem{ } filesystem{ \${partition_fstype} } device{ \${disk} }"
recipe="\$recipe \${reserve_disk_size} \${reserve_disk_size} \${reserve_disk_size} \${reserve_disk_param} ."
echo "reserve partition param \${disk_name} => \${reserve_disk_param}" >> /tmp/preseed.log
fi
disk_param="\${partition_fstype} \
\\$defaultignore{ } \\$primary{ } device{ \${disk} } \
method{ lvm } vg_name{ $vgname }"