Saoclyph Posted September 27, 2014 #1 Posted September 27, 2014 Hi all, I will present a simple way to obtain smart data in ESXi and a very crude way of viewing it. My configuration : HP microserver N54LESXi 5.5.0 Update 1Nanoboot-5.0.2.4 with XPenology 5.0-44823 3TB WD Red configured manually as RDM drivesVMware Paravirtual SCSI driver Getting the smart data To get the complet smart data, you need to run a short or long smart test. To do that, you need to create a new User-defined script in the Task Scheduler of the Control Panel. For the new script, in the General tab, User must be root to have proper access, and you need to copy the following code in the Run command box : for dev in `ls /sys/block/|grep sd`; do smartctl -d sat -t short /dev/$dev done Replace short by long if you want to do a long test. In the Schedule tab, select so it is run once a day. Then we need to actually get the smart data generated by the smart test. You need to add another User-defined script with the following code : for dev in `ls /sys/block/|grep sd`; do smartctl -d sat -a /dev/$dev > /volume1/web/smart/$dev.smartdata done Schedule it hourly, even if no new test is executed, some of the data are update (temperature, power On hours...) This will make a file per hard drive, it needs to be placed where the Web Station can read it, if you want to used the Web Station to show the results. The smart data for each drive are in a separate file, now it only needs to be parsed. I did a small php parser, but it could be done much more nicely by someone who actually know php or any other language the Web Station can execute. (very) Crude way of viewing the smart data To view the smart data we obtained in /volume1/web/smart/sdX.smartdata, I did a small parser in php. I don't know much in php/html so it is a very crude viewer. I placed the following code in a file named index.php in a subfolder "smart" of the "web" folder. The "web" folder being the active folder for the Web Station of DSM. > <?php // list of hdd exec('ls /sys/block/|grep sd',$devs); echo " Smart data "; // process smartctl output for each hdd // sdX.smartdata must have been generated in the same folder as this .php foreach ($devs as $dev) { $filename = $dev .'.smartdata'; if (file_exists($filename) && is_readable ($filename)) { $output=file($filename); echo " Device : $dev Raw Smart results "; echo "</pre> <table>$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]$match[1]: $match[2]</table>";<br>} else {<br>echo "<br>Device : $dev <br>";<br>echo "Missing smartctl output file $filename<br>";<br>}<br>}<br>?> Then to view it, you just need to load the page http://YourNasIPaddress/smart/
capillonpub Posted September 30, 2014 #2 Posted September 30, 2014 Thanks for the scripts Works like a charm If someboby can find a way to generate alerts or notification on high temperature, it will be cool
epicurean Posted October 3, 2014 #3 Posted October 3, 2014 Awesome. And i thought u cannot get Smart data with Esxi
capillonpub Posted October 9, 2014 #6 Posted October 9, 2014 Yes, I can confirm this is working with ESXi5.5 and HDD in RDM.
Saoclyph Posted October 9, 2014 Author #7 Posted October 9, 2014 I only tested this method in ESXi, but it should work on any other virtual environment with 'Raw' device. In the DSM/ESXi case, ESXi forwards correctly the SMART commands to the drives, but it's DSM that does not manage to identify correctly the type of the hard drives. So instead of using 'smartctl -d sat', DSM uses 'smartctl -d ata' which is not the correct type for the drives, and it fails. @Poechi you can use it in your tutorials (I don't have enough posts yet to be authorized to answer your pm )
capillonpub Posted October 10, 2014 #8 Posted October 10, 2014 Do you think there is a way to patch/correct this in xpenology ?
enzym Posted October 12, 2014 #10 Posted October 12, 2014 Thx @Saoclyph for sharing his knowledge! So instead of using 'smartctl -d sat', DSM uses 'smartctl -d ata' which is not the correct type for the drives, and it fails. Unfortunately I don't know much about Linux, but I hope that one of these ideas could work (enabling Smart Data on DSM Desktop): 1. rename 'smartctl' -> 'smartctl2', create a batch file named 'smartctl' which calls 'smartctl2' with all given parameters but fixed '-d sat'2. rename 'smartctl' -> 'smartctl2', create a bin file named 'smartctl' which does exactly the same as the batch of #1 (and compile it for x86)3. (if sourcecode of smartctl is available) alter the code of smartctl for only supporting '-d sat' no matter which '-d' parameter is used (and compile it for x86) best regards, Christian
Saoclyph Posted October 13, 2014 Author #11 Posted October 13, 2014 I already did use this method to launch the smart tests with the standard Test Scheduler of the Storage Manager in the web interface. But it only launches the tests, it does not work to get the smart data in the web interface. The method I presented in the 1st post is easier to implement (no need to ssh into the NAS), that's why I used it instead. But if you still want to use the standard Test Scheduler, you need to move smartctl to smartctl1 using ssh. Once your are log into your NAS with ssh, type: cd /usr/syno/bin mv smartctl smartctl1 touch smartctl chmod +x smartctl vi smartctl And paste the following code after typing the letter "i" for Insert. Then "ESC", ":wq", and enter. # fixes the drive type for smartctl under ESXi #log_file=/root/smart_calls.log #echo `date` >> $log_file #echo $* >> $log_file if [ "$1" = "-d" ]; then shift 2 smartctl1 -d sat $* else smartctl1 $* fi Even if the log of smartctl callings shows that it's called when we access the Storage Manager in the web interface, nothing shows up there. So there surely has something else that the web interface is doing. And I don't know how to do something similar to this script with .cgi files. regards, Saoclyph
Recommended Posts