Align partitions during their re-layout. Specifically, we align the first partition which removes the need for the hard coded magic number of 2048, which represents the proper alignment for a grain size of 1MB given a sector size of 512 (our setup). NB: Since all our partitions should sizes that are themselves aligned, i.e. evenly dividable by the default grain (1MB) this will not actually change any manifest.
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package disk
|
|
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
)
|
|
|
|
const (
|
|
BIOSBootPartitionGUID = "21686148-6449-6E6F-744E-656564454649"
|
|
BIOSBootPartitionUUID = "FAC7F1FB-3E8D-4137-A512-961DE09A5549"
|
|
|
|
FilesystemDataGUID = "0FC63DAF-8483-4772-8E79-3D69D8477DE4"
|
|
FilesystemDataUUID = "CB07C243-BC44-4717-853E-28852021225B"
|
|
|
|
EFISystemPartitionGUID = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"
|
|
EFISystemPartitionUUID = "68B2905B-DF3E-4FB3-80FA-49D1E773AA33"
|
|
EFIFilesystemUUID = "7B77-95E7"
|
|
|
|
RootPartitionUUID = "6264D520-3FB9-423F-8AB8-7A0A8E3D3562"
|
|
)
|
|
|
|
func CreatePartitionTable(
|
|
mountpoints []blueprint.FilesystemCustomization,
|
|
imageSize uint64,
|
|
basePartitionTable *PartitionTable,
|
|
rng *rand.Rand,
|
|
) (PartitionTable, error) {
|
|
|
|
// we are modifying the contents of the base partition table,
|
|
// including the file systems, which are shared among shallow
|
|
// copies of the partition table, so make a copy first
|
|
table := basePartitionTable.Clone()
|
|
|
|
for _, m := range mountpoints {
|
|
sectors := table.BytesToSectors(m.MinSize)
|
|
|
|
// if we already have a partition ensure that the
|
|
// size is at least the requested size, otherwise
|
|
// create a new filesystem with that size
|
|
part := table.FindPartitionForMountpoint(m.Mountpoint)
|
|
if part != nil {
|
|
part.EnsureSize(sectors)
|
|
} else {
|
|
table.CreateFilesystem(m.Mountpoint, sectors)
|
|
}
|
|
}
|
|
|
|
// Calculate partition table offsets and sizes
|
|
table.updatePartitionStartPointOffsets(imageSize)
|
|
|
|
// Generate new UUIDs for filesystems and partitions
|
|
table.GenerateUUIDs(rng)
|
|
|
|
return *table, nil
|
|
}
|