};
# if something goes wrong, we do not want
- # to give up, but indicate an error has occured
+ # to give up, but indicate an error has occurred
warn "$@\n" if $@;
my $uuids = {
die "No valid block device\n" if index($dev, $block_dev) == -1;
$block_dev = "/dev/$block_dev";
- die "Block device does not exsists\n" if !(-b $block_dev);
+ die "Block device does not exists\n" if !(-b $block_dev);
return $block_dev;
}
my $partition;
- # loop again to detect the real partiton device which does not always follow
+ # loop again to detect the real partition device which does not always follow
# a strict $devname$partition scheme like /dev/nvme0n1 -> /dev/nvme0n1p1
dir_glob_foreach("/sys/block/$devname", qr/\Q$devname\E.*$newpartid/, sub {
my ($part) = @_;
my $size = ($dev_size * 512 / 1024 / 1024);
my $count = ($size < 200) ? $size : 200;
- print "wiping disk/partition: ${devpath}\n";
+ my $to_wipe = [];
+ dir_glob_foreach("/sys/class/block/${devname}", "${devname}.+", sub {
+ my ($part) = @_;
+ push $to_wipe->@*, "/dev/${part}" if -b "/dev/${part}";
+ });
+
+ if (scalar($to_wipe->@*) > 0) {
+ print "found child partitions to wipe: ". join(', ', $to_wipe->@*) ."\n";
+ }
+ push $to_wipe->@*, $devpath; # put actual device last
+
+ print "wiping block device ${devpath}\n";
- run_command(['wipefs', '--all', $devpath], errmsg => "error wiping '${devpath}'");
+ run_command(['wipefs', '--all', $to_wipe->@*], errmsg => "error wiping '${devpath}'");
run_command(
['dd', 'if=/dev/zero', "of=${devpath}", 'bs=1M', 'conv=fdatasync', "count=${count}"],