mirror of
https://github.com/nix-community/disko
synced 2024-11-10 06:14:14 +00:00
idempotent gpt
This commit is contained in:
parent
0a17298c0d
commit
89b617b99d
1 changed files with 35 additions and 33 deletions
|
@ -153,40 +153,42 @@ in
|
|||
_create = diskoLib.mkCreateOption {
|
||||
inherit config options;
|
||||
default = ''
|
||||
if ! blkid "${config.device}" >/dev/null; then
|
||||
${lib.concatStrings (map (partition: ''
|
||||
if sgdisk \
|
||||
--info=${toString partition._index} \
|
||||
${config.device} > /dev/null 2>&1
|
||||
then
|
||||
sgdisk \
|
||||
--align-end \
|
||||
--new=${toString partition._index}:${partition.start}:${partition.end} \
|
||||
--change-name=${toString partition._index}:${partition.label} \
|
||||
--typecode=${toString partition._index}:${partition.type} \
|
||||
${config.device}
|
||||
# ensure /dev/disk/by-path/..-partN exists before continuing
|
||||
partprobe ${config.device}
|
||||
udevadm trigger --subsystem-match=block
|
||||
udevadm settle
|
||||
fi
|
||||
'') sortedPartitions)}
|
||||
|
||||
${
|
||||
lib.optionalString (sortedHybridPartitions != [])
|
||||
("sgdisk -h "
|
||||
+ (lib.concatStringsSep ":" (map (p: (toString p._index)) sortedHybridPartitions))
|
||||
+ (
|
||||
lib.optionalString (!config.efiGptPartitionFirst) ":EE "
|
||||
)
|
||||
+ parent.device)
|
||||
}
|
||||
${lib.concatMapStrings (p:
|
||||
p.hybrid._create
|
||||
)
|
||||
sortedHybridPartitions
|
||||
}
|
||||
if ! blkid "${config.device}" >&2; then
|
||||
sgdisk --clear ${config.device}
|
||||
fi
|
||||
${lib.concatStrings (map (partition: ''
|
||||
# try to create the partition, if it fails, try to change the type and name
|
||||
if ! sgdisk \
|
||||
--align-end \
|
||||
--new=${toString partition._index}:${partition.start}:${partition.end} \
|
||||
--change-name=${toString partition._index}:${partition.label} \
|
||||
--typecode=${toString partition._index}:${partition.type} \
|
||||
${config.device}
|
||||
then sgdisk \
|
||||
--change-name=${toString partition._index}:${partition.label} \
|
||||
--typecode=${toString partition._index}:${partition.type} \
|
||||
${config.device}
|
||||
fi
|
||||
# ensure /dev/disk/by-path/..-partN exists before continuing
|
||||
partprobe ${config.device} || : # sometimes partprobe fails, but the partitions are still up2date
|
||||
udevadm trigger --subsystem-match=block
|
||||
udevadm settle
|
||||
'') sortedPartitions)}
|
||||
|
||||
${
|
||||
lib.optionalString (sortedHybridPartitions != [])
|
||||
("sgdisk -h "
|
||||
+ (lib.concatStringsSep ":" (map (p: (toString p._index)) sortedHybridPartitions))
|
||||
+ (
|
||||
lib.optionalString (!config.efiGptPartitionFirst) ":EE "
|
||||
)
|
||||
+ parent.device)
|
||||
}
|
||||
${lib.concatMapStrings (p:
|
||||
p.hybrid._create
|
||||
)
|
||||
sortedHybridPartitions
|
||||
}
|
||||
|
||||
${lib.concatStrings (map (partition: ''
|
||||
${lib.optionalString (partition.content != null) partition.content._create}
|
||||
|
|
Loading…
Reference in a new issue