tags 411943 + patch
thanks

On Sun, May 25, 2008 at 06:09:33AM -0400, Avery Fay wrote:
> I think this bug is quite high priority and should definitely be fixed 
> for Lenny. I recently installed from a debian installer snapshot and 
> manually partitioning LVM was nearly impossible. It may not make much of 
> a difference when you're partitioning 20 GB or so, but the drive I was 
> partitioning was 300 GB. You're forced to play "guess and check" and 
> given the inefficiencies of a text installer it's painful.

The attached patch should fix the issue.  Details in its header.

PS: The changelogs might be quite bogus as I decided to tackle this
    issue while working on other aspects of partman-lvm.

Cheers,
-- 
Jérémy Bobbio                        .''`. 
[EMAIL PROTECTED]                    : :Ⓐ  :  # apt-get install anarchism
                                    `. `'` 
                                      `-   
commit cccad52a7fb1207ade93d574b5de6fbc4488903a
Author: Jérémy Bobbio <[EMAIL PROTECTED]>
Date:   Sat Jul 19 22:34:58 2008 +0000

    Harmonize size specification used for new LVs
    
    Previously, the size given when creating a new Logical Volume was given
    directly to lvcreate.  The later uses size units as multiple of 1024
    whereas the rest of partman uses size units as multiple of 1000.
    
    In order to solve this, we now gives LVM extents to lvcreate instead of
    size.  The following was modified in lib/lvm-base.sh:
     - lv_create() now uses extents instead of size,
     - lvm_size_from_human() has been renamed to
       lvm_extents_from_human(),
     - As extent sizes are specific to a given Volume
       Group, lvm_extents_from_human() take the VG name as its first
       argument.
    
    do_lv_create() in partman-lvm and perform_recipe_by_lvm in
    partman-auto-lvm were modified accordingly.
    
    (Closes: #411943)

diff --git a/packages/partman/partman-auto-lvm/debian/changelog b/packages/partman/partman-auto-lvm/debian/changelog
index 7200752..cae714e 100644
--- a/packages/partman/partman-auto-lvm/debian/changelog
+++ b/packages/partman/partman-auto-lvm/debian/changelog
@@ -1,3 +1,11 @@
+partman-auto-lvm (28) UNRELEASED; urgency=low
+
+  [ Jérémy Bobbio ]
+  * Update perform_recipe_by_lvm to use extents when calling lv_create().
+    Depends: partman-lvm (>= 62)
+
+ -- Jérémy Bobbio <[EMAIL PROTECTED]>  Sat, 19 Jul 2008 22:29:05 +0000
+
 partman-auto-lvm (27) unstable; urgency=low
 
   [ Updated translations ]
diff --git a/packages/partman/partman-auto-lvm/debian/control b/packages/partman/partman-auto-lvm/debian/control
index f0cc25c..57785c2 100644
--- a/packages/partman/partman-auto-lvm/debian/control
+++ b/packages/partman/partman-auto-lvm/debian/control
@@ -9,5 +9,5 @@ Vcs-Svn: svn://svn.debian.org/d-i/trunk/packages/partman/partman-auto-lvm
 Package: partman-auto-lvm
 XC-Package-Type: udeb
 Architecture: all
-Depends: ${misc:Depends}, partman-base (>= 114), partman-auto (>= 74), partman-lvm (>= 58), di-utils (>= 1.15)
+Depends: ${misc:Depends}, partman-base (>= 114), partman-auto (>= 74), partman-lvm (>= 62), di-utils (>= 1.15)
 Description: Automatically partition storage devices using LVM
diff --git a/packages/partman/partman-auto-lvm/perform_recipe_by_lvm b/packages/partman/partman-auto-lvm/perform_recipe_by_lvm
index c530104..d7f9abc 100755
--- a/packages/partman/partman-auto-lvm/perform_recipe_by_lvm
+++ b/packages/partman/partman-auto-lvm/perform_recipe_by_lvm
@@ -73,9 +73,11 @@ foreach_partition '
 	fi
 
 	if [ "$last" = yes ]; then
-		lv_create $VG_name "$lvname" full || autopartitioning_failed
+		vg_get_info "$VG_name"
+		lv_create $VG_name "$lvname" $FREEPE || autopartitioning_failed
 	else
-		lv_create $VG_name "$lvname" $(($1/1024)) || autopartitioning_failed
+		extents=$(lvm_extents_from_human $VG_name "${1}K")
+		lv_create $VG_name "$lvname" $extents || autopartitioning_failed
 	fi
 
 	# Hyphens in VG or LV names are doubled under /dev/mapper
diff --git a/packages/partman/partman-lvm/choose_partition/lvm/do_option b/packages/partman/partman-lvm/choose_partition/lvm/do_option
index 8fba4dc..bdb7b18 100755
--- a/packages/partman/partman-lvm/choose_partition/lvm/do_option
+++ b/packages/partman/partman-lvm/choose_partition/lvm/do_option
@@ -298,7 +298,7 @@ do_vg_reduce() {
 }
 
 do_lv_create() {
-	local vgs vg output lv size max_size
+	local vgs vg output lv size extents max_size
 
 	# Find eligible VGs
 	vgs=""
@@ -359,17 +359,18 @@ do_lv_create() {
 	db_go || return
 	db_get partman-lvm/lvcreate_size
 	[ -n "$RET" ] || return
-	size=$(lvm_size_from_human "$RET")
+	size="$RET"
+	extents=$(lvm_extents_from_human "$vg" "$size")
 
 	# If the maximum free space should be used for the new LV, use the
 	# number of physical extents (PEs) because the size given by LVM
 	# might not be accurate, resulting in an error because the VG is
 	# not big enough (see #250594).
 	if [ "$size" = "$max_size" ]; then
-		size=full
+		extents=$FREEPE
 	fi
 
-	if ! lv_create "$vg" "$lv" "$size"; then
+	if ! lv_create "$vg" "$lv" "$extents"; then
 		db_subst partman-lvm/lvcreate_error VG $vg
 		db_subst partman-lvm/lvcreate_error LV $lv
 		db_subst partman-lvm/lvcreate_error SIZE $RET
diff --git a/packages/partman/partman-lvm/debian/changelog b/packages/partman/partman-lvm/debian/changelog
index 3c30331..21856c9 100644
--- a/packages/partman/partman-lvm/debian/changelog
+++ b/packages/partman/partman-lvm/debian/changelog
@@ -7,6 +7,12 @@ partman-lvm (62) UNRELEASED; urgency=low
         activating Volume Groups,
       - lvm, run later, will ensure that Physical Volumes have "lvm" as
         method, and create free space for Logical Volumes if needed.
+  * Harmonize size specification used when creating new Logical Volumes:
+     - lv_create() now uses extents instead of size,
+     - lvm_size_from_human() has been renamed to lvm_extents_from_human(),
+     - As extent sizes are specific to a given Volume Group,
+       lvm_extents_from_human() take the VG name as its first argument.
+    Breaks: partman-auto-lvm (<= 27)                          (Closes: #411943)
 
  -- Jérémy Bobbio <[EMAIL PROTECTED]>  Sat, 19 Jul 2008 19:02:55 +0000
 
diff --git a/packages/partman/partman-lvm/lib/lvm-base.sh b/packages/partman/partman-lvm/lib/lvm-base.sh
index 5adc657..b4e1337 100644
--- a/packages/partman/partman-lvm/lib/lvm-base.sh
+++ b/packages/partman/partman-lvm/lib/lvm-base.sh
@@ -11,9 +11,14 @@ export LVM_SUPPRESS_FD_WARNINGS=1
 ###############################################################################
 
 # Convert common terms for disk sizes into something LVM understands.
-#  e.g. "200 gb" -> "200G"
-lvm_size_from_human() {
-	echo "$1" | tr "kmgt" "KMGT" | sed -e 's/[[:space:]]//g;s/\([KMGT]\)[bB]/\1/'
+#  e.g. "200 gb" -> "47683"
+lvm_extents_from_human() {
+	local vg size extent_size
+	vg="$1"
+	size="$2"
+
+	extent_size=$(vgs --noheadings --units K -o vg_extent_size "$vg")
+	echo $(($(human2longint "$size") / $(human2longint "$extent_size")))
 }
 
 # Convert LVM disk sizes into something human readable.
@@ -314,20 +319,12 @@ lv_list() {
 
 # Create a LV
 lv_create() {
-	local vg lv size
+	local vg lv extents
 	vg="$1"
 	lv="$2"
-	size="$3"
+	extents="$3"
 
-	if [ "$size" = full ]; then
-		vg_get_info "$vg"
-		if [ "$FREEPE" -lt 1 ]; then
-			return 1
-		fi
-		log-output -t partman-lvm lvcreate -l "$FREEPE" -n "$lv" "$vg"
-	else
-		log-output -t partman-lvm lvcreate -L "$size" -n "$lv" $vg
-	fi
+	log-output -t partman-lvm lvcreate -l "$extents" -n "$lv" $vg
 	return $?
 }
 

Attachment: signature.asc
Description: Digital signature

Reply via email to