From 1b3caf4f2153bff3c0db7726275a571fbd1f07e0 Mon Sep 17 00:00:00 2001 From: David Limbeck Date: Wed, 24 Oct 2018 11:45:44 +0200 Subject: [PATCH] add wipe_disk option when destroying ceph disk this allows the disk to be reused as ceph disk by zeroing the first 200M of the destroyed disk. disks are iterated separately from partitions to prevent duplicate wipes. Signed-off-by: David Limbeck --- PVE/API2/Ceph.pm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm index 69489a70..ac277fdf 100644 --- a/PVE/API2/Ceph.pm +++ b/PVE/API2/Ceph.pm @@ -397,6 +397,7 @@ __PACKAGE__->register_method ({ # try to unmount from standard mount point my $mountpoint = "/var/lib/ceph/osd/ceph-$osdid"; + my $disks_to_wipe = {}; my $remove_partition = sub { my ($part) = @_; @@ -407,6 +408,8 @@ __PACKAGE__->register_method ({ print "remove partition $part (disk '${devpath}', partnum $partnum)\n"; eval { run_command(['/sbin/sgdisk', '-d', $partnum, "${devpath}"]); }; warn $@ if $@; + + $disks_to_wipe->{$devpath} = 1; }; my $partitions_to_remove = []; @@ -434,6 +437,7 @@ __PACKAGE__->register_method ({ } } + print "Unmount OSD $osdsection from $mountpoint\n"; eval { run_command(['/bin/umount', $mountpoint]); }; if (my $err = $@) { @@ -443,6 +447,11 @@ __PACKAGE__->register_method ({ foreach my $part (@$partitions_to_remove) { $remove_partition->($part); } + foreach my $devpath (keys %$disks_to_wipe) { + print "wipe disk: $devpath\n"; + eval { run_command(['/bin/dd', 'if=/dev/zero', "of=${devpath}", 'bs=1M', 'count=200', 'conv=fdatasync']); }; + warn $@ if $@; + } } };