diff options
Diffstat (limited to 'scripts/lib/wic/utils/partitionedfs.py')
| -rw-r--r-- | scripts/lib/wic/utils/partitionedfs.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py index c72bb29b02..87d2929f6c 100644 --- a/scripts/lib/wic/utils/partitionedfs.py +++ b/scripts/lib/wic/utils/partitionedfs.py | |||
| @@ -61,6 +61,7 @@ class Image: | |||
| 61 | self.disks[disk_name] = \ | 61 | self.disks[disk_name] = \ |
| 62 | { 'disk': None, # Disk object | 62 | { 'disk': None, # Disk object |
| 63 | 'numpart': 0, # Number of allocate partitions | 63 | 'numpart': 0, # Number of allocate partitions |
| 64 | 'realpart': 0, # Number of partitions in the partition table | ||
| 64 | 'partitions': [], # Indexes to self.partitions | 65 | 'partitions': [], # Indexes to self.partitions |
| 65 | 'offset': 0, # Offset of next partition (in sectors) | 66 | 'offset': 0, # Offset of next partition (in sectors) |
| 66 | # Minimum required disk size to fit all partitions (in bytes) | 67 | # Minimum required disk size to fit all partitions (in bytes) |
| @@ -85,7 +86,7 @@ class Image: | |||
| 85 | self.__add_disk(part['disk_name']) | 86 | self.__add_disk(part['disk_name']) |
| 86 | 87 | ||
| 87 | def add_partition(self, size, disk_name, mountpoint, source_file = None, fstype = None, | 88 | def add_partition(self, size, disk_name, mountpoint, source_file = None, fstype = None, |
| 88 | label=None, fsopts = None, boot = False, align = None, | 89 | label=None, fsopts = None, boot = False, align = None, no_table=False, |
| 89 | part_type = None): | 90 | part_type = None): |
| 90 | """ Add the next partition. Prtitions have to be added in the | 91 | """ Add the next partition. Prtitions have to be added in the |
| 91 | first-to-last order. """ | 92 | first-to-last order. """ |
| @@ -109,6 +110,7 @@ class Image: | |||
| 109 | 'num': None, # Partition number | 110 | 'num': None, # Partition number |
| 110 | 'boot': boot, # Bootable flag | 111 | 'boot': boot, # Bootable flag |
| 111 | 'align': align, # Partition alignment | 112 | 'align': align, # Partition alignment |
| 113 | 'no_table' : no_table, # Partition does not appear in partition table | ||
| 112 | 'part_type' : part_type } # Partition type | 114 | 'part_type' : part_type } # Partition type |
| 113 | 115 | ||
| 114 | self.__add_partition(part) | 116 | self.__add_partition(part) |
| @@ -147,6 +149,8 @@ class Image: | |||
| 147 | # Get the disk where the partition is located | 149 | # Get the disk where the partition is located |
| 148 | d = self.disks[p['disk_name']] | 150 | d = self.disks[p['disk_name']] |
| 149 | d['numpart'] += 1 | 151 | d['numpart'] += 1 |
| 152 | if not p['no_table']: | ||
| 153 | d['realpart'] += 1 | ||
| 150 | d['ptable_format'] = ptable_format | 154 | d['ptable_format'] = ptable_format |
| 151 | 155 | ||
| 152 | if d['numpart'] == 1: | 156 | if d['numpart'] == 1: |
| @@ -156,7 +160,7 @@ class Image: | |||
| 156 | # Skip one sector required for the partitioning scheme overhead | 160 | # Skip one sector required for the partitioning scheme overhead |
| 157 | d['offset'] += overhead | 161 | d['offset'] += overhead |
| 158 | 162 | ||
| 159 | elif d['numpart'] > 3: | 163 | if d['realpart'] > 3: |
| 160 | # Reserve a sector for EBR for every logical partition | 164 | # Reserve a sector for EBR for every logical partition |
| 161 | # before alignment is performed. | 165 | # before alignment is performed. |
| 162 | if ptable_format == "msdos": | 166 | if ptable_format == "msdos": |
| @@ -189,12 +193,15 @@ class Image: | |||
| 189 | d['offset'] += p['size'] | 193 | d['offset'] += p['size'] |
| 190 | 194 | ||
| 191 | p['type'] = 'primary' | 195 | p['type'] = 'primary' |
| 192 | p['num'] = d['numpart'] | 196 | if not p['no_table']: |
| 197 | p['num'] = d['realpart'] | ||
| 198 | else: | ||
| 199 | p['num'] = 0 | ||
| 193 | 200 | ||
| 194 | if d['ptable_format'] == "msdos": | 201 | if d['ptable_format'] == "msdos": |
| 195 | if d['numpart'] > 3: | 202 | if d['realpart'] > 3: |
| 196 | p['type'] = 'logical' | 203 | p['type'] = 'logical' |
| 197 | p['num'] = d['numpart'] + 1 | 204 | p['num'] = d['realpart'] + 1 |
| 198 | 205 | ||
| 199 | d['partitions'].append(n) | 206 | d['partitions'].append(n) |
| 200 | msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " | 207 | msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " |
| @@ -256,6 +263,9 @@ class Image: | |||
| 256 | msger.debug("Creating partitions") | 263 | msger.debug("Creating partitions") |
| 257 | 264 | ||
| 258 | for p in self.partitions: | 265 | for p in self.partitions: |
| 266 | if p['num'] == 0: | ||
| 267 | continue | ||
| 268 | |||
| 259 | d = self.disks[p['disk_name']] | 269 | d = self.disks[p['disk_name']] |
| 260 | if d['ptable_format'] == "msdos" and p['num'] == 5: | 270 | if d['ptable_format'] == "msdos" and p['num'] == 5: |
| 261 | # Create an extended partition (note: extended | 271 | # Create an extended partition (note: extended |
