[pve-devel] [PATCH v3 manager] add wipe_disk option when destroying ceph disk
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Oct 24 11:36:19 CEST 2018
On 10/24/18 11:13 AM, David Limbeck wrote:
> 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 <d.limbeck at proxmox.com>
> ---
> since v2:
> incorporated Thomas' suggestions combining remove_partition and the
> generation of the disk set
>
> PVE/API2/Ceph.pm | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
> index 69489a70..493131e6 100644
> --- a/PVE/API2/Ceph.pm
> +++ b/PVE/API2/Ceph.pm
> @@ -398,7 +398,7 @@ __PACKAGE__->register_method ({
> my $mountpoint = "/var/lib/ceph/osd/ceph-$osdid";
>
> my $remove_partition = sub {
> - my ($part) = @_;
> + my ($part, $disks_to_wipe) = @_;
>
> return if !$part || (! -b $part );
> my $partnum = PVE::Diskmanage::get_partnum($part);
> @@ -407,6 +407,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,14 +436,21 @@ __PACKAGE__->register_method ({
> }
> }
>
> +
> print "Unmount OSD $osdsection from $mountpoint\n";
> eval { run_command(['/bin/umount', $mountpoint]); };
> if (my $err = $@) {
> warn $err;
> } elsif ($param->{cleanup}) {
> #be aware of the ceph udev rules which can remount.
> + my $disks_to_wipe = {};
> foreach my $part (@$partitions_to_remove) {
> - $remove_partition->($part);
> + $remove_partition->($part, $disks_to_wipe);
> + }
> + 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 $@;
> }
> }
> };
>
No need to change the closures signature, I envisioned something like:
----8<----
diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
index 69489a70..b26a7343 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 = [];
@@ -443,6 +446,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 $@;
+ }
}
};
More information about the pve-devel
mailing list