diskmanage: add change_parttype and is_partition helpers
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.ebner@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
9524b31ee3
commit
e8df8fb179
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user