[pve-devel] [PATCH storage 1/2] Move wipe_disks to Diskmanage

Dominic Jäger d.jaeger at proxmox.com
Mon Jan 27 13:38:40 CET 2020


Signed-off-by: Dominic Jäger <d.jaeger at proxmox.com>
---
 PVE/Diskmanage.pm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm
index abb90a7..261082f 100644
--- a/PVE/Diskmanage.pm
+++ b/PVE/Diskmanage.pm
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 use PVE::ProcFSTools;
 use Data::Dumper;
+use File::Basename;
 use Cwd qw(abs_path);
 use Fcntl ':mode';
 use JSON;
@@ -761,4 +762,27 @@ sub append_partition {
     return $partition;
 }
 
+# wipe the first 200 MB to clear off leftovers from previous use, otherwise a
+# create OSD fails or create directory can fail
+sub wipe_disks {
+    my (@devs) = @_;
+
+    my @wipe_cmd = qw(/bin/dd if=/dev/zero bs=1M conv=fdatasync);
+
+    foreach my $devpath (@devs) {
+	my $devname = basename($devpath);
+	my $dev_size = PVE::Tools::file_get_contents("/sys/class/block/$devname/size");
+
+	($dev_size) = $dev_size =~ m|(\d+)|; # untaint $dev_size
+	die "Coulnd't get the size of the device $devname\n" if (!defined($dev_size));
+
+	my $size = ($dev_size * 512 / 1024 / 1024);
+	my $count = ($size < 200) ? $size : 200;
+
+	print "wipe disk/partition: $devpath\n";
+	eval { run_command([@wipe_cmd, "count=$count", "of=${devpath}"]) };
+	warn $@ if $@;
+    }
+}
+
 1;
-- 
2.20.1




More information about the pve-devel mailing list