Use a better method of finding disks for SMART.

Old code was inaccurate and also listed entries that were symlinks to other disks
This commit is contained in:
jim-p 2014-11-04 15:49:00 -05:00
parent 0810a719e9
commit ea20169a38
3 changed files with 15 additions and 3 deletions

View File

@ -2075,4 +2075,17 @@ function post_redirect($page, $params) {
print "</body></html>\n";
}
/* Locate disks that can be queried for S.M.A.R.T. data. */
function get_smart_drive_list() {
$disk_list = explode(" ", get_single_sysctl("kern.disks"));
foreach ($disk_list as $id => $disk) {
// We only want certain kinds of disks for S.M.A.R.T.
if (preg_match("/^(ad|da|ada).*[0-9]{1,2}$/", $disk) === FALSE) {
unset($disk_list[$id]);
}
}
sort($disk_list);
return $disk_list;
}
?>

View File

@ -276,8 +276,7 @@ switch($action) {
// Default page, prints the forms to view info, test, etc...
default:
{
// Get all AD* and DA* (IDE and SCSI) devices currently installed and stores them in the $devs array
exec("ls /dev | grep '^\(ad\|da\|ada\)[0-9]\{1,2\}$'", $devs);
$devs = get_smart_drive_list();
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="default page">
<tr>

View File

@ -42,7 +42,7 @@ require_once("/usr/local/www/widgets/include/smart_status.inc");
<?php
$devs = array();
## Get all adX, daX, and adaX (IDE, SCSI, and AHCI) devices currently installed
exec("ls /dev | grep '^\(ad\|da\|ada\)[0-9]\{1,2\}$'", $devs); ## From SMART status page
$devs = get_smart_drive_list();
if(count($devs) > 0) {
foreach($devs as $dev) { ## for each found drive do