[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[PATCH] Remove all unused portions of partedUtils.
- From: Chris Lumens <clumens redhat com>
- To: anaconda-devel-list redhat com
- Cc:
- Subject: [PATCH] Remove all unused portions of partedUtils.
- Date: Mon, 6 Apr 2009 15:14:38 -0400
---
dmraid.py | 9 -
partedUtils.py | 917 --------------------------------------------------------
2 files changed, 0 insertions(+), 926 deletions(-)
diff --git a/dmraid.py b/dmraid.py
index 58aa559..8d07116 100644
--- a/dmraid.py
+++ b/dmraid.py
@@ -34,7 +34,6 @@ if not _bdModulePath in oldPath:
block.setBdevidPath(_bdModulePath + oldPath)
del oldPath
-import partedUtils
import raid
from flags import flags
@@ -228,14 +227,6 @@ def register_raid_device(dmname, newdevices, newlevel, newnumActive):
"""Register a new RAID device in the dmlist."""
raise NotImplementedError
-def lookup_raid_device(dmname):
- """Return the requested RAID device information."""
- for rs, parent, devices, level, nrDisks, totalDisks in \
- partedUtils.DiskSet.dmList:
- if dmname == rs.name:
- return (rs.name, devices, level, totalDisks)
- raise KeyError, "dm device not found"
-
def scanForMPath(drives):
log.debug("scanning for multipath on drives %s" % (drives,))
mpaths = []
diff --git a/partedUtils.py b/partedUtils.py
index dde4d0b..dd76336 100644
--- a/partedUtils.py
+++ b/partedUtils.py
@@ -45,79 +45,6 @@ log = logging.getLogger("anaconda")
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
-def get_partition_file_system_type(part):
- """Return the file system type of the parted.Partition part.
-
- Arguments:
- part -- parted.Partition object
-
- Return:
- Filesystem object (as defined in fsset.py)
- """
- if part.fileSystem is None and part.getFlag(parted.PARTITION_PREP):
- ptype = fsset.fileSystemTypeGet("PPC PReP Boot")
- elif part.fileSystem is None:
- return None
- elif (part.getFlag(parted.PARTITION_BOOT) and
- part.getSize(unit="MB") <= 1 and part.fileSystem.type == "hfs"):
- ptype = fsset.fileSystemTypeGet("Apple Bootstrap")
- elif part.fileSystem.type == "linux-swap":
- ptype = fsset.fileSystemTypeGet("swap")
- elif isEfiSystemPartition(part):
- ptype = fsset.fileSystemTypeGet("efi")
- elif isEfiSystemPartition(part):
- ptype = fsset.fileSystemTypeGet("efi")
- elif part.fileSystem.type in ("fat16", "fat32"):
- ptype = fsset.fileSystemTypeGet("vfat")
- else:
- try:
- ptype = fsset.fileSystemTypeGet(part.fileSystem.type)
- except:
- ptype = fsset.fileSystemTypeGet("foreign")
-
- return ptype
-
-
-def set_partition_file_system_type(part, fstype):
- """Set partition type of part to PedFileSystemType implied by fstype."""
- if fstype == None:
- return
- try:
- for flag in fstype.getPartedPartitionFlags():
- if not part.isFlagAvailable(flag):
- raise PartitioningError, ("requested file system type needs "
- "a flag that is not available.")
- part.setFlag(flag)
- if isEfiSystemPartition(part):
- part.system = parted.fileSystemType["fat32"]
- else:
- part.system = fstype.getPartedFileSystemType()
- except:
- print("Failed to set partition type to ", fstype.getName())
- pass
-
-def get_partition_drive(partition):
- """Return the device name for disk that PedPartition partition is on."""
- return partition.geometry.device.path[5:]
-
-def map_foreign_to_fsname(part):
- """Return the name associated with a foreign filesystem type."""
- if part._fileSystem:
- return part._fileSystem._type.name
- else:
- return _("None")
-
-def filter_partitions(disk, func):
- rc = []
- for part in disk.partitions:
- if func(part):
- rc.append(part)
- return rc
-
-def hasGptLabel(diskset, device):
- disk = diskset.disks[device]
- return disk.type == "gpt"
-
def isEfiSystemPartition(part):
if not part.active:
return False
@@ -127,162 +54,6 @@ def isEfiSystemPartition(part):
part.fileSystem.type in ("fat16", "fat32") and
isys.readFSLabel(part.getDeviceNodeName()) != "ANACONDA")
-def labelDisk(platform, deviceFile, forceLabelType=None):
- dev = parted.getDevice(deviceFile)
- label = platform.diskType
-
- if not forceLabelType is None:
- label = forceLabelType
- else:
- if label.name == 'msdos' and \
- dev.length > (2L**41) / dev.sectorSize and \
- 'gpt' in parted.archLabels[iutil.getArch()]:
- label = parted.diskType['gpt']
-
- disk = parted.freshDisk(dev, label)
- disk.commit()
- return disk
-
-# this is kind of crappy, but we don't really want to allow LDL formatted
-# dasd to be used during the install
-def checkDasdFmt(disk, intf):
- if not iutil.isS390():
- return 0
-
- if disk.type != "dasd":
- return 0
-
- # FIXME: there has to be a better way to check LDL vs CDL
- # how do I test ldl vs cdl?
- if disk.maxPrimaryPartitionCount > 1:
- return 0
-
- if intf:
- try:
- device = disk.device.path[5:]
- devs = isys.getDasdDevPort()
- dev = "/dev/%s (%s)" %(device, devs[device])
- except Exception, e:
- log.critical("exception getting dasd dev ports: %s" %(e,))
- dev = "/dev/%s" %(disk.device.path[5:],)
-
- rc = intf.messageWindow(_("Warning"),
- _("The device %s is LDL formatted instead of "
- "CDL formatted. LDL formatted DASDs are not "
- "supported for usage during an install of %s. "
- "If you wish to use this disk for installation, "
- "it must be re-initialized causing the loss of "
- "ALL DATA on this drive.\n\n"
- "Would you like to reformat this DASD using CDL "
- "format?")
- %(dev, productName), type = "yesno")
- if rc == 0:
- return 1
- else:
- return -1
- else:
- return 1
-
-
-def checkDiskLabel(disk, intf):
- """Check that the disk label on disk is valid for this machine type."""
- arch = iutil.getArch()
- if arch in parted.archLabels.keys():
- if disk.type in parted.archLabels[arch]:
- # this is kind of a hack since we don't want LDL to be used
- return checkDasdFmt(disk, intf)
- else:
- if disk.type == "msdos":
- return 0
-
- if intf:
- rc = intf.messageWindow(_("Warning"),
- _("/dev/%s currently has a %s partition "
- "layout. To use this drive for "
- "the installation of %s, it must be "
- "re-initialized, causing the loss of "
- "ALL DATA on this drive.\n\n"
- "Would you like to re-initialize this "
- "drive?")
- %(disk.device.path[5:], disk.type,
- productName), type="custom",
- custom_buttons = [ _("_Ignore drive"),
- _("_Re-initialize drive") ],
- custom_icon="question")
-
- if rc == 0:
- return 1
- else:
- return -1
- else:
- return 1
-
-def hasProtectedPartitions(drive, anaconda):
- rc = False
- if anaconda is None:
- return rc
-
- try:
- for protected in anaconda.id.storage.protectedPartitions:
- if protected.startswith(drive):
- part = protected[len(drive):]
- if part[0] == "p":
- part = part[1:]
- if part.isdigit():
- rc = True
- break
- except:
- pass
-
- return rc
-
-# attempt to associate a parted filesystem type on a partition that
-# didn't probe as one type or another.
-def validateFsType(part):
- # we only care about primary and logical partitions
- if not part.type in (parted.PARTITION_NORMAL,
- parted.PARTITION_LOGICAL):
- return
-
- if part.getFlag(parted.PARTITION_LVM) or part.getFlag(parted.PARTITION_RAID):
- return
-
- # if the partition already has a type, no need to search
- if part.fileSystem:
- return
-
- # first fsystem to probe wins, so sort the types into a preferred
- # order.
- fsnames = parted.fileSystemType.keys()
- goodTypes = ['ext3', 'ext2']
- badTypes = ['linux-swap',]
- for fstype in goodTypes:
- fsnames.remove(fstype)
- fsnames = goodTypes + fsnames
- for fstype in badTypes:
- fsnames.remove(fstype)
- fsnames.extend(badTypes)
-
- # now check each type, and set the partition system accordingly.
- for fsname in fsnames:
- fstype = parted.fileSystemType[fsname]
- try:
- parted.probeForSpecificFileSystem(fstype.name, part.geometry)
- # XXX verify that this will not modify system type
- # in the case where a user does not modify partitions
- part.system = fstype
- return
- except (parted.FileSystemException, parted.IOException):
- pass
-
-def isLinuxNative(part):
- """Check if the type is a 'Linux native' filesystem."""
- if part.getFlag(parted.PARTITION_RAID) or part.getFlag(parted.PARTITION_LVM) or \
- part.getFlag(parted.PARTITION_SWAP) or map_foreign_to_fsname(part) in ["ext2", "ext3", "jfs", "reiserfs", "xfs"]:
- return True
- else:
- return False
-
class DiskSet:
"""The disks in the system."""
@@ -300,13 +71,6 @@ class DiskSet:
self.anaconda = anaconda
self.devicesOpen = False
- def onlyPrimaryParts(self):
- for disk in self.disks.values():
- if disk.supportsFeature(parted.DISK_TYPE_EXTENDED):
- return 0
-
- return 1
-
def startMPath(self):
"""Start all of the dm multipath devices associated with the DiskSet."""
@@ -398,689 +162,8 @@ class DiskSet:
while DiskSet.mdList:
DiskSet.mdList.pop()
- def getInfo(self, readFn=lambda d: isys.readFSLabel(d)):
- """Return a dict keyed on device name, storing some sort of data
- about each device. This is typially going to be labels or UUIDs,
- as required by readFstab.
- """
- ret = {}
-
- encryptedDevices = self.anaconda.id.partitions.encryptedDevices
-
- for drive in self.driveList():
- # Don't read labels from drives we cleared using clearpart, as
- # we don't actually remove the existing filesystems so those
- # labels will still be present (#209291).
- if drive in DiskSet.skippedDisks:
- continue
-
- # ignoredisk takes precedence over clearpart (#186438).
- if DiskSet.exclusiveDisks != [] and \
- drive not in DiskSet.exclusiveDisks:
- continue
-
- disk = self.disks[drive]
- func = lambda part: (part.active and
- not (part.getFlag(parted.PARTITION_RAID)
- or part.getFlag(parted.PARTITION_LVM)))
- parts = filter_partitions(disk, func)
- for part in parts:
- node = part.getDeviceNodeName()
- crypto = encryptedDevices.get(node)
- if crypto and not crypto.openDevice():
- node = crypto.getDevice()
-
- val = readFn(node)
- if val:
- ret[node] = val
-
- if crypto:
- crypto.closeDevice()
-
- # not doing this right now, because we should _always_ have a
- # partition table of some kind on dmraid.
- #if False:
- # for rs in DiskSet.dmList or [] + DiskSet.mpList or []:
- # label = isys.readFSLabel(rs.name)
- # if label:
- # labels[rs.name] = label
-
- for dev, devices, level, numActive in DiskSet.mdList:
- crypto = encryptedDevices.get(dev)
- if crypto and not crypto.openDevice():
- dev = crypto.getDevice()
-
- val = readFn(dev)
- if val:
- ret[dev] = val
-
- if crypto:
- crypto.closeDevice()
-
- active = lvm.vgcheckactive()
- if not active:
- lvm.vgscan()
- lvm.vgactivate()
-
- for (vg, lv, size, lvorigin) in lvm.lvlist():
- if lvorigin:
- continue
- node = "%s/%s" % (vg, lv)
- crypto = encryptedDevices.get(node)
- if crypto and not crypto.openDevice():
- node = crypto.getDevice()
-
- val = readFn("/dev/" + node)
- if val:
- ret[node] = val
-
- if crypto:
- crypto.closeDevice()
-
- if not active:
- lvm.vgdeactivate()
-
- return ret
-
- def findExistingRootPartitions(self, upgradeany = 0):
- """Return a list of all of the partitions which look like a root fs."""
- rootparts = []
-
- self.startMPath()
- self.startDmRaid()
- self.startMdRaid()
-
- for dev, crypto in self.anaconda.id.partitions.encryptedDevices.items():
- # FIXME: order these so LVM and RAID always work on the first try
- if crypto.openDevice():
- log.error("failed to open encrypted device %s" % (dev,))
-
- if flags.cmdline.has_key("upgradeany"):
- upgradeany = 1
-
- for dev, devices, level, numActive in self.mdList:
- (errno, msg) = (None, None)
- found = 0
- theDev = dev
- crypto = self.anaconda.id.partitions.encryptedDevices.get(dev)
- if crypto and not crypto.openDevice():
- theDev = "/dev/%s" % (crypto.getDevice(),)
- elif crypto:
- log.error("failed to open encrypted device %s" % dev)
-
- fs = isys.readFSType(theDev)
- if fs is not None:
- try:
- isys.mount(theDev, self.anaconda.rootPath, fs,
- readOnly = True)
- found = 1
- except SystemError:
- pass
-
- if found:
- if os.access (self.anaconda.rootPath + '/etc/fstab', os.R_OK):
- (prod, ver) = getReleaseString(self.anaconda.rootPath)
-
- if upgradeany == 1 or self.anaconda.id.instClass.productUpgradable(prod, ver):
- try:
- label = isys.readFSLabel(theDev)
- except:
- label = None
-
- uuid = isys.readFSUuid(theDev)
- # XXX we could add the "raw" dev and let caller decrypt
- rootparts.append ((theDev, fs, prod+" "+ver, label, uuid))
- isys.umount(self.anaconda.rootPath)
-
- # now, look for candidate lvm roots
- lvm.vgscan()
- lvm.vgactivate()
-
- for dev, crypto in self.anaconda.id.partitions.encryptedDevices.items():
- # FIXME: order these so LVM and RAID always work on the first try
- if crypto.openDevice():
- log.error("failed to open encrypted device %s" % (dev,))
-
- for (vg, lv, size, lvorigin) in lvm.lvlist():
- if lvorigin:
- continue
- dev = "/dev/%s/%s" %(vg, lv)
- found = 0
- theDev = dev
- node = "%s/%s" % (vg, lv)
- dmnode = "mapper/%s-%s" % (vg, lv)
- crypto = self.anaconda.id.partitions.encryptedDevices.get(dmnode)
- if crypto and not crypto.openDevice():
- theDev = "/dev/%s" % (crypto.getDevice(),)
- elif crypto:
- log.error("failed to open encrypted device %s" % dev)
-
- fs = isys.readFSType(theDev)
- if fs is not None:
- try:
- isys.mount(theDev, self.anaconda.rootPath, fs,
- readOnly = True)
- found = 1
- except SystemError:
- pass
-
- if found:
- if os.access (self.anaconda.rootPath + '/etc/fstab', os.R_OK):
- (prod, ver) = getReleaseString(self.anaconda.rootPath)
-
- if upgradeany == 1 or self.anaconda.id.instClass.productUpgradable(prod, ver):
- try:
- label = isys.readFSLabel(theDev)
- except:
- label = None
-
- uuid = isys.readFSUuid(theDev)
- rootparts.append ((theDev, fs, prod+" "+ver, label, uuid))
- isys.umount(self.anaconda.rootPath)
-
- lvm.vgdeactivate()
-
- # don't stop raid until after we've looked for lvm on top of it
- self.stopMdRaid()
-
- drives = self.disks.keys()
- drives.sort()
-
- protected = self.anaconda.id.storage.protectedPartitions
-
- for drive in drives:
- disk = self.disks[drive]
- for part in disk.partitions:
- node = part.getDeviceNodeName()
- crypto = self.anaconda.id.partitions.encryptedDevices.get(node)
- if (part.active
- and (part.getFlag(parted.PARTITION_RAID)
- or part.getFlag(parted.PARTITION_LVM))):
- continue
- elif part.fileSystem or crypto:
- theDev = node
- if part.fileSystem:
- fstype = part.fileSystem.type
- else:
- fstype = None
-
- # parted doesn't tell ext4 from ext3
- if fstype == "ext3":
- fstype = isys.readFSType(theDev)
-
- if crypto and not crypto.openDevice():
- theDev = crypto.getDevice()
- fstype = isys.readFSType("/dev/%s" % theDev)
- elif crypto:
- log.error("failed to open encrypted device %s" % node)
-
- if not fstype or fstype not in fsset.getUsableLinuxFs():
- continue
-
- try:
- isys.mount("/dev/%s" % (theDev,),
- self.anaconda.rootPath, fstype)
- checkRoot = self.anaconda.rootPath
- except SystemError:
- continue
-
- if os.access (checkRoot + '/etc/fstab', os.R_OK):
- (prod, ver) = getReleaseString(checkRoot)
-
- if upgradeany == 1 or self.anaconda.id.instClass.productUpgradable(prod, ver):
- try:
- label = isys.readFSLabel("/dev/%s" % theDev)
- except:
- label = None
-
- uuid = isys.readFSUuid("/dev/%s" % (theDev,))
- rootparts.append (("/dev/%s" % (theDev,),
- fstype, prod+" "+ver, label, uuid))
-
- isys.umount(self.anaconda.rootPath)
-
- return rootparts
-
def driveList (self):
"""Return the list of drives on the system."""
drives = map(lambda x: x.name, self.anaconda.id.storage.disks)
drives.sort (isys.compareDrives)
return drives
-
- def savePartitions (self):
- """Write the partition tables out to the disks."""
- for disk in self.disks.values():
- if disk.device.path[5:].startswith("sd") and disk.lastPartitionNumber > 15:
- log.debug("not saving partition table of disk with > 15 partitions")
- del disk
- continue
-
- log.info("disk.commit() for %s" % (disk.device.path,))
- try:
- disk.commit()
- except:
- # if this fails, remove the disk so we don't use it later
- # Basically if we get here, badness has happened and we want
- # to prevent tracebacks from ruining the day any more.
- del disk
- continue
-
- # FIXME: this belongs in parted itself, but let's do a hack...
- if iutil.isX86() and disk.type == "gpt" and not iutil.isEfi():
- log.debug("syncing gpt to mbr for disk %s" % (disk.device.path,))
- iutil.execWithRedirect("gptsync", [disk.device.path,],
- stdout="/tmp/gptsync.log",
- stderr="/tmp/gptsync.err",
- searchPath = 1)
- del disk
- self.refreshDevices()
-
- def _addDisk(self, drive, disk):
- log.debug("adding drive %s to disk list" % (drive,))
- self.initializedDisks[drive] = True
- self.disks[drive] = disk
-
- def _removeDisk(self, drive, addSkip=True):
- msg = "removing drive %s from disk lists" % (drive,)
- if addSkip:
- msg += "; adding to skip list"
- log.debug(msg)
-
- if self.disks.has_key(drive):
- del self.disks[drive]
- if addSkip:
- if self.initializedDisks.has_key(drive):
- del self.initializedDisks[drive]
- DiskSet.skippedDisks.append(drive)
-
- def refreshDevices (self):
- """Reread the state of the disks as they are on disk."""
- self.closeDevices()
- self.disks = {}
- self.openDevices()
-
- def closeDevices (self):
- """Close all of the disks which are open."""
- self.stopDmRaid()
- self.stopMPath()
- for disk in self.disks.keys():
- #self.disks[disk].close()
- del self.disks[disk]
- self.devicesOpen = False
-
- def isDisciplineFBA (self, drive):
- if not iutil.isS390():
- return False
-
- drive = drive.replace('/dev/', '')
-
- if drive.startswith("dasd"):
- discipline = "/sys/block/%s/device/discipline" % (drive,)
- if os.path.isfile(discipline):
- try:
- fp = open(discipline, "r")
- lines = fp.readlines()
- fp.close()
-
- if len(lines) == 1:
- if lines[0].strip() == "FBA":
- return True
- except:
- log.error("failed to check discipline of %s" % (drive,))
- pass
-
- return False
-
- def dasdFmt (self, drive = None):
- """Format dasd devices (s390)."""
-
- if self.disks.has_key(drive):
- del self.disks[drive]
-
- w = self.anaconda.intf.progressWindow (_("Initializing"),
- _("Please wait while formatting drive %s...\n"
- ) % (drive,), 100)
-
- argList = [ "/sbin/dasdfmt",
- "-y",
- "-b", "4096",
- "-d", "cdl",
- "-F",
- "-P",
- "-f",
- "/dev/%s" % (drive,)]
-
- fd = os.open("/dev/null", os.O_RDWR | os.O_CREAT | os.O_APPEND)
- p = os.pipe()
- childpid = os.fork()
- if not childpid:
- os.close(p[0])
- os.dup2(p[1], 1)
- os.dup2(fd, 2)
- os.close(p[1])
- os.close(fd)
- os.execv(argList[0], argList)
- log.critical("failed to exec %s", argList)
- os._exit(1)
-
- os.close(p[1])
-
- num = ''
- sync = 0
- s = 'a'
- while s:
- try:
- s = os.read(p[0], 1)
- os.write(fd, s)
-
- if s != '\n':
- try:
- num = num + s
- except:
- pass
- else:
- if num:
- val = string.split(num)
- if (val[0] == 'cyl'):
- # printf("cyl %5d of %5d | %3d%%\n",
- val = int(val[5][:-1])
- w and w.set(val)
- # sync every 10%
- if sync + 10 <= val:
- isys.sync()
- sync = val
- num = ''
- except OSError, args:
- (errno, str) = args
- if (errno != 4):
- raise IOError, args
-
- try:
- (pid, status) = os.waitpid(childpid, 0)
- except OSError, (num, msg):
- print(__name__, "waitpid:", msg)
-
- os.close(fd)
-
- w and w.pop()
-
- if os.WIFEXITED(status) and (os.WEXITSTATUS(status) == 0):
- return 0
-
- return 1
-
- def _askForLabelPermission(self, intf, drive, clearDevs, initAll, ks):
- #Do not try to initialize device's part. table in rescue mode
- if self.anaconda.rescue:
- self._removeDisk(drive)
- return False
-
- rc = 0
- if (ks and (drive in clearDevs) and initAll) or \
- self.isDisciplineFBA(drive):
- rc = 1
- elif intf:
- deviceFile = "/dev/" + drive
- dev = parted.getDevice(deviceFile)
-
- msg = _("The partition table on device %s (%s %-0.f MB) was unreadable.\n\n"
- "To create new partitions it must be initialized, "
- "causing the loss of ALL DATA on this drive.\n\n"
- "This operation will override any previous "
- "installation choices about which drives to "
- "ignore.\n\n"
- "Would you like to initialize this drive, "
- "erasing ALL DATA?") % (drive, dev.model, dev.getSize(unit="MB"),)
-
- rc = intf.messageWindow(_("Warning"), msg, type="yesno")
-
- if rc != 0:
- return True
-
- self._removeDisk(drive)
- return False
-
- def _labelDevice(self, drive):
- log.info("Reinitializing label for drive %s" % (drive,))
-
- deviceFile = "/dev/" + drive
-
- try:
- try:
- # FIXME: need the right fix for z/VM formatted dasd
- if iutil.isS390() and drive[:4] == "dasd" and \
- not self.isDisciplineFBA(drive):
- if self.dasdFmt(drive):
- raise LabelError, drive
- dev = parted.getDevice(deviceFile)
- disk = parted.Disk(device=dev)
- else:
- disk = labelDisk(self.anaconda.platform, deviceFile)
- except Exception, msg:
- log.error("parted error: %s" % (msg,))
- raise
- except:
- (type, value, tb) = sys.exc_info()
- stack = inspect.getinnerframes(tb)
- exn = exception.AnacondaExceptionDump(type, value, stack)
- lines = exn.__str__()
- for line in lines:
- log.error(line)
- self._removeDisk(drive)
- raise LabelError, drive
-
- self._addDisk(drive, disk)
- return disk, dev
-
- def openDevices (self):
- """Open the disks on the system and skip unopenable devices."""
-
- if self.disks:
- return
- self.startMPath()
- self.startDmRaid()
-
- intf = self.anaconda.intf
- zeroMbr = self.anaconda.id.partitions.zeroMbr
-
- for drive in self.driveList():
- # ignoredisk takes precedence over clearpart (#186438).
- if drive in DiskSet.skippedDisks:
- continue
-
- if DiskSet.exclusiveDisks != [] and \
- drive not in DiskSet.exclusiveDisks:
- continue
-
- if not isys.mediaPresent(drive):
- DiskSet.skippedDisks.append(drive)
- continue
-
- disk = None
- dev = None
-
- if self.initializedDisks.has_key(drive):
- if not self.disks.has_key(drive):
- try:
- dev = parted.getDevice("/dev/%s" % (drive,))
- disk = parted.Disk(device=dev)
- self._addDisk(drive, disk)
- except:
- self._removeDisk(drive)
- continue
-
- ks = False
- clearDevs = []
- initAll = False
-
- if self.anaconda.isKickstart:
- ks = True
- clearDevs = self.anaconda.id.ksdata.clearpart.drives
- initAll = self.anaconda.id.ksdata.clearpart.initAll
-
- # FIXME: need the right fix for z/VM formatted dasd
- if iutil.isS390() \
- and drive[:4] == "dasd" \
- and isys.getDasdState(drive):
- try:
- if not self._askForLabelPermission(intf, drive, clearDevs,
- initAll, ks):
- raise LabelError, drive
-
- disk, dev = self._labelDevice(drive)
- except:
- continue
-
- if initAll and ((clearDevs is None) or (len(clearDevs) == 0) \
- or (drive in clearDevs)) and not flags.test \
- and not hasProtectedPartitions(drive, self.anaconda):
- try:
- disk, dev = self._labelDevice(drive)
- except:
- continue
-
- try:
- if not dev:
- dev = parted.getDevice("/dev/%s" % (drive,))
- disk = None
- except Exception, msg:
- log.debug("parted error: %s" % (msg,))
- self._removeDisk(drive, disk)
- continue
-
- try:
- if not disk:
- disk = parted.Disk(device=dev)
- self._addDisk(drive, disk)
- except Exception, msg:
- recreate = 0
- if zeroMbr:
- log.error("zeroMBR was set and invalid partition table "
- "found on %s" % (dev.path[5:]))
- recreate = 1
- else:
- if not self._askForLabelPermission(intf, drive, clearDevs,
- initAll, ks):
- continue
-
- recreate = 1
-
- if recreate == 1 and not flags.test:
- try:
- disk, dev = self._labelDevice(drive)
- except:
- continue
-
- filter_partitions(disk, validateFsType)
-
- # check for more than 15 partitions (libata limit)
- if drive.startswith('sd') and disk.lastPartitionNumber > 15:
- str = _("The drive /dev/%s has more than 15 partitions on it. "
- "The SCSI subsystem in the Linux kernel does not "
- "allow for more than 15 partitons at this time. You "
- "will not be able to make changes to the partitioning "
- "of this disk or use any partitions beyond /dev/%s15 "
- "in %s") % (drive, drive, productName)
-
- rc = intf.messageWindow(_("Warning"), str,
- type="custom",
- custom_buttons = [_("_Reboot"),
- _("_Continue")],
- custom_icon="warning")
- if rc == 0:
- sys.exit(0)
-
- # check that their partition table is valid for their architecture
- ret = checkDiskLabel(disk, intf)
- if ret == 1:
- self._removeDisk(drive)
- elif ret == -1:
- try:
- disk, dev = self._labelDevice(drive)
- except:
- pass
- self.devicesOpen = True
-
- def partitionTypes (self):
- """Return list of (partition, partition type) tuples for all parts."""
- rc = []
- drives = self.disks.keys()
- drives.sort()
-
- for drive in drives:
- disk = self.disks[drive]
- for part in disk.partitions:
- if part.type in (parted.PARTITION_NORMAL,
- parted.PARTITION_LOGICAL):
- device = part.getDeviceNodeName()
- if part.fileSystem:
- ptype = part.fileSystem.type
- else:
- ptype = None
- rc.append((device, ptype))
-
- return rc
-
- def diskState (self):
- """Print out current disk state. DEBUG."""
- rc = ""
- for disk in self.disks.values():
- rc = rc + ("%s: %s length %ld, maximum "
- "primary partitions: %d\n" %
- (disk.device.path,
- disk.device.model,
- disk.device.length,
- disk.maxPrimaryPartitionCount))
-
- for part in disk.partitions:
- rc = rc + ("Device Type Filesystem Start "
- "End Length Flags\n")
- rc = rc + ("------ ---- ---------- ----- "
- "--- ------ -----\n")
- if not part.type & parted.PARTITION_METADATA:
- device = ""
- fs_type_name = ""
- if part.number > 0:
- device = part.getDeviceNodeName()
- if part.fileSystem:
- fs_type_name = part.fileSystem.type
- partFlags = part.getFlagsAsString()
- rc = rc + ("%-9s %-12s %-12s %-10ld %-10ld %-10ld %7s\n"
- % (device, part.type.name, fs_type_name,
- part.geometry.start, part.geometry.end,
- part.geometry.length, partFlags))
-
- return rc
-
- def checkNoDisks(self):
- """Check that there are valid disk devices."""
- if len(self.disks.keys()) == 0:
- self.anaconda.intf.messageWindow(_("No Drives Found"),
- _("An error has occurred - no valid devices were "
- "found on which to create new file systems. "
- "Please check your hardware for the cause "
- "of this problem."))
- return True
- return False
-
-
- def exceptionDisks(self, anaconda, probe=True):
- if probe:
- isys.flushDriveDict()
- self.refreshDevices()
-
- drives = []
- for d in isys.removableDriveDict().items():
- func = lambda p: p.active and not p.getFlag(parted.PARTITION_RAID) and not p.getFlag(parted.PARTITION_LVM) and p.fileSystem.type in ["ext3", "ext2", "fat16", "fat32"]
-
- disk = self.disks[d[0]]
- parts = filter_partitions(disk, func)
-
- if len(parts) == 0:
- drives.append(d)
- else:
- for part in parts:
- name = "%s%s" % (part.disk.device.path, part.number)
- drives.append((os.path.basename(name), d[1]))
-
- return drives
--
1.6.1.3
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]