def __format_disks(self): self.layout_partitions() if self.skipformat: msger.debug( "Skipping disk format, because skipformat flag is set.") return for dev in self.disks.keys(): d = self.disks[dev] msger.debug("Initializing partition table for %s" % \ (d['disk'].device)) self.__run_parted( ["-s", d['disk'].device, "mklabel", d['ptable_format']]) msger.debug("Creating partitions") for p in self.partitions: d = self.disks[p['disk_name']] if d['ptable_format'] == "msdos" and p['num'] == 5: # The last sector of the 3rd partition was reserved for the EBR # of the first _logical_ partition. This is why the extended # partition should start one sector before the first logical # partition. self.__create_partition(d['disk'].device, "extended", None, p['start'] - 1, d['offset'] - p['start']) if p['fstype'] == "swap": parted_fs_type = "linux-swap" elif p['fstype'] == "vfat": parted_fs_type = "fat32" elif p['fstype'] == "msdos": parted_fs_type = "fat16" else: # Type for ext2/ext3/ext4/btrfs parted_fs_type = "ext2" # Boot ROM of OMAP boards require vfat boot partition to have an # even number of sectors. if p['mountpoint'] == "/boot" and p['fstype'] in ["vfat", "msdos"] \ and p['size'] % 2: msger.debug("Substracting one sector from '%s' partition to " \ "get even number of sectors for the partition" % \ p['mountpoint']) p['size'] -= 1 self.__create_partition(d['disk'].device, p['type'], parted_fs_type, p['start'], p['size']) if p['boot']: if d['ptable_format'] == 'gpt': flag_name = "legacy_boot" else: flag_name = "boot" msger.debug("Set '%s' flag for partition '%s' on disk '%s'" % \ (flag_name, p['num'], d['disk'].device)) cmd = [ "-s", d['disk'].device, "set", "%d" % p['num'], flag_name, "on" ] exitcode, output = self.__run_parted(cmd) if exitcode != 0: msger.warning( "partition '%s' is marked with --active, " "but flag '%s' can't be set: " "exitcode: %s, output: %s" % (p['mountpoint'], flag_name, exitcode, output)) # If the partition table format is "gpt", find out PARTUUIDs for all # the partitions. And if users specified custom parition type UUIDs, # set them. for disk_name, disk in self.disks.items(): if disk['ptable_format'] != 'gpt': continue pnum = 0 gpt_parser = GptParser(disk['disk'].device, SECTOR_SIZE) # Iterate over all GPT partitions on this disk for entry in gpt_parser.get_partitions(): pnum += 1 # Find the matching partition in the 'self.partitions' list for n in disk['partitions']: p = self.partitions[n] if p['num'] == pnum: # Found, fetch PARTUUID (partition's unique ID) p['partuuid'] = entry['part_uuid'] msger.debug("PARTUUID for partition %d on disk '%s' " \ "(mount point '%s') is '%s'" % (pnum, \ disk_name, p['mountpoint'], p['partuuid'])) if p['part_type']: entry['type_uuid'] = p['part_type'] msger.debug("Change type of partition %d on disk " \ "'%s' (mount point '%s') to '%s'" % \ (pnum, disk_name, p['mountpoint'], p['part_type'])) gpt_parser.change_partition(entry) del gpt_parser
def __format_disks(self): self.layout_partitions() if self.skipformat: msger.debug("Skipping disk format, because skipformat flag is set.") return for dev in self.disks.keys(): d = self.disks[dev] msger.debug("Initializing partition table for %s" % \ (d['disk'].device)) self.__run_parted(["-s", d['disk'].device, "mklabel", d['ptable_format']]) msger.debug("Creating partitions") for p in self.partitions: d = self.disks[p['disk_name']] if d['ptable_format'] == "msdos" and p['num'] == 5: # The last sector of the 3rd partition was reserved for the EBR # of the first _logical_ partition. This is why the extended # partition should start one sector before the first logical # partition. self.__create_partition(d['disk'].device, "extended", None, p['start'] - 1, d['offset'] - p['start']) if p['fstype'] == "swap": parted_fs_type = "linux-swap" elif p['fstype'] == "vfat": parted_fs_type = "fat32" elif p['fstype'] == "msdos": parted_fs_type = "fat16" else: # Type for ext2/ext3/ext4/btrfs parted_fs_type = "ext2" # Boot ROM of OMAP boards require vfat boot partition to have an # even number of sectors. if p['mountpoint'] == "/boot" and p['fstype'] in ["vfat", "msdos"] \ and p['size'] % 2: msger.debug("Substracting one sector from '%s' partition to " \ "get even number of sectors for the partition" % \ p['mountpoint']) p['size'] -= 1 self.__create_partition(d['disk'].device, p['type'], parted_fs_type, p['start'], p['size']) if p['boot']: if d['ptable_format'] == 'gpt': flag_name = "legacy_boot" else: flag_name = "boot" msger.debug("Set '%s' flag for partition '%s' on disk '%s'" % \ (flag_name, p['num'], d['disk'].device)) self.__run_parted(["-s", d['disk'].device, "set", "%d" % p['num'], flag_name, "on"]) # If the partition table format is "gpt", find out PARTUUIDs for all # the partitions. And if users specified custom parition type UUIDs, # set them. for disk_name, disk in self.disks.items(): if disk['ptable_format'] != 'gpt': continue pnum = 0 gpt_parser = GptParser(d['disk'].device, SECTOR_SIZE) # Iterate over all GPT partitions on this disk for entry in gpt_parser.get_partitions(): pnum += 1 # Find the matching partition in the 'self.partitions' list for n in d['partitions']: p = self.partitions[n] if p['num'] == pnum: # Found, fetch PARTUUID (partition's unique ID) p['partuuid'] = entry['part_uuid'] msger.debug("PARTUUID for partition %d on disk '%s' " \ "(mount point '%s') is '%s'" % (pnum, \ disk_name, p['mountpoint'], p['partuuid'])) if p['part_type']: entry['type_uuid'] = p['part_type'] msger.debug("Change type of partition %d on disk " \ "'%s' (mount point '%s') to '%s'" % \ (pnum, disk_name, p['mountpoint'], p['part_type'])) gpt_parser.change_partition(entry) del gpt_parser