For change_parttype, only GPT-partitioned disks are supported, as I didn't see an option for sgdisk to make it also work with MBR-partitioned disks. And while sfdisk could be used instead (or additionally) it would be a new dependency, and AFAICS require some conversion of partition type GUIDs to MBR types on our part.
Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- Changes from v1: * Add is_partition helper here, because it is used in the next patch. PVE/Diskmanage.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index 36f452c..9d5b037 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -813,6 +813,12 @@ sub get_blockdev { return $block_dev; } +sub is_partition { + my ($dev_path) = @_; + + return defined(eval { get_partnum($dev_path) }); +} + sub locked_disk_action { my ($sub) = @_; my $res = PVE::Tools::lock_file('/run/lock/pve-diskmanage.lck', undef, $sub); @@ -903,6 +909,23 @@ sub is_mounted { return $found; } +# Currently only supports GPT-partitioned disks. +sub change_parttype { + my ($partpath, $parttype) = @_; + + my $err = "unable to change partition type for $partpath"; + + my $partnum = get_partnum($partpath); + my $blockdev = get_blockdev($partpath); + my $dev = strip_dev($blockdev); + + my $info = get_disks($dev, 1); + die "$err - unable to get disk info for '$blockdev'\n" if !defined($info->{$dev}); + die "$err - disk '$blockdev' is not GPT partitioned\n" if !$info->{$dev}->{gpt}; + + run_command(['sgdisk', "-t${partnum}:${parttype}", $blockdev], errmsg => $err); +} + # Wipes all labels and the first 200 MiB of a disk/partition (or the whole if it is smaller). # Expected to be called with a result of verify_blockdev_path(). sub wipe_blockdev { -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel