[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [PATCH] Enforce limits on the number of partitions on a disk.
- From: David Lehman <dlehman redhat com>
- To: anaconda-devel-list redhat com
- Subject: Re: [PATCH] Enforce limits on the number of partitions on a disk.
- Date: Fri, 29 May 2009 12:11:39 -0500
On Thu, 2009-05-28 at 19:11 -0500, David Lehman wrote:
> Ignore preexisting disks with too many partitions. Also make sure we don't
> try to allocate more than the maximum allowed number of partitions from a
> disk during partitioning.
I've just used parted to create 17 partitions on a SCSI disk, then
created an ext4 filesystem on sda17, then mounted it. I am withdrawing
this patch, which I think was a stupid idea to begin with. Woo!
Dave
> ---
> storage/devicetree.py | 37 +++++++++++++++++++++++++++++++++++++
> storage/partitioning.py | 9 +++++++++
> 2 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/storage/devicetree.py b/storage/devicetree.py
> index f026348..c2241c5 100644
> --- a/storage/devicetree.py
> +++ b/storage/devicetree.py
> @@ -21,6 +21,7 @@
> #
>
> import os
> +import sys
> import block
> import re
>
> @@ -33,6 +34,7 @@ import formats
> import devicelibs.mdraid
> from udev import *
> from iutil import log_method_call
> +from constants import productName
>
> import gettext
> _ = lambda x: gettext.ldgettext("anaconda", x)
> @@ -120,6 +122,31 @@ def getLUKSPassphrase(intf, device, globalPassphrase):
>
> return (passphrase, isglobal)
>
> +def handleDiskMaxPartitionsExceeded(intf, device):
> + """ Ask user how to handle disk with too many partitions.
> +
> + Choices are to ignore the disk or to exit the installer.
> +
> + A return value of True indicates the user wants to continue with
> + installation without using this device.
> + """
> + maxPartitionCount = device.partedDisk.maxPrimaryPartitionCount + \
> + device.partedDisk.getMaxLogicalPartitions()
> + str = _("The drive %s has more than %d partitions on it,"
> + "which is the maximum number of partitions for disk of "
> + "this type. You will not be able to make changes to the "
> + "partitioning of this disk or use any partitions beyond "
> + "%s%d in %s") % (device.path, maxPartitionCount, device.name,
> + maxPartitionCount, productName)
> +
> + rc = intf.messageWindow(_("Warning"), str, type="custom",
> + custom_buttons = [_("_Reboot"), _("_Ignore")],
> + custom_icon="warning")
> + if rc == 0:
> + sys.exit(0)
> +
> + return True
> +
> # Don't really know where to put this.
> def questionInitializeDisk(intf=None, name=None):
> retVal = False # The less destructive default
> @@ -1114,6 +1141,16 @@ class DeviceTree(object):
> self.addIgnoredDisk(name)
> return
>
> + # make sure the disk does not have more partitions than are supported
> + if device.mediaPresent:
> + maxPartitionCount = device.partedDisk.maxPrimaryPartitionCount + \
> + device.partedDisk.getMaxLogicalPartitions()
> +
> + if len(device.partedDisk.partitions) > maxPartitionCount and \
> + handleDiskMaxPartitionsExceeded(self.intf, device):
> + self.addIgnoredDisk(name)
> + return
> +
> self._addDevice(device)
>
> # If this is a mac-formatted disk we just initialized, make sure the
> diff --git a/storage/partitioning.py b/storage/partitioning.py
> index 8e9ab3c..f2c036f 100644
> --- a/storage/partitioning.py
> +++ b/storage/partitioning.py
> @@ -697,6 +697,15 @@ def allocatePartitions(disks, partitions):
> # loop through disks
> for _disk in req_disks:
> disk = partedDisks[_disk.path]
> +
> + # check if we can allocate new partitions from this disk
> + max_parts = disk.maxPrimaryPartitionCount + \
> + disk.getMaxLogicalPartitions()
> + if len(disk.partitions) >= max_parts:
> + log.debug("disk %s already has its maximum allowable number"
> + " of partitions (%d)" % (_disk.name, max_parts))
> + continue
> +
> #for p in disk.partitions:
> # log.debug("disk %s: part %s" % (disk.device.path, p.path))
> sectorSize = disk.device.physicalSectorSize
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]