From d411b34daec1a126c7861c854e3ca4e67fa68c2b Mon Sep 17 00:00:00 2001 From: Alexander Shaduri Date: Fri, 10 Aug 2012 15:49:28 +0000 Subject: [PATCH] Updated smartctl attributes from r3515 to r3587. Added warnings for SSD lifetime attributes. --- gsmartcontrol/TODO | 58 +++++++------------ .../src/applib/storage_property_descr.cpp | 43 ++++++++++---- 2 files changed, 54 insertions(+), 47 deletions(-) diff --git a/gsmartcontrol/TODO b/gsmartcontrol/TODO index 1f599c5..9e54faf 100644 --- a/gsmartcontrol/TODO +++ b/gsmartcontrol/TODO @@ -20,16 +20,8 @@ with existing model, which should be unset. Bugs / patches: - Patch pangomm for Pango::strip_markup(). -+ gtkmm bug: No Gtk::AboutDialog::set_logo(NULL); - -+ Gtk::Main m(argc, argv, false); - If gtk_get_option_group() and g_option_context_parse() were used before, - this generates a warning: - (gsmartcontrol:28241): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init() - -------------------------------------------------------- @@ -41,14 +33,17 @@ Update the .spec and gsmartcontrol-root script according to Fedora package: https://admin.fedoraproject.org/pkgdb/applications/Gsmartcontrol https://bugzilla.redhat.com/show_bug.cgi?id=697247 - -+Add an option to display the device and/or the S/N in the main icon list - so that the 12x RAID list view looks a bit less generic. +Add support for launching with consolehelper (from usermode package). + Fedora uses this by default. + Investigate Fedora selinux situation. + usermode-gtk contains consolehelper-gtk, not sure about our package + requirement. consolehelper-gtk is not supposed to be launched by user, + but I think we can check it with "which". + http://fedoranews.org/contributors/matt_hansen/nautilus/ + We have an experimental rpm. -Don't issue warnings for attributes whose raw values are not numbers completely - (e.g. they are space-separated numbers in some format) - +Updated smartctl attributes from r3515 to 3587. Add warnings for SSD lifetime attributes http://sourceforge.net/apps/trac/smartmontools/wiki/FAQ#TheSSD_Life_LeftAttributeofmynewSandForcebasedSSDreportszero @@ -69,14 +64,19 @@ Testing: may be stuck due to bad firmware, e.g. 3ware/windows). -Add support for launching with consolehelper (from usermode package). - Fedora uses this by default. - Investigate Fedora selinux situation. - usermode-gtk contains consolehelper-gtk, not sure about our package - requirement. consolehelper-gtk is not supposed to be launched by user, - but I think we can check it with "which". - http://fedoranews.org/contributors/matt_hansen/nautilus/ - We have an experimental rpm. + +48-bit ATA command support: + '-l xerror' -> Extended Comprehensive Error log: An multi-sector and + LBA48 capable version of '-l error'. Output is similar, except more + entries can exists and the high bytes of the registers are also printed. + Some newer drives (Samsung) only write to this log. + + '-l xselftest' -> Extended Self Test Log: An multi-sector and LBA48 + capable version of '-l selftest'. Output will be similar, except more + entries can exists and the LBA values can be somewhat longer. + + "smartctl -l this_wont_exist" gives the list of supported logs - this + is needed to detect xerror / xselftest support in smartctl. Rework drive properties UI: @@ -185,20 +185,6 @@ libdebug: use format_time() instead of ctime() and friends, with ISO formatting. -48-bit ATA command support: - '-l xerror' -> Extended Comprehensive Error log: An multi-sector and - LBA48 capable version of '-l error'. Output is similar, except more - entries can exists and the high bytes of the registers are also printed. - Some newer drives (Samsung) only write to this log. - - '-l xselftest' -> Extended Self Test Log: An multi-sector and LBA48 - capable version of '-l selftest'. Output will be similar, except more - entries can exists and the LBA values can be somewhat longer. - - "smartctl -l this_wont_exist" gives the list of supported logs - this - is needed to detect xerror / xselftest support in smartctl. - - '-l sataphy' -> SATA Phy event counters: Non-SMART feature, useful to detect SATA cabling problems. diff --git a/gsmartcontrol/src/applib/storage_property_descr.cpp b/gsmartcontrol/src/applib/storage_property_descr.cpp index c0892cf..2f09ef9 100644 --- a/gsmartcontrol/src/applib/storage_property_descr.cpp +++ b/gsmartcontrol/src/applib/storage_property_descr.cpp @@ -94,7 +94,7 @@ namespace { "Number of reallocated sectors (Raw value). Non-zero Raw value indicates a disk surface failure." "\n\n" + unc_text); // SandForce SSD: Retired_Block_Count (non-default) - add(5, "Retired_Block_Count", "Retired Block Rate", "", + add(5, "Retired_Block_Count", "Retired Block Rate", "ssd_life_left", "Indicates estimated remaining life of the drive. Normalized value is (100-100*RBC/MRB) where RBC is the number of retired blocks and MRB is the minimum required blocks."); // Read Channel Margin (default) add(6, "Read_Channel_Margin", "Read Channel Margin", "", @@ -108,8 +108,11 @@ namespace { // Power-On Hours (default) (Maxtor may use minutes, Fujitsu may use seconds, some even temperature?) add(9, "Power_On_Hours", "Power-On Time", "", "Number of hours in power-on state. Raw value shows total count of hours (or minutes, or half-minutes, or seconds, depending on manufacturer) in power-on state."); - // SandForce SSD: Power_On_Hours_and_Msec (non-default) (description?) + // SandForce, Intel SSD: Power_On_Hours_and_Msec (non-default) (description?) add(9, "Power_On_Hours_and_Msec"); + // Smart Storage Systems SSD (non-default) + add(9, "Proprietary_9", "Internal Attribute", "", + "This attribute has been reserved by vendor as internal."); // Spin-up Retry Count (default) add(10, "Spin_Retry_Count", "Spin-Up Retry Count", "spin_up_retry_count", "Number of retries of spin start attempts (Raw value). An increase of this attribute value is a sign of problems in the hard disk mechanical subsystem."); @@ -142,6 +145,9 @@ namespace { // STEC CF: Translation Table Rebuild (custom) add(103, "", "Translation Table Rebuild", "", "Indicates power backup fault or internal error resulting in loss of system unit tables."); + // Smart Storage Systems SSD (non-default) (description?) + add(130, "Minimum_Spares_All_Zs", "Minimum Spares All Zs", "", + ""); // Various SSDs: (non-default) (description?) add(168, "SATA_Phy_Error_Count", "SATA Physical Error Count", "", ""); @@ -151,6 +157,9 @@ namespace { // Crucial / Marvell SSD: Grown Failing Block Count (non-default) (description?) add(170, "Grown_Failing_Block_Ct", "Grown Failing Block Count", "", ""); + // Intel SSD: (non-default) (description?) + add(170, "Available_Reservd_Space", "Available Reservd Space", "", + ""); // Various SSDs: (non-default) (description?) add(170, "Bad_Block_Count", "Bad Block Count", "", ""); @@ -230,7 +239,7 @@ namespace { // Reported Uncorrectable (default) add(187, "Reported_Uncorrect", "Reported Uncorrectable", "", "Number of errors that could not be recovered using hardware ECC (Error-Correcting Code)."); - // Samsung SSD: Reported Uncorrectable (non-default) + // Samsung SSD, Intel SSD: Reported Uncorrectable (non-default) add(187, "Uncorrectable_Error_Cnt"); // Command Timeout (default) add(188, "Command_Timeout", "Command Timeout", "", @@ -277,6 +286,9 @@ namespace { // Temperature Celsius x 10 (non-default) add(194, "Temperature_Celsius_x10", "Temperature (Celsius) x 10", "temperature_celsius_x10", "Drive temperature. The Raw value shows built-in heat sensor registrations (in Celsius * 10). Increases in average drive temperature often signal spindle motor problems (unless the increases are caused by environmental factors)."); + // Smart Storage Systems SSD (non-default) + add(194, "Proprietary_194", "Internal Attribute", "", + "This attribute has been reserved by vendor as internal."); // Hardware ECC Recovered (default) add(195, "Hardware_ECC_Recovered", "Hardware ECC Recovered", "", "Number of ECC on the fly errors (Raw value). Users are advised to ignore this attribute."); @@ -382,12 +394,12 @@ namespace { // Samsung SSD: (non-default) (description?) add(202, "Exception_Mode_Status", "Exception Mode Status", "", ""); - // Maxtor: ECC Errors (default) (description?) - add(203, "Corr_Read_Errors_Tot_Ct", "ECC Errors", "", - "Number of ECC errors."); - // Run Out Cancel (non-default). (description?) + // Run Out Cancel (default). (description?) add(203, "Run_Out_Cancel", "Run Out Cancel", "", "Number of ECC errors."); + // Maxtor: ECC Errors (non-default) (description?) + add(203, "Corr_Read_Errors_Tot_Ct", "ECC Errors", "", + "Number of ECC errors."); // Indilinx Barefoot SSD: Corr_Read_Errors_Tot_Ct (non-default) (description?) add(203, "Corr_Read_Errors_Tot_Ct", "Total Corrected Read Errors", "", "Total cound of read sectors with correctable errors."); @@ -438,7 +450,7 @@ namespace { add(209, "Offline_Seek_Performnce", "Offline Seek Performance", "", "Seek performance during Offline Data Collection operations."); // Indilinx Barefoot SSD, OCZ SSD: Remaining_Lifetime_Perc (non-default) (description?) - add(209, "Remaining_Lifetime_Perc", "Remaining Lifetime %", "", + add(209, "Remaining_Lifetime_Perc", "Remaining Lifetime %", "ssd_life_left", "Remaining drive life in % (usually by erase count)."); // Vibration During Write (custom). wikipedia says 211, but it's wrong. (description?) add(210, "", "Vibration During Write", "", @@ -519,12 +531,12 @@ namespace { "Amplitude of heads trembling (GMR-head) in running mode."); // Sandforce SSD: Life_Curve_Status (non-default) (description?) add(230, "Life_Curve_Status", "Life Curve Status", "", - ""); + "Current state of drive operation based upon the Life Curve."); // Temperature (Some drives) (default) add(231, "Temperature_Celsius", "Temperature", "temperature_celsius", "Drive temperature. The Raw value shows built-in heat sensor registrations (in Celsius). Increases in average drive temperature often signal spindle motor problems (unless the increases are caused by environmental factors)."); // Sandforce SSD: SSD_Life_Left - add(231, "SSD_Life_Left", "SSD Life Left", "", + add(231, "SSD_Life_Left", "SSD Life Left", "ssd_life_left", "A measure of drive's estimated life left. A Normalized value of 100 indicates a new drive. " "10 means there are reserved blocks left but Program / Erase cycles have been used. " "0 means insufficient reserved blocks, drive may be in read-only mode to allow recovery of the data."); @@ -538,7 +550,7 @@ namespace { add(232, "Firmware_Version_information", "Firmware Version Information", "", "Firmware version information (year, month, day, channels, banks)."); // Intel SSD: Media_Wearout_Indicator (default) (description?) - add(233, "Media_Wearout_Indicator", "Media Wear Out Indicator", "", + add(233, "Media_Wearout_Indicator", "Media Wear Out Indicator", "ssd_life_left", "Number of cycles the NAND media has experienced. The Normalized value decreases linearly from 100 to 1 as the average erase cycle " "count increases from 0 to the maximum rated cycles."); // Sandforce SSD: SandForce_Internal (non-default) (description?) @@ -583,6 +595,9 @@ namespace { // Intel SSD: Host_Reads_32MiB (non-default) (description?) add(242, "Host_Reads_32MiB", "Host Reads (32 MiB)", "", "Total number of sectors written by the host system. The Raw value is increased by 1 for every 32 MiB read by the host."); + // Intel SSD: NAND_Writes_1GiB (non-default) (description?) + add(249, "NAND_Writes_1GiB", "NAND Writes (1GiB)", "", + ""); // Read Error Retry Rate (default) (description?) add(250, "Read_Error_Retry_Rate", "Read Error Retry Rate", "", "Number of errors found while reading."); @@ -956,6 +971,12 @@ StorageProperty::warning_t storage_property_autoset_warning(StorageProperty& p) w = StorageProperty::warning_notice; reason = "The drive has a non-zero Raw value, but there is no SMART warning yet. This could be an indication of future failures and/or potential data loss in bad sectors."; + // Current Pending Sector Count + } else if ((attr_match(p, "ssd_life_left")) + && p.value_attribute.value.value() < 50) { + w = StorageProperty::warning_notice; + reason = "The drive has less than half of its life left."; + }