summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2014-11-04 15:49:00 -0500
committerjim-p <jimp@pfsense.org>2014-11-04 15:49:54 -0500
commitea20169a38b555288416cdcbd86d4cd83b380b8b (patch)
tree19a440b4e91d919cda0f69dced4a6bbc0134f811
parent0810a719e903cef1d48fc94821ee6aa8ac8073fd (diff)
downloadpfsense-ea20169a38b555288416cdcbd86d4cd83b380b8b.zip
pfsense-ea20169a38b555288416cdcbd86d4cd83b380b8b.tar.gz
Use a better method of finding disks for SMART.
Old code was inaccurate and also listed entries that were symlinks to other disks
-rw-r--r--etc/inc/util.inc13
-rw-r--r--usr/local/www/diag_smart.php3
-rw-r--r--usr/local/www/widgets/widgets/smart_status.widget.php2
3 files changed, 15 insertions, 3 deletions
diff --git a/etc/inc/util.inc b/etc/inc/util.inc
index 683061c..dd6a818 100644
--- a/etc/inc/util.inc
+++ b/etc/inc/util.inc
@@ -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;
+}
+
?>
diff --git a/usr/local/www/diag_smart.php b/usr/local/www/diag_smart.php
index 2cbc60b..a8bfd3e 100644
--- a/usr/local/www/diag_smart.php
+++ b/usr/local/www/diag_smart.php
@@ -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>
diff --git a/usr/local/www/widgets/widgets/smart_status.widget.php b/usr/local/www/widgets/widgets/smart_status.widget.php
index 746e78d..f02c531 100644
--- a/usr/local/www/widgets/widgets/smart_status.widget.php
+++ b/usr/local/www/widgets/widgets/smart_status.widget.php
@@ -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
OpenPOWER on IntegriCloud