Changed from sync to hdparm kernel command to solve write caching problem, added failure details to end readout.
This commit is contained in:
parent
820f6e31a1
commit
d6b1706e97
31
wipe.pl
31
wipe.pl
@ -112,16 +112,17 @@ sub wipethemdrives {
|
|||||||
$disksum = $clobsum;
|
$disksum = $clobsum;
|
||||||
$disksum2 = $clobsum;
|
$disksum2 = $clobsum;
|
||||||
} else {
|
} else {
|
||||||
|
system("hdparm -W 0 ".$disks->{$diskid}{path}) and do {
|
||||||
|
print "Cannot turn off drive write caching: $!\n"
|
||||||
|
print "Disk considered $color{red}FAILED$color{reset}\n";
|
||||||
|
$disks->{$diskid}{failure} = "Cannot turn off write caching";
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
open(my $diskw, ">", $disks->{$diskid}{path}) or return warning("could not open $disks->{$diskid}{path}");
|
open(my $diskw, ">", $disks->{$diskid}{path}) or return warning("could not open $disks->{$diskid}{path}");
|
||||||
print $diskw $clobber; #Start of Disk
|
print $diskw $clobber; #Start of Disk
|
||||||
seek($diskw,-10240000,2);
|
seek($diskw,-10240000,2);
|
||||||
print $diskw $clobber; #End of Disk
|
print $diskw $clobber; #End of Disk
|
||||||
close($diskw);
|
close($diskw);
|
||||||
system("sync ".$disks->{$diskid}{path}) and do {
|
|
||||||
#if sync failes disk fails
|
|
||||||
print "\nWipe attemped $color{red}FAILED$color{reset}\n";
|
|
||||||
return ($? >> 8);
|
|
||||||
};
|
|
||||||
print "Wipe attempt complete, checking...";
|
print "Wipe attempt complete, checking...";
|
||||||
# Read
|
# Read
|
||||||
open(my $diskr, "<", $disks->{$diskid}{path}) or return warning("could not open $disks->{$diskid}{path}");
|
open(my $diskr, "<", $disks->{$diskid}{path}) or return warning("could not open $disks->{$diskid}{path}");
|
||||||
@ -140,10 +141,12 @@ sub wipethemdrives {
|
|||||||
say +("."x$spacer)."Checksum $color{green}PASSED$color{reset}";
|
say +("."x$spacer)."Checksum $color{green}PASSED$color{reset}";
|
||||||
} else {
|
} else {
|
||||||
say +("."x$spacer)."Checksum $color{red}FAILED$color{reset}";
|
say +("."x$spacer)."Checksum $color{red}FAILED$color{reset}";
|
||||||
|
$disks->{$diskid}{failure} = "Raid wipe failed";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
say +("."x$spacer)."Checksum $color{red}FAILED$color{reset}";
|
say +("."x$spacer)."Checksum $color{red}FAILED$color{reset}";
|
||||||
|
$disks->{$diskid}{failure} = "Main Wipe failed";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
# If long flag than zero whole disk and give a progress bar
|
# If long flag than zero whole disk and give a progress bar
|
||||||
@ -172,7 +175,10 @@ sub smartcheck {
|
|||||||
print "Checking overall-health self-assessment test result: ".(" "x19);
|
print "Checking overall-health self-assessment test result: ".(" "x19);
|
||||||
(my $smartassess = `smartctl $disks->{$diskid}{path} -H | grep overall`) or (say "\n$!\ncould not check smart data, skipping" and return 1);
|
(my $smartassess = `smartctl $disks->{$diskid}{path} -H | grep overall`) or (say "\n$!\ncould not check smart data, skipping" and return 1);
|
||||||
$disks->{$diskid}{selftest} = (split(": ", $smartassess))[1];
|
$disks->{$diskid}{selftest} = (split(": ", $smartassess))[1];
|
||||||
if ( "FAILED" eq $disks->{$diskid}{selftest} ) { say "$color{red}Failed$color{reset}"; return 0
|
if ( "FAILED" eq $disks->{$diskid}{selftest} ) {
|
||||||
|
say "$color{red}Failed$color{reset}";
|
||||||
|
$disks->{$diskid}{failure} = "General SMART failure";
|
||||||
|
return 0
|
||||||
} else { say "$color{green}Passed$color{reset}"; }
|
} else { say "$color{green}Passed$color{reset}"; }
|
||||||
say "Checking S.M.A.R.T. variables...";
|
say "Checking S.M.A.R.T. variables...";
|
||||||
# say qq(smartctl $disks->{$diskid}{path} -A -f hex,id | grep "^0x");
|
# say qq(smartctl $disks->{$diskid}{path} -A -f hex,id | grep "^0x");
|
||||||
@ -197,8 +203,11 @@ sub smartcheck {
|
|||||||
printf("%-6.6s %-26.26s\t%-26.26s\t", $disks->{$diskid}{smart}{$smartentry}{id}, $disks->{$diskid}{smart}{$smartentry}{name}, $disks->{$diskid}{smart}{$smartentry}{raw_value});
|
printf("%-6.6s %-26.26s\t%-26.26s\t", $disks->{$diskid}{smart}{$smartentry}{id}, $disks->{$diskid}{smart}{$smartentry}{name}, $disks->{$diskid}{smart}{$smartentry}{raw_value});
|
||||||
if ($disks->{$diskid}{smart}{$smartentry}{raw_value} =~ /0|0\/0/) {
|
if ($disks->{$diskid}{smart}{$smartentry}{raw_value} =~ /0|0\/0/) {
|
||||||
say "$color{green}Passed$color{reset}";
|
say "$color{green}Passed$color{reset}";
|
||||||
} else { say "$color{red}Failed$color{reset}"; return 0}
|
} else {
|
||||||
|
say "$color{red}Failed$color{reset}";
|
||||||
|
$disks->{$diskid}{failure} = "failed on $disks->{$diskid}{smart}{$smartentry}{name}";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -221,9 +230,9 @@ while () {
|
|||||||
if ($disks{$diskid}{wipe} == 1) {
|
if ($disks{$diskid}{wipe} == 1) {
|
||||||
$disks{$diskid}{smartpass} = smartcheck($diskid,\%disks);
|
$disks{$diskid}{smartpass} = smartcheck($diskid,\%disks);
|
||||||
if ($disks{$diskid}{smartpass} == 1) {
|
if ($disks{$diskid}{smartpass} == 1) {
|
||||||
push(@good, sprintf("%-26.26s\t%46.46s",$disks{$diskid}{serial},$disks{$diskid}{model}));
|
push(@good, sprintf("%-26.26s\t%46.46s\t%30.30s",$disks{$diskid}{serial},$disks{$diskid}{model}, $disks{$diskid}{failure} or ""));
|
||||||
} else { push(@failed, sprintf("%-26.26s\t%46.46s",$disks{$diskid}{serial},$disks{$diskid}{model})); }
|
} else { push(@failed, sprintf("%-26.26s\t%46.46s\t%30.30s",$disks{$diskid}{serial},$disks{$diskid}{model}, $disks{$diskid}{failure} or "")); }
|
||||||
} else { push(@failed, $disks{$diskid}{serial}); }
|
} else { push(@failed, sprintf("%26.26s\t%46.46s\t%30.30s",$disks{$diskid}{serial}, "-"x46, $disks{$diskid}{failure} or "")); }
|
||||||
print "="x80;
|
print "="x80;
|
||||||
print "\n"x5;
|
print "\n"x5;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user