Updated patch for improved automatic LVM volume group and logical volume naming. Incorporated changes suggested by Hans and Jeremy.
Try to name volume groups as vg_HOSTNAME and logical volumes as lv_MOUNTPOINT, if we can. Swap partitions will be lv_swapNN where NN is a unique number in the instance where more than one swap partition in use. The / partition will get the name lv_root. --- autopart.py | 26 ++++++++++++++++++++++---- lvm.py | 57 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 59 insertions(+), 24 deletions(-)
diff --git a/autopart.py b/autopart.py index ff62f37..64237dd 100644 --- a/autopart.py +++ b/autopart.py @@ -1463,7 +1463,7 @@ def doAutoPartition(anaconda): # FIXME: this is a hack so that autopartition'd vgs # can have a unique name if req.autoname == 1 and req.volumeGroupName == "lvm": - n = lvm.createSuggestedVGName(partitions) + n = lvm.createSuggestedVGName(partitions, anaconda.id.network) req.volumeGroupName = n
if (isinstance(req, partRequests.LogicalVolumeRequestSpec)): @@ -1649,6 +1649,7 @@ def autoCreateLVMPartitionRequests(autoreq): requests.append(nr)
volnum = 0 + for (mntpt, fstype, minsize, maxsize, grow, format, asvol) in autoreq: if fstype: ptype = fsset.fileSystemTypeGet(fstype) @@ -1663,17 +1664,34 @@ def autoCreateLVMPartitionRequests(autoreq): grow = grow, format = format) else: + # try to incorporate the mount point in to the logical volume name + if mntpt is not None and mntpt != '': + if mntpt == '/': + lvtemplate = 'lv_root' + else: + tmp = string.strip(mntpt) + tmp = tmp.replace('/', '_') + + while tmp.startswith('_'): + tmp = tmp[1:] + + lvtemplate = "lv_%s" % (tmp,) + else: + if ptype == fsset.fileSystemTypeGet("swap"): + lvtemplate = "lv_swap" + else: + lvtemplate = "LogVol%02d" % (volnum,) + volnum += 1 + newrequest = partRequests.LogicalVolumeRequestSpec(ptype, mountpoint = mntpt, size = minsize, maxSizeMB = maxsize, grow = grow, format = format, - lvname = "LogVol%02d" %(volnum,), + lvname = "%s" % (lvtemplate,), volgroup = "lvm") - volnum += 1
- requests.append(newrequest)
return requests diff --git a/lvm.py b/lvm.py index 00f7c02..0e07a1f 100644 --- a/lvm.py +++ b/lvm.py @@ -528,45 +528,62 @@ def getMaxLVSize(pe): else: return (16*1024*1024) #Max is 16TiB
-def createSuggestedVGName(partitions): +def createSuggestedVGName(partitions, network): """Given list of partition requests, come up with a reasonable VG name
partitions - list of requests """ - i = 0 - while 1: - tmpname = "VolGroup%02d" % (i,) - if not partitions.isVolumeGroupNameInUse(tmpname): - break
- i = i + 1 - if i>99: - tmpname = "" + # try to create a volume group name incorporating the hostname + hn = network.hostname + if hn is not None and hn != '': + if hn == 'localhost' or hn == 'localhost.localdomain': + vgtemplate = "VolGroup" + elif hn.find('.') != -1: + vgtemplate = "vg_%s" % (hn.split('.')[0].lower(),) + else: + vgtemplate = "vg_%s" % (hn.lower(),) + else: + vgtemplate = "VolGroup" + + if not partitions.isVolumeGroupNameInUse(vgtemplate): + return vgtemplate + else: + i = 0 + while 1: + tmpname = "%s%02d" % (vgtemplate, i,) + if not partitions.isVolumeGroupNameInUse(tmpname): + break + + i += 1 + if i > 99: + tmpname = "" + + return tmpname
- return tmpname - def createSuggestedLVName(logreqs): """Given list of LV requests, come up with a reasonable LV name
partitions - list of LV requests for this VG """ + i = 0
lnames = [] for lv in logreqs: - lnames.append(lv.logicalVolumeName) - + lnames.append(lv.logicalVolumeName) + while 1: - tmpname = "LogVol%02d" % (i,) - if (logreqs is None) or (tmpname not in lnames): - break + tmpname = "LogVol%02d" % (i,) + if (logreqs is None) or (tmpname not in lnames): + break
- i = i + 1 - if i>99: - tmpname = "" + i += 1 + if i > 99: + tmpname = ""
return tmpname - + def getVGUsedSpace(vgreq, requests, diskset): vgused = 0 for request in requests.requests:
David Cantrell wrote:
Try to name volume groups as vg_HOSTNAME and logical volumes as lv_MOUNTPOINT, if we can. Swap partitions will be lv_swapNN where NN is a unique number in the instance where more than one swap partition in use. The / partition will get the name lv_root.
autopart.py | 26 ++++++++++++++++++++++---- lvm.py | 57 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 59 insertions(+), 24 deletions(-)
I've got one last comment. Above you claim that swap partitions will be called lv_swapNN, but ...
diff --git a/autopart.py b/autopart.py index ff62f37..64237dd 100644 --- a/autopart.py +++ b/autopart.py @@ -1463,7 +1463,7 @@ def doAutoPartition(anaconda): # FIXME: this is a hack so that autopartition'd vgs # can have a unique name if req.autoname == 1 and req.volumeGroupName == "lvm":
n = lvm.createSuggestedVGName(partitions)
n = lvm.createSuggestedVGName(partitions, anaconda.id.network) req.volumeGroupName = n if (isinstance(req, partRequests.LogicalVolumeRequestSpec)):
@@ -1649,6 +1649,7 @@ def autoCreateLVMPartitionRequests(autoreq): requests.append(nr)
volnum = 0
- for (mntpt, fstype, minsize, maxsize, grow, format, asvol) in autoreq: if fstype: ptype = fsset.fileSystemTypeGet(fstype)
@@ -1663,17 +1664,34 @@ def autoCreateLVMPartitionRequests(autoreq): grow = grow, format = format) else:
# try to incorporate the mount point in to the logical volume name
if mntpt is not None and mntpt != '':
if mntpt == '/':
lvtemplate = 'lv_root'
else:
tmp = string.strip(mntpt)
tmp = tmp.replace('/', '_')
while tmp.startswith('_'):
tmp = tmp[1:]
lvtemplate = "lv_%s" % (tmp,)
else:
if ptype == fsset.fileSystemTypeGet("swap"):
lvtemplate = "lv_swap"
I don't see you adding NN here, now I think that in this code path we can never have multiple swaps, but I'm not sure.
<snip>
Regards,
Hans
Hans de Goede wrote:
David Cantrell wrote:
Try to name volume groups as vg_HOSTNAME and logical volumes as lv_MOUNTPOINT, if we can. Swap partitions will be lv_swapNN where NN is a unique number in the instance where more than one swap partition in use. The / partition will get the name lv_root.
autopart.py | 26 ++++++++++++++++++++++---- lvm.py | 57 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 59 insertions(+), 24 deletions(-)
I've got one last comment. Above you claim that swap partitions will be called lv_swapNN, but ...
diff --git a/autopart.py b/autopart.py index ff62f37..64237dd 100644 --- a/autopart.py +++ b/autopart.py @@ -1463,7 +1463,7 @@ def doAutoPartition(anaconda): # FIXME: this is a hack so that autopartition'd vgs # can have a unique name if req.autoname == 1 and req.volumeGroupName == "lvm":
n = lvm.createSuggestedVGName(partitions)
n = lvm.createSuggestedVGName(partitions,
anaconda.id.network) req.volumeGroupName = n
if (isinstance(req, partRequests.LogicalVolumeRequestSpec)):
@@ -1649,6 +1649,7 @@ def autoCreateLVMPartitionRequests(autoreq): requests.append(nr)
volnum = 0
- for (mntpt, fstype, minsize, maxsize, grow, format, asvol) in
autoreq: if fstype: ptype = fsset.fileSystemTypeGet(fstype) @@ -1663,17 +1664,34 @@ def autoCreateLVMPartitionRequests(autoreq): grow = grow, format = format) else:
# try to incorporate the mount point in to the logical
volume name
if mntpt is not None and mntpt != '':
if mntpt == '/':
lvtemplate = 'lv_root'
else:
tmp = string.strip(mntpt)
tmp = tmp.replace('/', '_')
while tmp.startswith('_'):
tmp = tmp[1:]
lvtemplate = "lv_%s" % (tmp,)
else:
if ptype == fsset.fileSystemTypeGet("swap"):
lvtemplate = "lv_swap"
I don't see you adding NN here, now I think that in this code path we can never have multiple swaps, but I'm not sure.
Since this is the auto partitioning request builder, there is generally no chance of the system deciding you should have more than one swap partition. However, it is the partitioning code and I could be wrong.
I'm adding in some code to the patch that will count up the number of swap partition requests and tack on the NN number to the end of lv_swap iff the number of swap partitions requested is > 1. If you only have one swap partition, I'd rather it lay down "lv_swap" instead of "lv_swap00".
Updated patch coming.
anaconda-devel@lists.fedoraproject.org