diff --git a/.smartmontools.metadata b/.smartmontools.metadata deleted file mode 100644 index a755ca0..0000000 --- a/.smartmontools.metadata +++ /dev/null @@ -1 +0,0 @@ -207dc2b50cab1c6fba7bc248665fbbe3189374e1 SOURCES/smartmontools-7.1.tar.gz diff --git a/SOURCES/drivedb.h b/SOURCES/drivedb.h index ebb8cbf..152b503 100644 --- a/SOURCES/drivedb.h +++ b/SOURCES/drivedb.h @@ -4,7 +4,7 @@ * Home page of code is: https://www.smartmontools.org * * Copyright (C) 2003-11 Philip Williams, Bruce Allen - * Copyright (C) 2008-20 Christian Franke + * Copyright (C) 2008-23 Christian Franke * * SPDX-License-Identifier: GPL-2.0-or-later */ @@ -68,9 +68,9 @@ /* const drive_settings builtin_knowndrives[] = { */ - { "$Id: drivedb.h 5049 2020-04-05 16:31:29Z chrfranke $", + { "VERSION: 7.3 $Id$", "-", "-", - "This is a dummy entry to hold the SVN-Id of drivedb.h", + "Version information", "" }, { "DEFAULT", @@ -136,7 +136,7 @@ const drive_settings builtin_knowndrives[] = { "-v 228,raw48,Power-off_Retract_Count " // 229 Unknown_Attribute "-v 230,raw48,Head_Amplitude,HDD " - "-v 231,raw48,Temperature_Celsius " + "-v 231,raw48,Temperature_Celsius,HDD " "-v 232,raw48,Available_Reservd_Space " "-v 233,raw48,Media_Wearout_Indicator,SSD " // 234-239 Unknown_Attribute @@ -224,8 +224,9 @@ const drive_settings builtin_knowndrives[] = { //"-v 194,tempminmax,Temperature_Celsius " //"-v 241,raw48,Total_LBAs_Written " }, - { "Apacer AS340 SSDs", - "Apacer AS340 (120|240|480|960)GB", // tested with Apacer AS340 120GB/AP612PE0 + { "Apacer AS340/350 SSDs", + "Apacer AS3[45]0 ((12[08]|240|256|480|512|960)G|1T)B", // tested with + // Apacer AS340 120GB/AP612PE0, Apacer AS350 1TB/AP613PE0 "", "", //"-v 9,raw24(raw8),Power_On_Hours " //"-v 12,raw48,Power_Cycle_Count " @@ -242,6 +243,28 @@ const drive_settings builtin_knowndrives[] = { "-v 231,raw48,Lifetime_Left " //"-v 241,raw48,Total_LBAs_Written " }, + { "Apacer SSDs", + "([1248]|1[056]|20|3[02]|40|60|64|80|12[08]|160|240|256|320|480|512|640|960|1024|1280|1920|2048|3840|4096)(GB|TB) SATA Flash Drive|" + "1TB SATA SSD|" // tested with 1TB SATA SSD/AP613PE0 (AP1TPPSS25-R) + "S[GHTV]250-(M2[48][02]|25) ([1248]|1[056]|20|3[02]|40|60|64|80|12[08]|160|240|256|320|480|512|640|960|1024|1280|1920|2048|3840|4096)(GB|TB) SSD", + // tested with 120GB SATA Flash Drive/SFMB6130, SH250-M242 128GB SSD/SFMB8120, ST250-M280 256GB SSD/SFMD6110 + "AP613PE0|SFM[BCDEGHJ][0-9A-Z][0-9A-Z][1-9A-Z][0-9A-Z]", + "", + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 163,raw48,Maximum_Erase_Count " + "-v 164,raw48,Average_Erase_Count " + "-v 166,raw48,Total_Later_Bad_Blk_Ct " + "-v 167,raw48,SSD_Protect_Mode " + "-v 168,raw48,SATA_PHY_Error_Count " + "-v 171,raw48,Program_Fail_Count " + "-v 172,raw48,Erase_Fail_Count " + "-v 175,raw48,Bad_Cluster_Table_Ct " + "-v 192,raw48,Unexpect_Power_Loss_Ct " + //"-v 194,tempminmax,Temperature_Celsius " + "-v 231,raw48,Lifetime_Left " + //"-v 241,raw48,Total_LBAs_Written " + }, { "Apple MacBook Air SSD", // probably Toshiba "APPLE SSD TS(064|128)E", // tested with APPLE SSD TS064E/TQAABBF0 "", "", @@ -251,7 +274,7 @@ const drive_settings builtin_knowndrives[] = { }, { "Apple SD/SM/TS...E/F/G SSDs", // SanDisk/Samsung/Toshiba? "APPLE SSD (S[DM]|TS)0?(128|256|512|768|1024)[EFG]", // tested with APPLE SSD SD256E/1021AP, SD0128F/A223321 - // APPLE SSD SM768E/CXM90A1Q, SM0512F/UXM2JA1Q, TS0256F/109L0704, SM0512G/BXW1SA0Q, SM1024G/BXW1SA0Q + // APPLE SSD SM768E/CXM90A1Q, SM0512F/UXM2JA1Q, TS0256F/109L0704, SM0512G/BXW1SA0Q, SM1024G/BXW1SA0Q "", "", //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -267,9 +290,46 @@ const drive_settings builtin_knowndrives[] = { //"-v 199,raw48,UDMA_CRC_Error_Count " //"-v 240,raw48,Unknown_SSD_Attribute " }, + { "ATP SATA III aMLC M.2 2242/80 Embedded SSDs", + "ATP I-Temp M\\.2 22(42|80)", // tested with ATP I-Temp M.2 2242/R0822A, + // ATP I-Temp M.2 2280/R0822A + "","", + "-v 1,raw48,Raw_Read_Error_Count " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 14,raw48,Device_Raw_Capacity " + "-v 15,raw48,Device_User_Capacity " + "-v 16,raw48,Initial_Spare_Blocks " + "-v 17,raw48,Remaining_Spare_Blocks " + "-v 100,raw48,Total_Erease_Count " + "-v 160,raw48,Uncorrectable_Sectors " + "-v 172,raw48,Block_Erase_Failure " + "-v 173,raw48,Max_Erase_Count " + "-v 174,raw48,Unexpected_Power_Cycle " + "-v 175,raw48,Average_Erase_Count " + "-v 181,raw48,Program_Fail_Blocks " + "-v 187,raw48,Reported_UE_Counts " + "-v 194,raw48,Device_Temperature " + //"-v 195,raw48,Hardware_ECC_Recovered " + //"-v 197,raw48,Current_Pending_Sector " + //"-v 198,raw48,Offline_Uncorrectable " + "-v 199,raw48,SATA_CRC_Error_Count " + "-v 202,raw48,Percent_Lifetime_Used " + "-v 205,raw48,Thermal_Asperity_Rate " + "-v 231,raw48,Controller_Temperature " + "-v 234,raw48,Nand_Sectors_Read " + "-v 235,raw48,Device_Sectors_Written " + "-v 241,raw48,Nand_Sectors_Written " + "-v 242,raw48,Device_Bytes_Read " + "-v 248,raw48,PCT_Life_Remaining " + "-v 249,raw48,Spare_Block_Remaining " + }, { "Crucial/Micron RealSSD C300/P300", // Marvell 88SS9174 "C300-CTFDDA[AC](064|128|256)MAG|" // tested with C300-CTFDDAC128MAG/0002, // C300-CTFDDAC064MAG/0006 + "(C300-)?MTFDBAK(064|128|256)MAG(-1G1)?|" // tested with + // C300-MTFDBAK128MAG/0006 (attr 9 only), MTFDBAK256MAG-1G1/0007 "P300-MTFDDAC(050|100|200)SAL", // tested with P300-MTFDDAC100SAL/0003 "", "", //"-v 1,raw48,Raw_Read_Error_Rate " @@ -298,11 +358,11 @@ const drive_settings builtin_knowndrives[] = { }, { "Crucial/Micron RealSSD m4/C400/P400", // Marvell 9176, fixed firmware "C400-MTFDDA[ACK](064|128|256|512)MAM|" - // M4-CT032M4SSD3/04MH + // M4-CT032M4SSD3/04MH "M4-CT(032|064|128|256|512)M4SSD[123]|" // tested with M4-CT512M4SSD2/0309 "MTFDDA[AK](064|128|256|512|050|100|200|400)MA[MNR]-1[JKS]1.*", // tested with - // MTFDDAK256MAR-1K1AA/MA52, MTFDDAK256MAM-1K12/08TH, - // MTFDDAA064MAR-1J1AB 49Y5835 49Y5838IBM/MA49 (P400e) + // MTFDDAK256MAR-1K1AA/MA52, MTFDDAK256MAM-1K12/08TH, + // MTFDDAA064MAR-1J1AB 49Y5835 49Y5838IBM/MA49 (P400e) "030[9-Z]|03[1-Z].|0[4-Z]..|[1-Z]....*", // >= "0309" "", //"-v 1,raw48,Raw_Read_Error_Rate " @@ -352,36 +412,9 @@ const drive_settings builtin_knowndrives[] = { "-v 202,raw48,Perc_Rated_Life_Used " "-v 206,raw48,Write_Error_Rate" }, - { "Crucial/Micron MX500 SSDs", - "CT(250|500|1000|2000)MX500SSD[14]", // tested with CT500MX500SSD1/M3CR020, - // .../M3CR022, .../M3CR023, CT1000MX500SSD1/M3CR010 - "M3CR0([01][0-9]|2[0-3])", // Assume FW <= M3CR023 have bogus attribute 197 (see ticket #1227, #1311) - "This firmware returns bogus raw values in attribute 197", - //"-v 1,raw48,Raw_Read_Error_Rate " - "-v 5,raw48,Reallocate_NAND_Blk_Cnt " - //"-v 9,raw24(raw8),Power_On_Hours " - //"-v 12,raw48,Power_Cycle_Count " - "-v 171,raw48,Program_Fail_Count " - "-v 172,raw48,Erase_Fail_Count " - "-v 173,raw48,Ave_Block-Erase_Count " - "-v 174,raw48,Unexpect_Power_Loss_Ct " - "-v 180,raw48,Unused_Reserve_NAND_Blk " - "-v 183,raw48,SATA_Interfac_Downshift " - "-v 184,raw48,Error_Correction_Count " - //"-v 187,raw48,Reported_Uncorrect " - //"-v 194,tempminmax,Temperature_Celsius " - //"-v 196,raw16(raw16),Reallocated_Event_Count " - "-v 197,raw48,Bogus_Current_Pend_Sect " // Randomly flips 0 <> 1 - //"-v 198,raw48,Offline_Uncorrectable " - //"-v 199,raw48,UDMA_CRC_Error_Count " - "-v 202,raw48,Percent_Lifetime_Remain " - "-v 206,raw48,Write_Error_Rate " - "-v 210,raw48,Success_RAIN_Recov_Cnt " - "-v 246,raw48,Total_LBAs_Written " - "-v 247,raw48,Host_Program_Page_Count " - "-v 248,raw48,FTL_Program_Page_Count" - }, - { "Crucial/Micron BX/MX1/2/3/500, M5/600, 1100 SSDs", + { "Crucial/Micron Client SSDs", // MX100, MX200, BX300, MX300, BX500, MX500, M500, M600, 1100, 1300 + // See also tnfd22_client_ssd_smart_attributes.pdf Rev. E from 2018-09-28 + // (covers M500 FW>=MU03, M510, M550, MX100, M600, MX200, 1100, MX300, 1300) "Crucial_CT(128|256|512)MX100SSD1|"// Marvell 88SS9189, tested with Crucial_CT256MX100SSD1/MU01 "Crucial_CT(200|250|256|500|512|1000|1024)MX200SSD[1346]|" // Marvell 88SS9189, tested with // Crucial_CT500MX200SSD1/MU01, Crucial_CT1024MX200SSD1/MU01, Crucial_CT250MX200SSD3/MU01, @@ -396,11 +429,12 @@ const drive_settings builtin_knowndrives[] = { // Crucial_CT1024M550SSD1/MU01, Crucial_CT128M550SSD4/MU02 "CT(120|240|480)BX300SSD1|" // Silicon Motion SM2258, same attributes as Marvell-based Crucial SSDs, // tested with CT240BX300SSD1/M2CR010 - "CT(120|240|480|960|1000)BX500SSD1|" // Silicon Motion SM2258XT, tested with CT120BX500SSD1/M6CR013, - // CT1000BX500SSD1/M6CR030 - "CT(250|500|1000|2000)MX500SSD[14]|" // Silicon Motion SM2258, tested with CT250MX500SSD1/M3CR010 + "CT(120|240|480|960|[12]000)BX500SSD1|" // Silicon Motion SM2258XT, tested with CT120BX500SSD1/M6CR013, + // CT1000BX500SSD1/M6CR030, CT2000BX500SSD1/M6CR030 + "CT(250|500|[124]000)MX500SSD[14]|" // Silicon Motion SM2258, tested with CT250MX500SSD1/M3CR010 // CT500MX500SSD1/M3CR010, CT1000MX500SSD1/M3CR010, CT2000MX500SSD1/M3CR010, - // CT250MX500SSD4/M3CR022 (now handled by above entry) + // CT500MX500SSD1/M3CR020, CT250MX500SSD4/M3CR022, CT500MX500SSD1/M3CR022, + // CT500MX500SSD1/M3CR023, CT1000MX500SSD1/M3CR032, CT4000MX500SSD1/M3CR044 "Micron_M500_MTFDDA[KTV](120|240|480|960)MAV|"// tested with Micron_M500_MTFDDAK960MAV/MU05 "Micron_M500DC_(EE|MT)FDDA[AK](120|240|480|800)MBB|" // tested with Micron_M500DC_EEFDDAA120MBB/129, // Micron_M500DC_MTFDDAK800MBB/0129 @@ -410,9 +444,11 @@ const drive_settings builtin_knowndrives[] = { "(Micron_)?M550[_-]MTFDDA[KTV](064|128|256|512|1T0)MAY|" // tested with M550-MTFDDAK256MAY/MU01 "(Micron_M600_)?(EE|MT)FDDA[KTV](128|256|512|1T0)MBF[25Z]?(-.*)?|" // tested with Micron_M600_MTFDDAK1T0MBF/MU01, // MTFDDAK256MBF-1AN1ZABHA/M603 - "(Micron_1100_)?MTFDDA[KV](256|512|1T0|2T0)TBN|" // Marvell 88SS1074, tested with - // Micron_1100_MTFDDAK256TBN/M0MU020, MTFDDAK256TBN/M0MA020 (OEM) - "Micron 1100 SATA (256G|512G|1T|2T)B", // tested with Micron 1100 SATA 256GB/M0DL022 + "(Micron_1100_)?MTFDDA[KV](256|512|1T0|2T0)TBN(-.*)?|" // Marvell 88SS1074, tested with + // Micron_1100_MTFDDAK256TBN/M0MU020, MTFDDAK256TBN/M0MA020 (OEM), MTFDDAV256TBN-1AR15ABHA/HPC0T14 + "Micron 1100 SATA (256G|512G|1T|2T)B|" // tested with Micron 1100 SATA 256GB/M0DL022 + "(Micron_1300_)?(EE|MT)FDDA[KV](256|512|1T0|2T0)TDL(-.*)?", // tested with Micron_1300_MTFDDAK256TDL/M5MU000, + // Micron_1300_MTFDDAK1T0TDL/M5MU000, MTFDDAK2T0TDL/M5MU030, MTFDDAK256TDL-1AW1ZABFA/M5MA030 "", "", //"-v 1,raw48,Raw_Read_Error_Rate " "-v 5,raw48,Reallocate_NAND_Blk_Cnt " @@ -430,10 +466,10 @@ const drive_settings builtin_knowndrives[] = { //"-v 194,tempminmax,Temperature_Celsius " "-v 195,raw48,Cumulativ_Corrected_ECC " //"-v 196,raw16(raw16),Reallocated_Event_Count " - //"-v 197,raw48,Current_Pending_Sector " + "-v 197,raw48,Current_Pending_ECC_Cnt " // MX500: May flip 0 <> 1 (ticket #1227) //"-v 198,raw48,Offline_Uncorrectable " //"-v 199,raw48,UDMA_CRC_Error_Count " - "-v 202,raw48,Percent_Lifetime_Remain " + "-v 202,raw48,Percent_Lifetime_Remain " // norm = max(100-raw,0); raw = percent_lifetime_used "-v 206,raw48,Write_Error_Rate " "-v 210,raw48,Success_RAIN_Recov_Cnt " "-v 223,raw48,Unkn_CrucialMicron_Attr " // M6CR030 @@ -447,16 +483,50 @@ const drive_settings builtin_knowndrives[] = { "-v 253,raw48,Unkn_CrucialMicron_Attr " // M6CR030 "-v 254,raw48,Unkn_CrucialMicron_Attr" // M6CR030 }, + { "Lexar 128GB SSD", // for other Lexar drives see ticket #1529 + "Lexar 128GB SSD", // Lexar 128GB SSD/H190117D + "", "", + "-v 5,raw48,New_Bad_Blk_Cnt " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 167,raw48,SSD_Protect_mode " + "-v 168,raw48,SATA_PHY_Error_Cnt " + "-v 169,raw48,Bad_Block_Cnt " + "-v 171,raw48,Program_Fail_Cnt " + "-v 172,raw48,Erase_Fail_Cnt " + "-v 173,raw48,Erase_Cnt " + "-v 175,raw48,Bad_Cluster_Cnt " + "-v 177,raw48,Read_Retry_Cnt " + "-v 180,raw48,Spare_Blk_Cnt_Left " + //"-v 187,raw48,Reported_Uncorrect " + //"-v 192,raw48,Power-Off_Retract_Count " + //"-v 194,tempminmax,Temperature_Celsius " + //"-v 199,raw48,UDMA_CRC_Error_Count " + "-v 206,raw48,Min_Erase_Cnt " + "-v 207,raw48,Max_Erase_Cnt " + "-v 208,raw48,Avg_Erase_Cnt " + "-v 209,raw48,SLC_Min_Erase_Cnt " + "-v 210,raw48,SLC_Max_Erase_Cnt " + "-v 211,raw48,SLC_Avg_Erase_Cnt " + "-v 231,raw48,SSD_Life_Left " + //"-v 241,raw48,Total_LBAs_Written " + //"-v 242,raw48,Total_LBAs_Read " + "-v 245,raw48,Bit_Error_Cnt " + }, // Reference: https://www.micron.com/resource-details/feec878a-265e-49a7-8086-15137c5f9011 // TN-FD-34: 5100 SSD SMART Implementation - { - "Micron 5100 Pro / 5200 SSDs", + { "Micron 5100 / 52x0 / 5300 / 5400 SSDs", "(Micron_5100_)?(EE|MT)FDDA[KV](240|480|960|1T9|3T8|7T6)T(BY|CB|CC)|" // Matches both stock and Dell OEM // tested with Micron_5100_MTFDDAK3T8TCB/D0MU410, MTFDDAK3T8TCB/D0MU410 - "(Micron_5200_)?MTFDDAK(480|960|1T9|3T8|7T6)TD(C|D|N)", // tested with Micron_5200_MTFDDAK3T8TDD/D1MU505 + "(Micron_5200_)?MTFDDAK(240|480|960|1T9|3T8|7T6)TD(C|D|N)|" // tested with Micron_5200_MTFDDAK240TDN/D1MU005, + // Micron_5200_MTFDDAK3T8TDD/D1MU505 + "Micron_5210_MTFDDAK(480|960|1T9|3T8|7T6)QDE|" // tested with Micron_5210_MTFDDAK7T6QDE/D2MU804 + "Micron_5300(HC)?_MTFDDA[KV](240|480|960|1T9|3T8|7T6)TD[STU]|" // tested with Micron_5300_MTFDDAK1T9TDS/D3MU001 + // Micron_5300HC_MTFDDAK960TDS/D3MN010 + "(Micron_5400_)?(EE|MT)FDDA[KV](240|480|960|1T9|3T8|7T6)TG[ABC]", // tested with Micron_5400_MTFDDAK1T9TGB/D4MU001, "", "", //"-v 1,raw48,Raw_Read_Error_Rate " - //"-v 5,raw48,Reallocated_Block_Count " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 9,raw24(raw8),Power_On_Hours " // raw24(raw8)?? //"-v 12,raw48,Power_Cycle_Count " "-v 170,raw48,Reserved_Block_Pct " // Percentage of remaining reserved blocks available @@ -464,14 +534,14 @@ const drive_settings builtin_knowndrives[] = { "-v 172,raw48,Erase_Fail_Count " "-v 173,raw48,Avg_Block-Erase_Count " "-v 174,raw48,Unexpect_Power_Loss_Ct " - //"-v 180,raw48,Reserved_Block_Count " // absolute count of remaining reserved blocks available + //"-v 180,raw48,Unused_Rsvd_Blk_Cnt_Tot " // absolute count of remaining reserved blocks available "-v 183,raw48,SATA_Int_Downshift_Ct " // SATA speed downshift count - //"-v 184,raw48,Error_Correction_Count " + //"-v 184,raw48,End-to-End_Error " //"-v 187,raw48,Reported_Uncorrect " // Number of UECC correction failures - //"-v 188,raw48,Command_Timeouts " + //"-v 188,raw48,Command_Timeout " //"-v 194,tempminmax,Temperature_Celsius " // 100 - degrees C, wraps: 101 reported as 255 - //"-v 195,raw48,Cumulativ_Corrected_ECC " - //"-v 196,raw48,Reallocation_Event_Ct " + //"-v 195,raw48,Hardware_ECC_Recovered " + //"-v 196,raw16(raw16),Reallocated_Event_Count " //"-v 197,raw48,Current_Pending_Sector " // Use the raw value //"-v 198,raw48,Offline_Uncorrectable " // Use the raw value //"-v 199,raw48,UDMA_CRC_Error_Count " // Use the raw value @@ -481,6 +551,7 @@ const drive_settings builtin_knowndrives[] = { "-v 211,raw48,Integ_Scan_Complete_Cnt " // Number of periodic data integrity scans completed "-v 212,raw48,Integ_Scan_Folding_Cnt " // Number of blocks reallocated by integrity scans "-v 213,raw48,Integ_Scan_Progress " // Current is percentage, raw is absolute number of superblocks scanned by the current integrity scan + "-v 246,raw48,Total_LBAs_Written " "-v 247,raw48,Host_Program_Page_Count " "-v 248,raw48,Bckgnd_Program_Page_Cnt" }, @@ -660,8 +731,7 @@ const drive_settings builtin_knowndrives[] = { "-v 241,raw48,Lifetime_Writes_GiB " "-v 242,raw48,Lifetime_Reads_GiB" }, - { - "StorFly CFast SATA 6Gbps SSDs", + { "StorFly CFast SATA 6Gbps SSDs", // http://datasheet.octopart.com/VSFCS2CC060G-100-Virtium-datasheet-82287733.pdf // tested with StorFly VSFCS2CC060G-100/0409-000 "StorFly VSFCS2C[CI](016|030|060|120|240)G-...", @@ -670,7 +740,7 @@ const drive_settings builtin_knowndrives[] = { "-v 192,raw48,Unsafe_Shutdown_Count " "-v 160,raw48,Uncorrectable_Error_Cnt " // 0729 - remaining in block life. In 0828 remaining is normalized to 100% then decreases - "-v 161,raw48,Spares_Remaining " + "-v 161,raw48,Spares_Remaining " "-v 241,raw48,Host_Writes_32MiB " "-v 242,raw48,Host_Reads_32MiB " "-v 169,raw48,Lifetime_Remaining% " @@ -679,47 +749,63 @@ const drive_settings builtin_knowndrives[] = { }, { "Phison Driven SSDs", // see MKP_521_Phison_SMART_attribute.pdf "BP4 mSATA SSD|" // MyDigital BP4, tested with BP4 mSATA SSD/S8FM06.9 + "Corsair Force LE(200)? SSD|" // tested with Corsair Force LE SSD/SAFC11.0, + // Corsair Force LE200 SSD/SBFM10, .../SBFM60.9 + "GIGABYTE GP-GSTFS31((120|240|256|480)G|100T)NTD|" // tested with GIGABYTE GP-GSTFS31120GNTD/SBFM61.3 "GOODRAM IRIDIUM PRO|" // tested with GOODRAM IRIDIUM PRO/SAFM01.5 - "IR-SSDPR-S25A-(120|240|480|960)|" // Goodram IRIDM, tested with IR-SSDPR-S25A-120/SBFM91.3, - // IR-SSDPR-S25A-240/SBFM91.2 + "IRP?-SSDPR-S25[AC]-(120|240|256|480|512|960|0[12]T)|" // Goodram IRIDM (PRO), tested with + // IR-SSDPR-S25A-120/SBFM91.3, IR-SSDPR-S25A-240/SBFM91.2, IRP-SSDPR-S25C-512/SCFM13.3, + // IRP-SSDPR-S25C-02T/SCFM13.2 + "KINGSTON O(C|M[48S])P0S3(64|128|256|512)B-[0A]0|" // tested with KINGSTON OCP0S364B-A0/SBFK62A3, + // KINGSTON OM4P0S3256B-A0/SBFK62A3, KINGSTON OM8P0S364B-A0/SBFK62A3, + // KINGSTON OMSP0S3128B-00/SBFK62A3 + "KINGSTON RBUSNS(4|8)180S3(32|64|128|256|512)GJ|" // RBU-SNSx180S3, tested with + // KINGSTON RBUSNS4180S3256GJ/SBFK61D1, KINGSTON RBUSNS8180S3512GJ/SBFK61D1 "KINGSTON SEDC400S37(400|480|800|960|1600|1800)G|" // DC400, tested with // KINGSTON SEDC400S37480G/SAFM02.[GH], KINGSTON SEDC400S37960G/SAFM32.I - "KINGSTON SEDC(450R|500[MR])(480|960|1920|3840)G|" // DC450R, DC500M/R, tested with + "KINGSTON SEDC(450R|500[MR])(480|960|1920|3840|7680)G|" // DC450R, DC500M/R, tested with // KINGSTON SEDC450R480G/SCEKH3. KINGSTON SEDC500M1920G/SCEKJ2.3, - // KINGSTON SEDC500R480G/SCEKJ2.3 + // KINGSTON SEDC500R480G/SCEKJ2.3, KINGSTON SEDC450R7680G/SCEKH3.4 + "KINGSTON SM2280S3G2(120)G|" // KINGSTON SM2280S3G2120G/SAFM01.R "KINGSTON SUV300S37A(120|240|480)G|" // UV300 SSD, tested with KINGSTON SUV300S37A120G/SAFM11.K "KINGSTON SKC310S3B?7A960G|" // SSDNow KC310, KINGSTON SKC310S37A960G/SAFM00.r "KINGSTON SKC400S37(128G|256G|512G|1T)|" // SSDNow KC400, KINGSTON SKC400S37128G "KINGSTON SV310S3(7A|D7|N7A|B7A)960G|" // SSDNow V310 "KINGSTON SHSS3B?7A(120|240|480|960)G|" // HyperX Savage - "KINGSTON ?SA400S37(120|240|480|960)G|" // Kingston A400 SSD, Phison S11 or + "KINGSTON SS200S330G|" // SSDNow S200, tested with KINGSTON SS200S330G/S8FM06.A + "KINGSTON ?SA400(M8|S37)(120|240|480|960)G|" // Kingston A400 SSD, Phison S11 or // Silicon Motion controller (see ticket #801), tested with // KINGSTON SA400S37240G/SBFK10D7, KINGSTON SA400S37120G/SBFK71E0, */SBFKB1D1 - // KINGSTON SA400S37480G/SBFK10D7 (two spaces) - "Patriot (Flare|Blast|Blaze|Burst)|" // tested with Patriot Flare/SBFM91.2, - // Patriot Blast/SAFM11.3, Patriot Blaze/S9FM02, Patriot Burst/SBFM11.2 - "PNY CS(13|22)11 (120|240|480|960)GB SSD|" // tested with PNY CS1311 120GB SSD/CS131122, - // PNY CS2211 240GB SSD/CS221016 - "SSD Smartbuy (60|120|240)GB|" // SSD Smartbuy 240GB/SBFM91.1 + // KINGSTON SA400S37480G/SBFK10D7 (two spaces), KINGSTON SA400M8240G/SBFK61E1 + "Patriot (Blast|Blaze|Flare|Ignite)|" // tested with Patriot Blast/SAFM11.3, + // Patriot Blaze/S9FM02, Patriot Flare/SBFM91.2, Patriot Ignite/SAFM01.7 + "Patriot Burst( (120|240|480|960)GB)?|" // tested with Patriot Burst/SBFM11.2, + // Patriot Burst 480GB/SBFMLA.5 + "PNY CS(900|1311|2211) (120|240|480|500|960)GB SSD|" // tested with PNY CS900 120GB SSD/CS900612, + // PNY CS900 240GB SSD/CS900613, PNY CS900 500GB SSD/CS900Y13, PNY CS1311 120GB SSD/CS131122, + // PNY CS2211 240GB SSD/CS221016 (CS900 1TB has different attribute set) + "PNY ELITE PSSD|" // tested with PNY ELITE PSSD/CS105P13 (240G) + "SSD Smartbuy (60|64|120|128|240|256|480|512|960|1024|2000)GB|" // PS3111-S11, tested with + // SSD Smartbuy 240GB/SBFM91.1, SSD Smartbuy 64GB/SBFM21.1 "SSD PHISON 256GB PS3110-S10C|" // tested with SSD PHISON 256GB PS3110-S10C/SAFM12.2 "SSDPR-CX400-(128|256|512|1024)|" // Goodram CX400, tested with SSDPR-CX400-512/SBFM61.3 - "SSM28(128|256|512)GPTCB3B-S11[24]61[123]", // tested with SSM28256GPTCB3B-S112612/SBFM61.2 + "TEAM L3 EVO SSD (120|240|480|960)GB|" // TEAM L3 EVO SSD 120GB/SBFM11.0 + "SSM28(128|256|512)GPTCB3B-S11[24]61[123]|" // tested with SSM28256GPTCB3B-S112612/SBFM61.2 + "SVM2S46(128|256|512)GNPI51UF", // tested with SVM2S46128GNPI51UF/SBFMH1.2 "", "", //"-v 1,raw48,Raw_Read_Error_Rate " "-v 2,raw48,Not_In_Use " "-v 3,raw48,Not_In_Use " - "-v 5,raw48,Not_In_Use " + "-v 5,raw48,Retired_Block_Count " "-v 7,raw48,Not_In_Use " "-v 8,raw48,Not_In_Use " - //"-v 9,raw24(raw8),Power_On_Hours " - "-v 5,raw48,Retired_Block_Count " //"-v 9,raw24(raw8),Power_On_Hours " "-v 10,raw48,Not_In_Use " //"-v 12,raw48,Power_Cycle_Count " "-v 167,raw48,Write_Protect_Mode " // DC500 "-v 168,raw48,SATA_Phy_Error_Count " "-v 169,raw48,Bad_Block_Rate " // DC500 - "-v 170,raw24/raw24:z54z10,Bad_Blk_Ct_Erl/Lat " // Early bad block/Later bad block + "-v 170,raw24/raw24:z54z10,Bad_Blk_Ct_Lat/Erl " // Later bad block/Early bad block (see #1642) "-v 172,raw48,Erase_Fail_Count " // DC500 "-v 173,raw16(avg16),MaxAvgErase_Ct " "-v 175,raw48,Not_In_Use " @@ -750,27 +836,27 @@ const drive_settings builtin_knowndrives[] = { // weak information in the model. Detection is based on Firmware. { "Phison Driven OEM SSDs", // see MKP_521_Phison_SMART_attribute.pdf "GOODRAM|" // tested with GOODRAM CX200 (GOODRAM/SAFM12.2) - "Hoodisk SSD|" // tested with Hoodisk SSD/SBFM01.3 + "Hoodisk SSD|" // tested with Hoodisk SSD/SBFM01.3, Hoodisk SSD/SBFMJ1.3 "INTENSO|" // tested with Intenso SSD SATA III Top (INTENSO/S9FM02.6, .../SAFM01.6) "INTENSO SATA III SSD|" // tested with INTENSO SATA III SSD/SBFM11.2, .../SBFM81.3 + "Kingmax SATA SSD (120|240|480|960)GB|" // tested with Kingmax SATA SSD 240GB/SBFMY1.3 "SATA SSD|" // tested with Supermicro SSD-DM032-PHI (SATA SSD/S9FM02.1), // PC Engines msata16d (SATA SSD/S9FM02.3), FoxLine flssd240x4s(SATA SSD/SBFM10.5) - "SPCC Solid State Disk", // Silicon Power A55, tested with SPCC Solid State Disk/SBFM61.2 - "S[89AB]FM[0-9][0-9]\\.[0-9]", + "SPCC Solid State Disk", // Silicon Power, tested with SPCC Solid State Disk/SBFD00.3, + // SPCC Solid State Disk/SBFM61.2, SPCC Solid State Disk/SBFMT1.3 + "S[89AB]F[DM][0-9JTY][0-9]\\.[0-9]", "", //"-v 1,raw48,Raw_Read_Error_Rate " "-v 2,raw48,Not_In_Use " "-v 3,raw48,Not_In_Use " - "-v 5,raw48,Not_In_Use " + "-v 5,raw48,Retired_Block_Count " "-v 7,raw48,Not_In_Use " "-v 8,raw48,Not_In_Use " - //"-v 9,raw24(raw8),Power_On_Hours " - "-v 5,raw48,Retired_Block_Count " //"-v 9,raw24(raw8),Power_On_Hours " "-v 10,raw48,Not_In_Use " //"-v 12,raw48,Power_Cycle_Count " "-v 168,raw48,SATA_Phy_Error_Count " - "-v 170,raw24/raw24:z54z10,Bad_Blk_Ct_Erl/Lat " // Early bad block/Later bad block + "-v 170,raw24/raw24:z54z10,Bad_Blk_Ct_Lat/Erl " // Later bad block/Early bad block (see #1642) "-v 173,raw16(avg16),MaxAvgErase_Ct " "-v 175,raw48,Not_In_Use " "-v 183,raw48,Unknown_Attribute " @@ -831,6 +917,7 @@ const drive_settings builtin_knowndrives[] = { { "Indilinx Barefoot_2/Everest/Martini based SSDs", "OCZ VERTEX[ -]PLUS|" // tested with OCZ VERTEX-PLUS/3.55, OCZ VERTEX PLUS/3.55 "OCZ-VERTEX PLUS R2|" // Barefoot 2, tested with OCZ-VERTEX PLUS R2/1.2 + "OCZ-OCTANE|" // Everest 1, tested with OCZ-OCTANE/1.13 "OCZ-PETROL|" // Everest 1, tested with OCZ-PETROL/3.12 "OCZ-AGILITY4|" // Everest 2, tested with OCZ-AGILITY4/1.5.2 "OCZ-VERTEX4", // Everest 2, tested with OCZ-VERTEX4/1.5 @@ -915,8 +1002,7 @@ const drive_settings builtin_knowndrives[] = { "-v 249,raw48,Total_NAND_Prog_Ct_GiB " "-v 251,raw48,Total_NAND_Read_Ct_GiB" }, - { - "OCZ/Toshiba Trion SSDs", + { "OCZ/Toshiba Trion SSDs", "OCZ-TRION1[05]0|" // tested with OCZ-TRION100/SAFM11.2A, TRION150/SAFZ72.2 "TOSHIBA-TR150|" // tested with TOSHIBA-TR150/SAFZ12.3 "TOSHIBA Q300( Pro\\.)?", // tested with TOSHIBA Q300 Pro./JYRA0101 @@ -941,7 +1027,7 @@ const drive_settings builtin_knowndrives[] = { //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 7,raw48,Seek_Error_Rate " // from InnoDisk iSMART Linux tool, useless for SSD //"-v 8,raw48,Seek_Time_Performance " - //"-v 9,raw48,Power_On_Hours " + //"-v 9,raw24(raw8),Power_On_Hours " //"-v 10,raw48,Spin_Retry_Count " //"-v 12,raw48,Power_Cycle_Count " "-v 168,raw48,SATA_PHY_Error_Count " @@ -963,7 +1049,7 @@ const drive_settings builtin_knowndrives[] = { //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 2,raw48,Throughput_Performance " //"-v 3,raw16(avg16),Spin_Up_Time " - //"-v 5,raw48,Reallocated_Sector_Count " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " "-v 7,raw48,Seek_Error_Rate " // ? "-v 8,raw48,Seek_Time_Performance " // ? //"-v 9,raw24(raw8),Power_On_Hours " @@ -1032,18 +1118,19 @@ const drive_settings builtin_knowndrives[] = { "-v 248,raw48,Remaining_Life " "-v 249,raw48,Spare_Blocks_Remaining" }, - { "Innodisk 3IE3/3ME3/3ME4 SSDs", // tested with 2.5" SATA SSD 3ME3/S15A19, CFast 3ME3/S15A19 + { "Innodisk 1IE3/3IE3/3ME3/3IE4/3ME4 SSDs", // tested with 2.5" SATA SSD 3ME3/S15A19, // InnoDisk Corp. - mSATA 3ME3/S15A19, mSATA mini 3ME3/S15A19, M.2 (S42) 3ME3, // SATA Slim 3ME3/S15A19, SATADOM-MH 3ME3/S15A19, SATADOM-ML 3ME3/S15A19, // SATADOM-MV 3ME3/S15A19, SATADOM-SL 3ME3/S15A19, SATADOM-SV 3ME3/S15A19, // SATADOM-SL 3IE3/S151019N, 2.5" SATA SSD 3IE3/S15C14i, CFast 3IE3/S15C14i, - // InnoDisk Corp. - mSATA 3IE3/S15C14i, Mini PCIeDOM 1IE3/S15C14i, + // InnoDisk Corp. - mSATA 3IE3/S15C14i, Mini PCIeDOM 1IE3/S15C14i, CFast 3ME3/S15A19 // mSATA mini 3IE3/S15C14i, M.2 (S42) 3IE3/S15C14i, SATA Slim 3IE3/S15C14i, // SATADOM-SH 3IE3 V2/S15C14i, SATADOM-SL 3IE3 V2/S15A19i, SATADOM-SV 3IE3 V2/S15C14i // mSATA 3ME4/L16711, M.2 (S42) 3ME4/L16711, SATADOM-MH 3ME4/L16B01, - // SATADOM-SH 3ME4/L16B01, SATADOM-SH Type C 3ME4/L16B01, SATADOM-SH Type D 3ME4/L16B01 - "(2.5\" SATA SSD|CFast|InnoDisk Corp\\. - mSATA|Mini PCIeDOM|mSATA( mini)?|" - "M\\.2 \\(S42\\)|SATA Slim|SATADOM-[MS][HLV]( Type [CD])?) 3([IM]E3|ME4)( V2)?", + // SATADOM-SH 3ME4/L16B01, SATADOM-SH Type C 3ME4/L16B01, SATADOM-SH Type D 3ME4/L16B01, + // mSATA 3IE4/L16B01Hi + "(2.5\" SATA SSD|CFast|Mini PCIeDOM|(InnoDisk Corp\\. - )?mSATA( mini)?) (1IE3|3[IM]E[34])( V2)?|" + "(M\\.2 \\(S42\\)|SATA Slim|SATADOM-[MS][HLV]( Type [CD])?) (1IE3|3[IM]E[34])( V2)?", "", "", //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 2,raw48,Throughput_Performance " @@ -1076,9 +1163,9 @@ const drive_settings builtin_knowndrives[] = { "-v 241,raw48,Host_Writes_32MiB " "-v 242,raw48,Host_Reads_32MiB" }, - { "InnoDisk iCF 9000 CompactFlash Cards", // tested with InnoDisk Corp. - iCF9000 1GB/140808, - // ..., InnoDisk Corp. - iCF9000 64GB/140808 - "InnoDisk Corp\\. - iCF9000 (1|2|4|8|16|32|64)GB", + { "InnoDisk iCF 9000 / 1SE2 Cards", // tested with InnoDisk Corp. - iCF9000 1GB/140808, + // InnoDisk Corp. - iCF9000 64GB/140808, InnoDisk Corp. - EDC 1SE2 H 64GB/131216 + "InnoDisk Corp\\. - (iCF9000|EDC 1SE2 H) (1|2|4|8|16|32|64)GB", "", "", //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -1101,8 +1188,9 @@ const drive_settings builtin_knowndrives[] = { "-v 241,raw48,Host_Writes_32MiB " "-v 242,raw48,Host_Reads_32MiB" }, - { "Intel X25-E SSDs", - "SSDSA2SH(032|064)G1.* INTEL", // G1 = first generation + { "Intel X25-E SSDs", // tested with + // INTELSSDSA2SH064G1IB 43W7659 44E9163IBM/447C8860 + "(INTEL)?SSDSA2SH(032|064)G1.* (.*IBM|INTEL)", // G1 = first generation "", "", //"-v 3,raw16(avg16),Spin_Up_Time " //"-v 4,raw48,Start_Stop_Count " @@ -1193,9 +1281,10 @@ const drive_settings builtin_knowndrives[] = { }, { "Intel 320 Series SSDs", // tested with INTEL SSDSA2CT040G3/4PC10362, // INTEL SSDSA2CW160G3/4PC10362, SSDSA2BT040G3/4PC10362, SSDSA2BW120G3A/4PC10362, - // INTEL SSDSA2BW300G3D/4PC10362, SSDSA2BW160G3L/4PC1LE04, SSDSA1NW160G3/4PC10362 - "INTEL SSDSA[12][BCN][WT](040|080|120|160|300|600)G3[ADL]?", - // 2B = 2.5" 7mm, 2C = 2.5" 9.5mm, 1N = 1.8" microSATA + // INTEL SSDSA2BW300G3D/4PC10362, SSDSA2BW160G3L/4PC1LE04, SSDSA1NW160G3/4PC10362, + // INTEL SSDSA2BW160G3H/4PC10365 + "INTEL SSDSA[12][BCN][WT](040|080|120|160|300|600)G3[ADHL]?", + // 2B = 2.5" 7mm, 2C = 2.5" 9.5mm, 1N = 1.8" microSATA, *H = HP OEM "", "", "-F nologdir " //"-v 3,raw16(avg16),Spin_Up_Time " @@ -1311,10 +1400,10 @@ const drive_settings builtin_knowndrives[] = { "-v 249,raw48,NAND_Writes_1GiB" }, { "Intel 53x and Pro 1500/2500 Series SSDs", // SandForce SF-2281, tested with - // INTEL SSDSC2BW180A4/DC12, SSDSC2BW240A4/DC12, SSDMCEAW120A4/DC33 - // INTEL SSDMCEAW240A4/DC33, SSDSC2BF480A5/TG26, SSDSC2BW240H6/RG21 - // INTEL SSDSC2BF180A4H/LH6i - "INTEL SSD(MCEA|SC2B|SCKJ)[WF](056|080|120|180|240|360|480)(A4H?|A5|H6)", + // INTEL SSDSC2BW180A4/DC12, INTEL SSDSC2BW240A4/DC12, INTEL SSDMCEAW120A4/DC33, + // INTEL SSDMCEAW240A4/DC33, INTEL SSDSC2BF180A4H/LH6i, INTEL SSDSC2BF480A5/TG26, + // INTEL SSDSC2BF240A5L/LT2i, INTEL SSDSC2BW240H6/RG21 + "INTEL SSD(MCEA|SC2B|SCKJ)[WF](056|080|120|180|240|360|480)(A4H?|A5L?|H6)", // SC2B = 2.5", MCEA = mSATA, SCKJ = M.2; A4 = 530/Pro 1500, A5 = Pro 2500, H6 = 535 "", "", //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -1360,7 +1449,7 @@ const drive_settings builtin_knowndrives[] = { // https://www.intel.com/content/www/us/en/solid-state-drives/ssd-540s-series-spec.html // https://www.intel.com/content/www/us/en/solid-state-drives/ssd-540s-series-m2-spec.html { "Intel 540 Series SSDs", // INTEL SSDSC2KW120H6/LSF036C, INTEL SSDSC2KW480H6/LSF036C - "INTEL SSDSC[K2]KW(120H|180H|240H|360H|480H|010X)6", + "INTEL SSDSC[K2]KW(120H|180H|240H|360H|480H|010X)6", "", "", "-v 9,msec24hour32,Power_On_Hours_and_Msec " "-v 170,raw48,Available_Reservd_Space " @@ -1377,7 +1466,8 @@ const drive_settings builtin_knowndrives[] = { }, { "Intel 545s Series SSDs", // tested with INTEL SSDSCKKW512G8, INTEL SSDSC2KW512G8/LHF002C // SSDSCKKW128G8X1, SSDSCKKW256G8X1, SSDSCKKW512G8X1, SSDSCKKW010T8X1 - "INTEL SSDSC[2K]KW(128G|256G|512G|010T)8.*", + // INTEL SSDSCKKF512G8 SATA 512GB/LHFD05N + "INTEL SSDSC[2K]K[WF](128G|256G|512G|010T)8.*", "", "", //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 9,raw24(raw8),Power_On_Hours " @@ -1407,19 +1497,23 @@ const drive_settings builtin_knowndrives[] = { }, { "Intel 730 and DC S35x0/3610/3700 Series SSDs", // tested with INTEL SSDSC2BP480G4, SSDSC2BB120G4/D2010355, // INTEL SSDSC2BB800G4T, SSDSC2BA200G3/5DV10250, SSDSC2BB080G6/G2010130, SSDSC2BX200G4/G2010110, - // INTEL SSDSC2BB016T6/G2010140, SSDSC2BX016T4/G2010140, SSDSC2BB150G7/N2010101 - "INTEL SSDSC(1N|2B)[ABPX]((080|100|120|150|160|200|240|300|400|480|600|800)G[3467][RT]?|(012|016)T[46])", + // INTEL SSDSC2BB016T6/G2010140, SSDSC2BX016T4/G2010140, SSDSC2BB150G7/N2010101, + // INTEL SSDSC2BB480H4/D2010380, INTEL SSDSC2BB240G4C/D201FJ14, INTEL SSDSC2BA800G3E/5DV10250 + "INTEL SSDSC(1N|2B)[ABPX]((080|100|120|150|160|200|240|300|400|480|600|800)[GH][3467][CERT]?|(012|016)T[46])|" // A = S3700, B*4 = S3500, B*6 = S3510, P = 730, X = S3610 // Dell ships drives with model of the form SSDSC2BB120G4R + "VK000(120|240|480)GWSXF", // tested with VK000480GWSXF/HPG2 (HPE INTEL SSDSC2BB480G4) "", "", //"-v 3,raw16(avg16),Spin_Up_Time " //"-v 4,raw48,Start_Stop_Count " //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 9,raw24(raw8),Power_On_Hours " + "-v 11,raw48,Unknown_Intel_Attribute " // VK000480GWSXF //"-v 12,raw48,Power_Cycle_Count " "-v 170,raw48,Available_Reservd_Space " "-v 171,raw48,Program_Fail_Count " "-v 172,raw48,Erase_Fail_Count " + "-v 173,raw48,Unknown_Intel_Attribute " // VK000480GWSXF "-v 174,raw48,Unsafe_Shutdown_Count " "-v 175,raw16(raw16),Power_Loss_Cap_Test " "-v 183,raw48,SATA_Downshift_Count " @@ -1462,31 +1556,31 @@ const drive_settings builtin_knowndrives[] = { { "Intel DC S3110 Series SSDs", // Tested with INTEL SSDSCKKI256G8 "INTEL SSDSCKKI(128|256|512)G8", "", "", - //"-v 5,raw16(raw16),Reallocated_Sector_Ct " - //"-v 9,raw24(raw8),Power_On_Hours " - //"-v 12,raw48,Power_Cycle_Count " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " "-v 170,raw48,Available_Reservd_Space " "-v 171,raw48,Program_Fail_Count " "-v 172,raw48,Erase_Fail_Count " - //"-v 173 is missing in official Intel doc" + //"-v 173 is missing in official Intel doc" "-v 174,raw48,Unexpect_Power_Loss_Ct " "-v 183,raw48,SATA_Downshift_Count " - //"-v 184,raw48,End-to-End_Error_Count " + //"-v 184,raw48,End-to-End_Error " "-v 187,raw48,Uncorrectable_Error_Cnt " - //"-v 190,tempminmax,Airflow_Temperature_Cel " - //"-v 192,raw48,Power-Off_Retract_Count " - //"-v 199,raw48,UDMA_CRC_Error_Count " + //"-v 190,tempminmax,Airflow_Temperature_Cel " + //"-v 192,raw48,Power-Off_Retract_Count " + //"-v 199,raw48,UDMA_CRC_Error_Count " "-v 225,raw48,Host_Writes_32MiB " "-v 226,raw48,Workld_Media_Wear_Indic " "-v 227,raw48,Workld_Host_Reads_Perc " "-v 228,raw48,Workload_Minutes " - //"-v 232,raw48,Available_Reservd_Space " - //"-v 233,raw48,Media_Wearout_Indicator " - //"-v 236 is missing in official Intel doc" + //"-v 232,raw48,Available_Reservd_Space " + //"-v 233,raw48,Media_Wearout_Indicator " + //"-v 236 is missing in official Intel doc" "-v 241,raw48,Host_Writes_32MiB " "-v 242,raw48,Host_Reads_32MiB " "-v 249,raw48,NAND_Writes_1GiB " - //"-v 252 is missing in official Intel doc" + //"-v 252 is missing in official Intel doc" }, { "Intel 3710 Series SSDs", // INTEL SSDSC2BA200G4R/G201DL2B (dell) "INTEL SSDSC2BA(200G|400G|800G|012T)4.?", @@ -1555,7 +1649,8 @@ const drive_settings builtin_knowndrives[] = { { "Intel S4510/S4610/S4500/S4600 Series SSDs", // INTEL SSDSC2KB480G7/SCV10100, // INTEL SSDSC2KB960G7/SCV10100, INTEL SSDSC2KB038T7/SCV10100, // INTEL SSDSC2KB038T7/SCV10121, INTEL SSDSC2KG240G7/SCV10100 - "INTEL SSDSC(2K|KK)(B|G)(240G|480G|960G|019T|038T)(7|8).?", + // INTEL SSDSC2KB480GZ/7CV10100 + "INTEL SSDSC(2K|KK)(B|G)(240G|480G|960G|019T|038T)(7|8|Z).?", "", "", //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 9,raw24(raw8),Power_On_Hours " @@ -1630,34 +1725,35 @@ const drive_settings builtin_knowndrives[] = { "KINGSTON SUV400S37A?(120|240|480|960)G|" // tested with KINGSTON SUV400S37120G/0C3J96R9, // KINGSTON SUV400S37240G/0C3J96R9, KINGSTON SUV400S37240G/0C3K87RA, // KINGSTON SUV400S37120G/0C3K87RA - "KINGSTON SUV500(MS)?(120|240|480|960)G", // tested with KINGSTON SUV500120G/003056R6, + "KINGSTON SUV500(M[8S])?(120|240|480|960)G", // tested with KINGSTON SUV500120G/003056R6, // KINGSTON SUV500240G/003056R6, KINGSTON SUV500480G/003056RI, - // KINGSTON SUV500MS120G/003056RA, KINGSTON SUV500MS120G/003056RI + // KINGSTON SUV500MS120G/003056RA, KINGSTON SUV500MS120G/003056RI, + // KINGSTON SUV500M8120G/003056RI "", "", - // "-v 1,raw48,Raw_Read_Error_Rate " - // "-v 5,raw16(raw16),Reallocated_Sector_Ct " - // "-v 9,raw24(raw8),Power_On_Hours " - // "-v 12,raw48,Power_Cycle_Count " + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " "-v 100,raw48,Unknown_Kingston_Attr " "-v 101,raw48,Unknown_Kingston_Attr " "-v 170,raw48,Reserved_Block_Count " "-v 171,raw48,Program_Fail_Count " "-v 172,raw48,Erase_Fail_Count " "-v 174,raw48,Unexpect_Power_Loss_Ct " - // "-v 175,raw48,Program_Fail_Count_Chip,SSD " - // "-v 176,raw48,Erase_Fail_Count_Chip,SSD " - // "-v 177,raw48,Wear_Leveling_Count,SSD " - // "-v 178,raw48,Used_Rsvd_Blk_Cnt_Chip,SSD " - // "-v 180,raw48,Unused_Rsvd_Blk_Cnt_Tot,SSD " - // "-v 183,raw48,Runtime_Bad_Block " - // "-v 187,raw48,Reported_Uncorrect " - // "-v 194,tempminmax,Temperature_Celsius " - // "-v 195,raw48,Hardware_ECC_Recovered " - // "-v 196,raw16(raw16),Reallocated_Event_Count " - // "-v 197,raw48,Current_Pending_Sector " - // "-v 199,raw48,UDMA_CRC_Error_Count " + //"-v 175,raw48,Program_Fail_Count_Chip " + //"-v 176,raw48,Erase_Fail_Count_Chip " + //"-v 177,raw48,Wear_Leveling_Count " + //"-v 178,raw48,Used_Rsvd_Blk_Cnt_Chip " + //"-v 180,raw48,Unused_Rsvd_Blk_Cnt_Tot " + //"-v 183,raw48,Runtime_Bad_Block " + //"-v 187,raw48,Reported_Uncorrect " + //"-v 194,tempminmax,Temperature_Celsius " + //"-v 195,raw48,Hardware_ECC_Recovered " + //"-v 196,raw16(raw16),Reallocated_Event_Count " + //"-v 197,raw48,Current_Pending_Sector " + //"-v 199,raw48,UDMA_CRC_Error_Count " "-v 201,raw48,Unc_Read_Error_Rate " - // "-v 204,raw48,Soft_ECC_Correction " + //"-v 204,raw48,Soft_ECC_Correction " "-v 231,raw48,SSD_Life_Left " "-v 241,raw48,Host_Writes_GiB " "-v 242,raw48,Host_Reads_GiB " @@ -1678,12 +1774,13 @@ const drive_settings builtin_knowndrives[] = { "-v 234,raw24/raw24:w01234,Avg/Max_Erase_Count " "-v 235,raw24/raw24:w01z23,Good/Sys_Block_Count" }, - { "JMicron based SSDs", // JMicron JMF61x, JMF66x, JMF670 + { "JMicron/Maxiotek based SSDs", // JMicron JMF61x, JMF66x, JMF670 "ADATA S596 Turbo|" // tested with ADATA S596 Turbo 256GB SATA SSD (JMicron JMF616) - "ADATA SP600|" // tested with ADATA SP600/2.4 (JMicron JMF661) "ADATA SP310|" // Premier Pro SP310 mSATA, JMF667, tested with ADATA SP310/3.04 + "ADATA SP600(NS34)?|" // tested with ADATA SP600/2.4 (JMicron JMF661) "ADATA SX930|" // tested with ADATA SX930/6.8SE "APPLE SSD TS(064|128|256|512)C|" // Toshiba?, tested with APPLE SSD TS064C/CJAA0201 + "IM2S3138E-(128|256)GM-B|" // ADATA OEM, tested with IM2S3138E-128GM-B/DA002 "KingSpec KDM-SA\\.51-008GMJ|" // tested with KingSpec KDM-SA.51-008GMJ/1.092.37 (JMF605?) "KINGSTON SNV425S2(64|128)GB|" // SSDNow V Series (2. Generation, JMF618), // tested with KINGSTON SNV425S264GB/C091126a @@ -1693,6 +1790,7 @@ const drive_settings builtin_knowndrives[] = { "KINGSTON SVP?100S2B?(64|96|128|256|512)G|" // SSDNow V100/V+100 Series, // tested with KINGSTON SVP100S296G/CJR10202, KINGSTON SV100S2256G/D110225a "KINGSTON SV200S3(64|128|256)G|" // SSDNow V200 Series, tested with KINGSTON SV200S3128G/E120506a + "NT-(64|128|256|512|[12]T)|" // KingSpec NT, MAS0902A-B2C or CS1802A-B2C, tested with NT-512/T191212 "TOSHIBA THNS128GG4BBAA|" // Toshiba / Super Talent UltraDrive DX, // tested with Toshiba 128GB 2.5" SSD (built in MacBooks) "TOSHIBA THNSNC128GMLJ|" // tested with THNSNC128GMLJ/CJTA0202 (built in Toshiba Protege/Dynabook) @@ -1729,12 +1827,13 @@ const drive_settings builtin_knowndrives[] = { //"-v 241,raw48,Total_LBAs_Written " // FW SVN423b //"-v 242,raw48,Total_LBAs_Read " // FW SVN423b }, - { "Plextor M3/M5/M6 Series SSDs", // Marvell 88SS9174 (M3, M5S), 88SS9187 (M5P, M5Pro), 88SS9188 (M6M/S), + { "Plextor M3/M5/M6/M7 Series SSDs", // Marvell 88SS9174 (M3, M5S), 88SS9187 (M5P, M5Pro), 88SS9188 (M6M/S), // tested with PLEXTOR PX-128M3/1.01, PX-128M3P/1.04, PX-256M3/1.05, PX-128M5S/1.02, PX-256M5S/1.03, // PX-128M5M/1.05, PX-128M5S/1.05, PX-128M5Pro/1.05, PX-512M5Pro/1.06, PX-256M5P/1.01, PX-128M6S/1.03 // (1.04/5 Firmware self-test log lifetime unit is bogus, possibly 1/256 hours) - // PLEXTOR PX-256M6S+/1.00 - "PLEXTOR PX-(64|128|256|512|768)M(3P?|5[MPS]|5Pro|6[MS])\\+?", + // PLEXTOR PX-256M6S+/1.00, PLEXTOR PX-128M3/1.00, PLEXTOR PX-128M3/1.07, PLEXTOR PX-128M6V/1.04, + // PLEXTOR PX-128M6G-2242/1.01, PLEXTOR PX-512M7VC/1.05, PLEXTOR PX-512M8VC +/1.00 + "PLEXTOR ?PX-(64|128|256|512|768)M(3P?|5[MPS]|5Pro|6[GMSV]|[78]VC)(\\+|-.*| )?", "", "", //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -1783,27 +1882,35 @@ const drive_settings builtin_knowndrives[] = { "MZ7PC(512|256|128|064)HA(GH|FU|DR)-000.*|" // probably PM830, tested with SAMSUNG MZ7PC128HAFU-000L1/CXM04L1Q "Samsung SSD 840 (PRO )?Series|" // tested with Samsung SSD 840 PRO Series 128GB/DXM04B0Q, // Samsung SSD 840 Series/DXT06B0Q - "Samsung SSD 8[456]0 EVO (mSATA |M\\.2 )?((120|250|500|750)G|[12]T)B|" // tested with + "Samsung SSD 8[4-7]0 EVO (mSATA |M\\.2 )?((120|250|500|750)G|[124]T)B|" // tested with // Samsung SSD 840 EVO (120|250|500|750)GB/EXT0AB0Q, // Samsung SSD 840 EVO (120|250)GB/EXT0BB6Q, 1TB/EXT0BB0Q, 120GB mSATA/EXT41B6Q, // Samsung SSD 850 EVO 250GB/EMT01B6Q, Samsung SSD 850 EVO M.2 250GB/EMT21B6Q, // Samsung SSD 850 EVO mSATA 120GB/EMT41B6Q, Samsung SSD 850 EVO 2TB/EMT02B6Q, // Samsung SSD 860 EVO 250GB/RVT01B6Q, Samsung SSD 860 EVO mSATA 250GB/RVT41B6Q, // Samsung SSD 860 EVO 500GB/RVT01B6Q, Samsung SSD 860 EVO mSATA 500GB/RVT41B6Q, - // Samsung SSD 860 EVO mSATA 1TB/RVT41B6Q, Samsung SSD 860 EVO 2TB/RVT01B6Q - "Samsung SSD 8[56]0 PRO ((128|256|512)G|1T)B|" // tested with Samsung SSD 850 PRO 128GB/EXM01B6Q, - // Samsung SSD 850 PRO 1TB/EXM01B6Q, Samsung SSD 860 PRO 256GB/RVM01B6Q, - // Samsung SSD 860 PRO 512GB/RVM01B6Q, Samsung SSD 860 PRO 1TB/RVM01B6Q - "SAMSUNG MZ7PA256HMDR-.*|" // PM810 (470 Series), tested with SAMSUNG MZ7PA256HMDR-010H1/AXM07H1Q + // Samsung SSD 860 EVO mSATA 1TB/RVT41B6Q, Samsung SSD 860 EVO 2TB/RVT01B6Q, + // Samsung SSD 860 EVO 4TB/RVT04B6Q, Samsung SSD 870 EVO 1TB/SVT01B6Q, + // Samsung SSD 870 EVO 4TB/SVT02B6Q + "Samsung SSD 8[56]0 PRO ((128|256|512)G|[124]T)B|" // tested with Samsung SSD 850 PRO 128GB/EXM01B6Q, + // Samsung SSD 850 PRO 1TB/EXM01B6Q, Samsung SSD 850 PRO 2TB/EXM02B6Q, + // Samsung SSD 860 PRO 256GB/RVM01B6Q, Samsung SSD 860 PRO 512GB/RVM01B6Q, + // Samsung SSD 860 PRO 1TB/RVM01B6Q + "Samsung SSD 8[67]0 QVO [1248]TB|" // tested with Samsung SSD 860 QVO 1TB/RVQ02B6Q, + // Samsung SSD 860 QVO 2TB/RVQ01B6Q, Samsung SSD 870 QVO 4TB/SVQ01B6Q + "Samsung SSD 883 DCT ((240|480|960)G|(1\\.92|3\\.84)T)B|" // tested with + // Samsung SSD 883 DCT 480GB/HXT7404Q, Samsung SSD 883 DCT 3.84TB/HXT7404Q "Samsung SSD 845DC EVO .*|" // Samsung SSD 845DC EVO 960GB/EXT03X3Q + "SAMSUNG MZ7PA256HMDR-.*|" // PM810 (470 Series), tested with SAMSUNG MZ7PA256HMDR-010H1/AXM07H1Q "SAMSUNG MZ[7M]PC(032|064|128|256|512)HBCD-.*|" // PM830, tested with SAMSUNG MZMPC032HBCD-000L1/CXM12L1Q "SAMSUNG MZ7TD(128|256)HAFV-.*|" // 840 Series, tested with SAMSUNG MZ7TD256HAFV-000L7/DXT06L6Q - "SAMSUNG MZMTD(128|256|512)HAGL-.*|" // PM841, tested with SAMSUNG MZMTD512HAGL-00000/DXT4200Q - "SAMSUNG MZ7TD512HAGM-.*|" // Another PM841, SAMSUNG MZ7TD512HAGM-000L1/DXT06L0Q - "SAMSUNG MZ7WD((120|240)H[AC]FV|480HAGM|960HAGP)-00003|" // SM843T Series, tested with - // SAMSUNG MZ7WD120HAFV-00003/DXM85W3Q, SAMSUNG MZ7WD120HCFV-00003/DXM9203Q - "SAMSUNG MZ[7N]TE(128|256|512)HMHP-.*|" // PM851, tested with SAMSUNG MZ7TE256HMHP-000L7/EXT09L6Q, - // SAMSUNG MZNTE256HMHP-000H1/EXT22H0Q + "SAMSUNG MZ[7M]TD(128|256|512)HA[GF][LMV]-.*|" // PM841, tested with SAMSUNG MZMTD512HAGL-00000/DXT4200Q, + // SAMSUNG MZ7TD512HAGM-000L1/DXT06L0Q, SAMSUNG MZMTD128HAFV-000L1/DXT43L0Q + "SAMSUNG MZ7WD((120|240)H[AC]FV|480H[AC]GM|960H[AC]GP)-.*|" // SM843T(N?) Series, tested with + // SAMSUNG MZ7WD120HAFV-00003/DXM85W3Q, SAMSUNG MZ7WD120HCFV-00003/DXM9203Q, + // SAMSUNG MZ7WD960HCGP-000PU/DXM9BW4Q (SM843TN?) + "SAMSUNG MZ[7N]TE(128|256|512)HM(HP|JH)-.*|" // PM851, tested with SAMSUNG MZ7TE256HMHP-000L7/EXT09L6Q, + // SAMSUNG MZNTE256HMHP-000H1/EXT22H0Q, SAMSUNG MZNTE512HMJH-000L2/EXT26L0Q "SAMSUNG MZMPF(032|064)HCFV-.*|" // CM851 mSATA, tested with SAMSUNG MZMPF032HCFV-000H1/FXM42H2Q "SAMSUNG MZ7GE(240HMGR|(480|960)HMHP)-00003|" // SM853T Series, tested with // SAMSUNG MZ7GE240HMGR-00003/EXT0303Q @@ -1814,13 +1921,19 @@ const drive_settings builtin_knowndrives[] = { "(SAMSUNG )?MZ7KM(120|240|480|960|1T9)H[AM](FD|GR|H[PQ]|J[MP])(-.*|0D3)|" // SM863(a), tested with // SAMSUNG MZ7KM480HAHP-0E005/GXM1003Q, SAMSUNG MZ7KM480HMHQ-00005/GXM5104Q, // SAMSUNG MZ7KM960HMJP-00005/GXM5304Q, MZ7KM960HMJP0D3/GD53 (Dell) + "SAMSUNG MZ[7N]LH(128|256|512|1T0)H[AB](JD|HQ|L[BU])-.*|" // PM881, tested with + // SAMSUNG MZ7LH512HALU-00000/RVT0200Q "SAMSUNG MZ7LH(240|480|960|1T9|3T8|7T6)H[AM](HQ|JR|LT|LA)-.*|" //PM883, tested with SAMSUNG MZ7LH960HAJR-00005 + "SAMSUNG MZ7L3(240|480|960|1T9|3T8|7T6)H(B[LN][AT]|CHQ|CJR)-.*|" // PM893/897, tested with + // SAMSUNG MZ7L3240HCHQ-00A07/JXTC104Q, SAMSUNG MZ7L3480HCHQ-00A07/JXTC104Q, + // SAMSUNG MZ7L3480HBLT-00A07/JXTE004Q, SAMSUNG MZ7L33T8HBLT-00A07/JXTC104Q + "MK000(240|480|960)GZXRB|" // MK000960GZXRB/HPG0 (HPE MZ7L3960HBLT-00AH3) "SAMSUNG MZ7KH(240|480|960|1T9|3T8)HA(HQ|JR|LS)-.*|" //SM883 - "SAMSUNG MZN(LF|TY)(128|256)H[CD]HP-.*|" // CM871/871a, tested with SAMSUNG MZNLF128HCHP-000H1/FXT21H1Q, - // SAMSUNG MZNTY256HDHP-000/MAT21K0Q - "SAMSUNG MZ[7N]LN(128|256|512|1T0)H[ACM](GR|HP|HQ|J[HPQ]|LR)-.*|" // PM871/871a/b, tested with + "SAMSUNG MZ[7N](LF|TY)(128|192|256)H[CD](GS|HP)-.*|" // CM871/871a, tested with SAMSUNG MZNLF128HCHP-000H1/FXT21H1Q, + // SAMSUNG MZNTY256HDHP-000/MAT21K0Q, SAMSUNG MZ7LF192HCGS-000L1/FXT03L1Q + "SAMSUNG MZ[7NY]LN(128|256|512|1T0)H[ACM](GR|HP|HQ|J[HPQ]|LR)-.*|" // PM871/871a/b, tested with // SAMSUNG MZ7LN128HCHP-00000/EMT0100Q, SAMSUNG MZ7LN256HAHQ-000H1/MVT03H6Q, - // SAMSUNG MZNLN256HMHQ-000H1/MAV21H3Q + // SAMSUNG MZNLN256HMHQ-000H1/MAV21H3Q, SAMSUNG MZYLN256HCHP-000L2/EMT63L0Q "SAMSUNG SSD PM871 .*|" // SAMSUNG SSD PM871 2.5 7mm 256GB/EMT02D0Q // SAMSUNG MZ7LN256HMJP-00000/MAV0100Q, SAMSUNG MZ7LN512HMJP-00000/MAV0100Q "SAMSUNG MZHPV(128|256|512)HDG(L|M)-.*|" // SM951, tested with SAMSUNG MZHPV512HDGL-00000/BXW2500Q, @@ -1851,26 +1964,28 @@ const drive_settings builtin_knowndrives[] = { //"-v 194,tempminmax,Temperature_Celsius " "-v 195,raw48,ECC_Error_Rate " //"-v 196,raw16(raw16),Reallocated_Event_Count " + //"-v 197,raw48,Current_Pending_Sector " // PM893 //"-v 198,raw48,Offline_Uncorrectable " "-v 199,raw48,CRC_Error_Count " "-v 201,raw48,Supercap_Status " - "-v 202,raw48,Exception_Mode_Status " - //"-v 233,raw48,Media_Wearout_Indicator // PM851, 840 + "-v 202,raw48,Exception_Mode_Status " // PM893 + //"-v 233,raw48,Media_Wearout_Indicator " // PM851, 840 "-v 234,raw48,Unknown_Samsung_Attr " // PM851, 840 - "-v 235,raw48,POR_Recovery_Count " // PM851, 830/840/850 + "-v 235,raw48,POR_Recovery_Count " // PM851, 830/840/850, PM893 "-v 236,raw48,Unknown_Samsung_Attr " // PM851, 840 "-v 237,raw48,Unknown_Samsung_Attr " // PM851, 840 "-v 238,raw48,Unknown_Samsung_Attr " // PM851, 840 //"-v 241,raw48,Total_LBAs_Written " //"-v 242,raw48,Total_LBAs_Read " // PM851, SM841N - "-v 243,raw48,SATA_Downshift_Ct " // PM863 - "-v 244,raw48,Thermal_Throttle_St " // PM863 - "-v 245,raw48,Timed_Workld_Media_Wear " // PM863 - "-v 246,raw48,Timed_Workld_RdWr_Ratio " // PM863 - "-v 247,raw48,Timed_Workld_Timer " // PM863 - "-v 249,raw48,Unknown_Samsung_Attr " // CM871a + "-v 243,raw48,SATA_Downshift_Ct " // PM863, PM893 + "-v 244,raw48,Thermal_Throttle_St " // PM863, PM893 + "-v 245,raw48,Timed_Workld_Media_Wear " // PM863, PM893 + "-v 246,raw48,Timed_Workld_RdWr_Ratio " // PM863, PM893 + "-v 247,raw48,Timed_Workld_Timer " // PM863, PM893 + "-v 249,raw48,NAND_Writes_1GiB " // CM871a, PM871 "-v 250,raw48,SATA_Iface_Downshift " // from the spec - "-v 251,raw48,NAND_Writes" // PM863 + "-v 251,raw48,NAND_Writes " // PM863, PM893 + "-v 252,raw48,Added_Bad_Flash_Blk_Ct" // 870 EVO FW SVT02B6Q }, { "Marvell based SanDisk SSDs", "SanDisk SD5SG2[0-9]*G1052E|" // X100 (88SS9174), tested with SanDisk SD5SG2256G1052E/10.04.01 @@ -1879,17 +1994,22 @@ const drive_settings builtin_knowndrives[] = { "SanDisk SD7S[BN]6S-?(128|256|512)G(1122|-1006)|" // X300 (88SS9189?), tested with // SanDisk SD7SB6S128G1122/X3310000, SanDisk SD7SN6S-512G-1006/X3511006 "SanDisk SD8S[BN]8U-?((128|256|512)G|1T00)(1122|-1006)|" // X400 (88SS1074), tested with SanDisk SD8SB8U128G1122/X4120000 - "SanDisk SD9S[BN]8W-?((128|256|512)G|[12]T00)1122|" // X600, tested with SanDisk SD9SB8W128G1122/X6107000 + "SanDisk SD9S[BN]8W-?((128|256|512)G|[12]T00)(1122|-1006)|" // X600, tested with SanDisk SD9SB8W128G1122/X6107000, SD9SB8W-512G-1006/X6103006 + // SanDisk SD9SB8W1T001122/X6107000, SD9SB8W256G1122/X6107000 + "SanDisk SDSSDA-((120|240|480)G|[12]T00)|" // Plus, tested with SanDisk SDSSDA-2T00/411040RL "SanDisk SDSSDHP[0-9]*G|" // Ultra Plus (88SS9175), tested with SanDisk SDSSDHP128G/X23[01]6RL "SanDisk (SDSSDHII|Ultra II )[0-9]*GB?|" // Ultra II (88SS9190/88SS9189), tested with // SanDisk SDSSDHII120G/X31200RL, SanDisk Ultra II 960GB/X41100RL "SanDisk SDSSDH2(128|256)G|" // SanDisk SDSSDH2128G/X211200 - "SanDisk SDSSDH3(250|500|1000|1024|2000)G|" // Ultra 3D, tested with SanDisk SDSSDH3250G/X61170RL, - // SanDisk SDSSDH3500G/X61110RL, SanDisk SDSSDH31024G/X6107000 + "SanDisk SDSSDH3((250|500|1000|1024|2000)G| [124]T00)|" // Ultra 3D, tested with SanDisk SDSSDH3250G/X61170RL, + // SanDisk SDSSDH3500G/X61110RL, SanDisk SDSSDH31024G/X6107000, SanDisk SDSSDH3 2T00/411040RL, + // SanDisk SDSSDH3 4T00/411040RL, SanDisk SDSSDH3 1T00/415020RL "SanDisk SDSSDXPS?[0-9]*G|" // Extreme II/Pro (88SS9187), tested with SanDisk SDSSDXP480G/R1311, // SanDisk SDSSDXPS480G/X21200RL - "SanDisk SSD PLUS (120|240|480|1000) ?GB|" // Plus (88SS1074), tested with SanDisk SSD PLUS 120 GB/UE3000RL, + "SanDisk SSD G5 BICS4|" // WD Blue SSD WDS100T2B0A (#1378), tested with SanDisk SSD G5 BICS4/415000WD + "SanDisk SSD PLUS (120|240|480|[12]000) ?GB|" // Plus (88SS1074), tested with SanDisk SSD PLUS 120 GB/UE3000RL, // SanDisk SSD PLUS 120 GB/UE4500RL, SanDisk SSD PLUS 1000GB/UH4400RL + // SanDisk SSD PLUS 2000GB/UP4504RL "SSD SATAIII 16GB", // SSD SATAIII 16GB/i221100 (see #923) "", "", //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -1900,6 +2020,7 @@ const drive_settings builtin_knowndrives[] = { "-v 167,raw48,Min_Bad_Block/Die " "-v 168,raw48,Maximum_Erase_Cycle " "-v 169,raw48,Total_Bad_Block " + "-v 170,raw48,Unknown_Marvell_Attr " // SDSSDH3 4T00 "-v 171,raw48,Program_Fail_Count " "-v 172,raw48,Erase_Fail_Count " "-v 173,raw48,Avg_Write/Erase_Count " @@ -1917,7 +2038,7 @@ const drive_settings builtin_knowndrives[] = { "-v 234,raw48,Perc_Write/Erase_Ct_BC " "-v 241,raw48,Total_Writes_GiB " "-v 242,raw48,Total_Reads_GiB " - //"-v 243,raw48,Unknown_Attribute " + "-v 243,raw48,Unknown_Marvell_Attr " "-v 244,raw48,Thermal_Throttle " "-v 249,raw48,TLC_NAND_GB_Writes" }, @@ -1929,7 +2050,7 @@ const drive_settings builtin_knowndrives[] = { "SanDisk SSD i100 [0-9]*GB|" // tested with SanDisk SSD i100 8GB/11.56.04, 24GB/11.56.04 "SanDisk SSD U100 ([0-9]*GB|SMG2)|" // tested with SanDisk SSD U100 8GB/10.56.00, 256GB/10.01.02, SMG2/10.56.04 "SanDisk SSD U110 (8|16|24|32|64|128)GB|" // tested with SanDisk SSD U110 32GB/U221000 - "SanDisk SDSA6MM-.*|" // tested with SanDisk SDSA6MM-016G-1006/U221006 + "SanDisk SDSA6[GM]M-[0-9]*G-.*|" // tested with SanDisk SDSA6GM-016G-1006/U221006, SanDisk SDSA6MM-016G-1006/U221006 "SanDisk SD7[SU]B[23]Q(064|128|256|512)G.*", // tested with SD7SB3Q064G1122/SD7UB3Q256G1122/SD7SB3Q128G/SD7UB2Q512G1122 "", "", //"-v 5,raw16(raw16),Reallocated_Sector_Ct " @@ -1949,63 +2070,67 @@ const drive_settings builtin_knowndrives[] = { //"-v 242,raw48,Total_LBAs_Read " "-v 244,raw48,Thermal_Throttle " }, - // SDLF1DAR-480G-1HAW/ZR07RE41 + // SDLF1DAR-480G-1HAW/ZR07RE41 // SDLF1DAR-480G-1JA1/RP41ZH06 { "Sandisk SATA Cloudspeed Max and GEN2 ESS SSDs", - "SD[A-Z0-9]{2}[1-3][A-Z]{3}-?[0-9]{3}[GT]-?1[A-Z0-9]{3}", - "","", - "-v 13,raw48,Lifetime_UECC_Ct " - "-v 32,raw48,Lifetime_Write_AmpFctr " - "-v 33,raw48,Write_AmpFctr " - "-v 170,raw48,Reserve_Erase_BlkCt " - "-v 171,raw48,Program_Fail_Ct " - "-v 172,raw48,Erase_Fail_Ct " - "-v 173,raw48,Percent_Life_Used " - "-v 174,raw48,Unexpect_Power_Loss " - "-v 175,raw48,Lifetime_Die_Failure_Ct " - "-v 177,raw48,Lifetime_Remaining% " - "-v 178,raw48,SSD_LifeLeft(0.01%) " - "-v 180,raw48,Undetected_Data_Err_Ct " - "-v 183,raw48,LT_Link_Rate_DwnGrd_Ct " - "-v 191,raw48,Clean_Shutdown_Ct " - "-v 192,raw48,Unclean_Shutdown_Ct " - "-v 196,raw48,Lifetime_Retried_Blk_Ct " - "-v 204,raw48,Average_Block-Erase_Ct " - "-v 205,raw48,Read_Retry_Enable_Ct " - "-v 206,raw48,Successful_RaidRecov_Ct " - "-v 207,raw48,Trimmed_Sector_Ct " - "-v 211,raw48,Read_Disturb_ReallocEvt " - "-v 233,raw48,Lifetime_Nand_Writes " - "-v 235,raw48,Capacitor_Health " - "-v 244,raw48,Therm_Throt_Activation " - "-v 245,raw48,Drive_Life_Remaining% " - "-v 253,raw48,SPI_Test_Remaining " - }, - { "Sandisk SATA CS1K GEN1 ESS SSDs", - "SD[A-Z0-9]{2}[NO][A-Z0-9]{3}-?[0-9]{3}[GT]-?1[A-Z0-9]{3}", - "","", - "-v 1,raw48,UECC_Ct " - "-v 2,raw48,Internal_File_Check " - "-v 5,raw16(raw16),Retried_Blk_Ct " - "-v 32,raw48,Write_Ampflication " - "-v 170,raw48,Reserve_Blk_Remaining " - "-v 171,raw48,Program_Fail_Ct " - "-v 172,raw48,Erase_Fail_Ct " - "-v 173,raw48,Drive_Life_Used% " - "-v 174,raw48,Unexpect_PwrLoss_Ct " - "-v 175,raw48,PwrLoss_ProtectionFail " - "-v 177,raw48,DriveLife_Remaining% " - "-v 178,raw48,SSD_Life_Left " - "-v 180,raw48,End_to_End_Err_Detect " - "-v 190,raw48,Drive_Temp_Warning " - "-v 195,raw48,Uncorrectable_Err_Ct " - "-v 202,raw48,Exception_Mode_Status " - "-v 233,raw48,Number_Of_Write_Ct " - "-v 245,raw48,DriveLife_Used% " - }, + "SD[A-Z0-9]{2}[1-3][A-Z]{3}-?[0-9]{3}[GT]-?1[A-Z0-9]{3}", + "","", + "-v 13,raw48,Lifetime_UECC_Ct " + "-v 32,raw48,Lifetime_Write_AmpFctr " + "-v 33,raw48,Write_AmpFctr " + "-v 170,raw48,Reserve_Erase_BlkCt " + "-v 171,raw48,Program_Fail_Ct " + "-v 172,raw48,Erase_Fail_Ct " + "-v 173,raw48,Percent_Life_Used " + "-v 174,raw48,Unexpect_Power_Loss " + "-v 175,raw48,Lifetime_Die_Failure_Ct " + "-v 177,raw48,Lifetime_Remaining% " + "-v 178,raw48,SSD_LifeLeft(0.01%) " + "-v 180,raw48,Undetected_Data_Err_Ct " + "-v 183,raw48,LT_Link_Rate_DwnGrd_Ct " + "-v 191,raw48,Clean_Shutdown_Ct " + "-v 192,raw48,Unclean_Shutdown_Ct " + "-v 196,raw48,Lifetime_Retried_Blk_Ct " + "-v 204,raw48,Average_Block-Erase_Ct " + "-v 205,raw48,Read_Retry_Enable_Ct " + "-v 206,raw48,Successful_RaidRecov_Ct " + "-v 207,raw48,Trimmed_Sector_Ct " + "-v 211,raw48,Read_Disturb_ReallocEvt " + "-v 233,raw48,Lifetime_Nand_Writes " + "-v 235,raw48,Capacitor_Health " + "-v 244,raw48,Therm_Throt_Activation " + "-v 245,raw48,Drive_Life_Remaining% " + "-v 253,raw48,SPI_Test_Remaining " + }, + { "Sandisk SATA CS1K GEN1 ESS SSDs", + "SD[A-Z0-9]{2}[NO][A-Z0-9]{3}-?[0-9]{3}[GT]-?1[A-Z0-9]{3}", + "","", + "-v 1,raw48,UECC_Ct " + "-v 2,raw48,Internal_File_Check " + "-v 5,raw16(raw16),Retried_Blk_Ct " + "-v 32,raw48,Write_Ampflication " + "-v 170,raw48,Reserve_Blk_Remaining " + "-v 171,raw48,Program_Fail_Ct " + "-v 172,raw48,Erase_Fail_Ct " + "-v 173,raw48,Drive_Life_Used% " + "-v 174,raw48,Unexpect_PwrLoss_Ct " + "-v 175,raw48,PwrLoss_ProtectionFail " + "-v 177,raw48,DriveLife_Remaining% " + "-v 178,raw48,SSD_Life_Left " + "-v 180,raw48,End_to_End_Err_Detect " + "-v 190,raw48,Drive_Temp_Warning " + "-v 195,raw48,Uncorrectable_Err_Ct " + "-v 202,raw48,Exception_Mode_Status " + "-v 233,raw48,Number_Of_Write_Ct " + "-v 245,raw48,DriveLife_Used% " + }, { "Silicon Motion based SSDs", - "ADATA (SP550|SU[89]00)|" // tested with ADATA SP550/O0803B5a, ADATA SU800/Q0913A, ADATA SU800/R0427A, - // ADATA SU800/R0918B, ADATA SU900/Q0125A, ADATA SU900/Q0710B + "ADATA_IMSS332-((008|016|032|064|128|256|512)G|001T)[AEMT]P?|" // tested with ADATA_IMSS332-128GTP/Q0810B + "ADATA (SP550|SU(630|650(NS38)?|655|[89]00))|" // tested with ADATA SP550/O0803B5a, ADATA SU630/S1127B0, + // ADATA SU650/S0212B0, ADATA SU650/V8X01c45, ADATA SU650/V8X21c64, ADATA SU650NS38/P191202a, + // ADATA SU655/V8X01c55, ADATA SU800/Q0913A, ADATA SU800/R0427A, ADATA SU800/R0918B, ADATA SU900/Q0125A, + // ADATA SU900/Q0710B + "CORSAIR FORCE LX SSD|" // tested with CORSAIR FORCE LX SSD/N0307A "CHN mSATAM3 (128|256|512)|" // Zheino M3, tested with CHN mSATAM3 128/Q1124A0 "CIS 2S M305 (16|32|64|128|256)GB|" // Ceroz M305, tested with CIS 2S M305 64GB/P0316B "CT(120|250|500|1000)BX100SSD1|" // Crucial BX100, tested with CT250BX100SSD1/MU02, @@ -2013,43 +2138,60 @@ const drive_settings builtin_knowndrives[] = { "CT(240|480|960)BX200SSD1|" // Crucial BX200 Solid State Drive, tested with CT480BX200SSD1/MU02.6 "DREVO X1 SSD|" // tested with DREVO X1 SSD/Q0111A "Drevo X1 pro (64|128|256)G|" // tested with Drevo X1 pro 64G/Q0303B - "JAJS500M(120|240|480|960)C-1|" // J&A LEVEN JS500, tested with JAJS500M120C-1/P0614D + "JAJS[56]00M((12[08]|240|256|480|512|960)C|1TB)(-1)?|" // J&A LEVEN JS500/600 (Intenso TOP), tested with + // JAJS500M120C-1/P0614D, JAJS600M1TB/T0529A0, JAJS600M256C/U0803A0 "KingDian S100 (32|64)GB|" // SM2244LT, tested with KingDian S100 32GB/0311A "KingDian S(200|280|400) ((60|120|240|480)GB|1TB)|" // SM2256EN, tested with KingDian S200 60GB/R0724A0 // KingDian S280 120GB/Q0526A, KingDian S280 1TB/S0509A0, KingDian S400 120GB/Q0607A "KingSpec KSD-[PS]A25\\.[1-9]-(016|032|064|128)(MS|SJ)|" // tested with KingSpec KSD-PA25.6-064MS/20140803 - "KINGSTON SKC600(256|512|1024|2048)G|" // SM2259, tested with KINGSTON SKC600256G/S4500105 - "LITEON LMH-(128|256|512)V2M-.*|" // tested with LITEON LMH-256V2M-11 MSATA 256GB/FM8110C - "LITEON LCH-(128|256V|512)2S-.*|" // tested with LITEON LCH-256V2S-HP/2C02 - "MKNSSDRE(1TB|2TB|512GB|500GB|256GB|250GB)|" // tested with MKNSSDRE256GB/N1007C - "MKNSSDTR(240|500|250|120|480|240)GB(-LT)?|" // tested with MKNSSDTR500GB/O1126A + "KINGSTON SKC600(MS)?(256|512|1024|2048)G|" // KC600 MS=mSATA, tested with KINGSTON SKC600256G/S4500105, + // KINGSTON SKC600MS256G/S4500107 + "LITEON L[CM]H-(128|256|512)V2[MS](-.*)?|" // tested with LITEON LCH-256V2S-HP/2C02, + // LITEON LCH-256V2S/3C87901, LITEON LMH-256V2M-11 MSATA 256GB/FM8110C + "MKNSSDRE((25[06]|500|512)G|[12]T)B(-LT)?|" // Mushkin, tested with MKNSSDRE256GB/N1007C, + // MKNSSDRE250GB-LT/O1026A + "MKNSSD(S2|TR)(12[08]|2[45]0|480|500)GB(-(3DL|LT))?|" // Mushkin, tested with MKNSSDS2500GB/T0818A0, + // MKNSSDTR500GB/O1126A, MKNSSDTR128GB-3DL/Q0616B0 + "NFN025SA31T-.*|" // Neo Forza (?), from HP Laptop, tested with NFN025SA31T-6000000/S0628A0 + "NFORCE (256|512)25 - SSZS13|" // Nextron NForce, tested with NFORCE 25625 - SSZS13/V0915A0 + "ONDA S-12 64GB|" // tested with ONDA S-12 64GB/U0401A0 "OWC Envoy Pro|" // tested with OWC Envoy Pro/R0522A0 (0x1e91:0xa2a5) - "Patriot P200 ((128|256|512)GB|[12]TB)|" // tested with Patriot P200 256GB/S1022A0 + "Patriot P2[01]0 ((128|256|512)GB|[12]TB)|" // tested with Patriot P200 256GB/S1022A0, + // Patriot P210 256GB/HPS2227P "R3SL(120|240|480|960)G|" // AMD Radeon SSDs, tested with R3SL240G/P0422C "Ramsta SSD S800 (120|240|480)GB|" // SM2258G, tested with Ramsta SSD S800 480GB/RS81V0 + "SED2QII-LP SATA SSD ((64|128|256|512)GB|[12]TB)|" // ACPI SED2QII-LP, tested with + // SED2QII-LP SATA SSD 64GB/S0410A "T60|" // KingSpec T60, tested with T60/20151120 "TCSUNBOW [MX]3 (60|120|240)GB|" // TC-Sunbow M3/X3, tested with TCSUNBOW M3 240GB/R0327B0, - // TCSUNBOW X3 120GB/R1211A0 - "TEAM( T253T|L5Lite3)D(120G|240G|480G|1T)|" // Team Group L5Lite 3D, tested with - // TEAML5Lite3D240G/R0302A0, TEAM T253TD480G/Q0410A - "TS((16|32|64|128|256|512)G|1T)(SSD|MSA)(370S?|420[IK]?)|" // Transcend SSD370/420 SATA/mSATA, TS6500, - // tested with TS32GMSA370/20140402, TS16GMSA370/20140516, TS64GSSD370/20140516, - // TS256GSSD370/N0815B, TS256GSSD370S/N1114H, TS512GSSD370S/N1114H, TS32GSSD420I/N1114H, - // TS32GSSD420K/P1225CE + // TCSUNBOW X3 120GB/R1211A0 + "TEAM( T253(TD|X6)|L5Lite3D)((120|240|256|480|512)G|[12]T)|" // TEAMGROUP, tested with + // TEAML5Lite3D240G/R0302A0 (L5Lite 3D), TEAM T253TD480G/Q0410A, TEAM T253X6256G/U1014A0 (CX2) + "TS((16|32|64|128|256|512)G|1T)(SSD|MS[AM])(230S?|3[67]0[SI]?|420[IK]?)|" // Transcend SSD230/360/370/420 + // SATA/mSATA, TS6500, tested with TS128GMSA230S/02J0S86A, TS32GMSA370/20140402, + // mSATA MSM360 mini SSD, tested with TS32GMSM360/Q0407A + // TS128GMSA370I/P1225CH1 + // TS16GMSA370/20140516, TS64GSSD370/20140516, TS256GSSD370/N0815B, TS256GSSD370S/N1114H, + // TS512GSSD370S/N1114H, TS32GSSD420I/N1114H, TS32GSSD420K/P1225CE "TS(16|32|64|128|512|256)GMTS4[03]0S?|" // TS256GMTS400, TS256GMTS430S/S0423A "TS(120|240)GMTS420S?|" // Transcend MTS420, tested with TS120GMTS420S/R0510A0 "TS(128G|256G|512G|1T)SSD230S|" // TS128GSSD230S/P1025F8 "TS(120|240|480|960)GSSD220S|" // TS480GSSD220S/P0520AA + "TS((64|128|256|512)G|[12]T)SSD452K|"// Transcend 452K, tested with TS128GSSD452K/02J0S86A "TS(16G|32G|64G|128G|256G|512G|1T)MTS800S?|" // MTS800, tested with TS1TMTS800/O1225H1 "TS(16|32|64)GMSA630|" // MSA630 mSATA SSD, tested with TS32GMSA630/N0113E1 "TS(32|64|128)GPSD330|" // Transcend PSD SSD, tested with TS64GPSD330/20140121 "TS(16|32|64|96|128|256)GSSD(630|360S)|" // Transcend 630/360S, tested with TS16GSSD630/N0113E1, // TS256GSSD360S/R0123A0 - "TS(128G|256G|512G|1T)ESD400K", // Transcend ESD400 Portable, tested with + "TS(128G|256G|512G|1T)ESD400K|" // Transcend ESD400 Portable, tested with // TS256GESD400K/R0605AS (0x2174:0x2000) + "TS(128G|256G|512G|1T)MTS830S|" // Transcend 830S, tested with TS256GMTS830S/02J0T3HB + "TSG(16|32|64|128|256|512)MTS400ISI|" // Transcend MTS400I, tested with TSG64MTS400ISI/S0903D + "UMAX 2242 (128|256|512)GB", // tested with UMAX 2242 256GB/U0330A0 "", "", //"-v 1,raw48,Raw_Read_Error_Rate " //"-v 2,raw48,Throughput_Performance " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " //"-v 9,raw24(raw8),Power_On_Hours " //"-v 12,raw48,Power_Cycle_Count " "-v 148,raw48,Total_SLC_Erase_Ct " @@ -2059,6 +2201,7 @@ const drive_settings builtin_knowndrives[] = { "-v 159,raw48,DRAM_1_Bit_Error_Count " // KINGSTON SKC600256G/S4500105 "-v 160,raw48,Uncorrectable_Error_Cnt " "-v 161,raw48,Valid_Spare_Block_Cnt " + "-v 162,raw48,Cache_Block_Count " // Transcend MSM360 "-v 163,raw48,Initial_Bad_Block_Count " "-v 164,raw48,Total_Erase_Count " "-v 165,raw48,Max_Erase_Count " @@ -2085,20 +2228,57 @@ const drive_settings builtin_knowndrives[] = { //"-v 232,raw48,Available_Reservd_Space " "-v 241,raw48,Host_Writes_32MiB " "-v 242,raw48,Host_Reads_32MiB " - "-v 245,raw48,TLC_Writes_32MiB " // FW N0815B, N1114H + "-v 245,raw48,TLC_Writes_32MiB " // FW N0815B, N1114H // TS128GMSA370I: Flash Write Sector Count "-v 246,raw48,SLC_Writes_32MiB " "-v 247,raw48,Raid_Recoverty_Ct " "-v 248,raw48,Unkn_SiliconMotion_Attr " // ADATA SU900/Q0125A + "-v 249,raw48,Unkn_SiliconMotion_Attr " // ADATA SU650/V8X01c45 //"-v 250,raw48,Read_Error_Retry_Rate " // ADATA SU800/Q0913A "-v 251,raw48,Unkn_SiliconMotion_Attr" // ADATA SU800/Q0913A }, + // Supermicro SSD-DM032-SMCMVN1, tested with SuperMicro SSD/SOB20R, see (#1380) + { "Supermicro SATA DOM (SuperDOM)", + "SuperMicro SSD", + "", "", + "-v 1,raw48,Raw_Read_Error_Rate " + "-v 15,raw48,User_Cpcty_Sector_Cnt " + "-v 160,raw48,Not_In_Use " + "-v 161,raw48,Not_In_Use " + "-v 163,raw48,Not_In_Use " + "-v 164,raw48,Not_In_Use " + "-v 165,raw48,Not_In_Use " + "-v 166,raw48,Minimum_PE_Cycles_TLC " + "-v 167,raw48,Not_In_Use " + "-v 168,raw48,Maximum_PE_Cycles_TLC " + "-v 231,raw48,SSD_Life_Left " + "-v 233,raw48,NAND_Writes_1GiB " + "-v 241,raw48,Lifetime_Writes_GiB " + "-v 242,raw48,Lifetime_Reads_GiB " + }, { "Silicon Motion based OEM SSDs", // Like 'Silicon Motion based SSDs' but with FW detection - "Intenso SSD|" // tested with Intenso SSD/Q1107A0 - "Intenso SSD Sata III|" // Sata III High, tested with Intenso SSD Sata III/P0510E - "KingFast|" // KingFast F6M, tested with KingFast/P0725A - "SPCC M\\.2 SSD|" // Silicon Power 2280 M55, tested with SPCC M.2 SSD/Q0627A0 - "SuperMicro SSD", // Supermicro SSD-DM032-SMCMVN1, tested with SuperMicro SSD/SOB20R - "P0510E|P0725A|Q0627A0|Q1107A0|SOB20R", + "240GB|" // from Lenovo T430 Thinkpad, tested with 240GB/P0510E + "Dogfish SSD (128|256|512)GB|" // tested with Dogfish SSD 128GB/S1211A0 + "GIM(16|32|64|128|256|512)|"// GUDGA GIM, tested with GIM128/U0401A0 + "INTENSO( SSD)?|" // tested with INTENSO/S1211A0 (Portable SSD 256GB premium edition), + // INTENSO/V0609A0, INTENSO SSD/V0823A0 + "Intenso ?SSD( Sata III)?|" // tested with Intenso SSD/Q1107A0, Intenso SSD Sata III/P0510E, + // Intenso SSD Sata III/R0817B0, Intenso SSD Sata III/V0303B0 + "KingFast|" // tested with KingFast/P0725A (F6M), KingFast/S0424A0 (120GB), KingFast/S1128B0 (512GB) + "KSM512|" // KingSpec, tested with KSM512/S0509A0 + "LDLC|" // tested with LDLC/KFS03005 + "Netac MobileDataStar|" // tested with Netac MobileDataStar/HPS2227I (0x0dd8:0x0562) + "ORTIAL SSD|" // tested with ORTIAL SSD/U0202A0 (128GB) + "RX7 (240|256|512)G|" // tested with RX7 240G/T0910A0 + "SATA3 ((12[08]|240|256|480)G|[12]T)B SSD|" // TCSUNBOW X3, tested with SATA3 240GB SSD/S0618A0, + // SATA3 1TB SSD/S1230A0, + // KingDian S370, tested with SATA3 128GB SSD/T0311A0, SATA3 256GB SSD/S1127B0 + // KingDian S280, tested with SATA3 240GB SSD/T0519A0 + "SPCC M\\.2 SSD|" // Silicon Power A/M55, tested with SPCC M.2 SSD/Q0627A0, SPCC M.2 SSD/U0506A0 + "T-FORCE (128|256|512)GB|" // tested with T-FORCE 512GB/T0910A0 + "Verbatim Vi550 S3", // may also exist with different controller (tickets #1626 <> #1629), + // tested with Verbatim Vi550 S3/U1124A0 (128GB) + "HPS2227I|KFS03005|P0510E|P0725A|Q(0627|1107)A0|R0817B0|S(0424|0509|0618|1211|1230)A0|" + "S112[78]B0|T0(311|519|910)A0|U(0202|0401|0506|1124)A0|V0((606|823)A|303B)0", "", "-v 148,raw48,Total_SLC_Erase_Ct " "-v 149,raw48,Max_SLC_Erase_Ct " @@ -2211,6 +2391,48 @@ const drive_settings builtin_knowndrives[] = { "-v 130,raw48:54321,Minimum_Spares_All_Zs" //"-v 194,tempminmax,Temperature_Celsius" }, + { "SSSTC ERX GD/CD Series SSDs", // Marvel DEAN 2.1 + "(SSSTC|SATA) ER[2-9]-[CG]D(240|480|960|1920)A?|" // tested with SSSTC ER2-GD480/E4N23021, + // SSSTC ER2-CD1920A/E5MN401, SSSTC ER3-GD240/F2MRD0F, SSSTC ER3-CD960A/F3MRD0Y + "AF[2-9]MA31DT[ED]LT(240|480|960|1920)A?", // tested with AF2MA31DTDLT240A/F2M96T0 + "","", + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 100,raw48,Max_Min_EC_Count " + "-v 170,raw48,Available_Reservd_Space " + "-v 171,raw48,Program_Fail_Count " + "-v 172,raw48,Erase_Fail_Count " + "-v 173,raw48,Average_PE_Count " + "-v 174,raw48,Unexpect_Power_Loss_Ct " + "-v 175,raw48,PwrLoss_ProtectionFail " + //"-v 176,raw48,Erase_Fail_Count_Chip " + //"-v 177,raw48,Wear_Leveling_Count " + //"-v 178,raw48,Used_Rsvd_Blk_Cnt_Chip " + //"-v 179,raw48,Used_Rsvd_Blk_Cnt_Tot " + "-v 180,raw48,Over-Provisioning_Rate " + //"-v 181,raw48,Program_Fail_Cnt_Total " + //"-v 182,raw48,Erase_Fail_Count_Total " + "-v 183,raw48,SATA_Iface_Downshift " + //"-v 184,raw48,End-to-End_Error " + //"-v 187,raw48,Reported_Uncorrect " + //"-v 188,raw48,Command_Timeout " + //"-v 194,tempminmax,Temperature_Celsius " + //"-v 195,raw48,Hardware_ECC_Recovered " + //"-v 198,raw48,Offline_Uncorrectable " + //"-v 199,raw48,UDMA_CRC_Error_Count " + "-v 202,raw48,Percent_Lifetime_Remain " + "-v 210,raw48,Raid_Success_Recover_Ct " + "-v 229,raw48,PLP_Failure " + "-v 231,raw48,Remaining_Lifetime_Perc " + //"-v 232,raw48,Available_Reservd_Space " + //"-v 233,raw48,Media_Wearout_Indicator " + "-v 234,raw48,Thermal_Throttle_Status " + //"-v 241,raw48,Total_LBAs_Written " + //"-v 242,raw48,Total_LBAs_Read " + "-v 243,raw48,NAND_Writes_GiB " + }, { "STEC Mach2 CompactFlash Cards", // tested with STEC M2P CF 1.0.0/K1385MS "STEC M2P CF 1.0.0", "", "", @@ -2231,6 +2453,22 @@ const drive_settings builtin_knowndrives[] = { "-v 7,raw48,Unknown_Attribute " "-v 8,raw48,Unknown_Attribute" }, + { "Xmore Industrial SATA SSDs", // tested with M2CA032GXAIMS-003Z/XP01.1GB + "(CFAST|M2[AC]A|MSATA|SSD)[0-9]{3}[GT]XA[CEI][MT][MST]-[0-9]{3}[TZ]", + "", "", + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 168,raw48,SATA_Phy_Error_Count " + "-v 169,raw48,Bad_Block_Rate " + "-v 170,raw24/raw24:z54z10,Bad_Blk_Ct_Lat/Erl " // Later bad block/Early bad block + "-v 173,raw16(avg16),MaxAvgErase_Ct " + "-v 192,raw48,Unexpect_Power_Loss_Ct " + //"-v 194,tempminmax,Temperature_Celsius " // optional + "-v 218,raw48,SATA_CRC_Error_Count " + "-v 231,raw48,Percent_Lifetime_Remain " + "-v 241,raw48,Host_Writes_GiB" + }, { "Marvell SSD SD88SA024BA0 (SUN branded)", "MARVELL SD88SA024BA0 SUN24G 0902M0054V", "", "", "" @@ -2309,14 +2547,14 @@ const drive_settings builtin_knowndrives[] = { "FUJITSU MHL2300AT", "", "This drive's firmware has a harmless Drive Identity Structure\n" - "checksum error bug.", + "checksum error bug.", "-v 9,seconds" }, { "", // MHM2200AT, MHM2150AT, MHM2100AT, MHM2060AT "FUJITSU MHM2(20|15|10|06)0AT", "", "This drive's firmware has a harmless Drive Identity Structure\n" - "checksum error bug.", + "checksum error bug.", "-v 9,seconds" }, { "Fujitsu MHN", @@ -2522,7 +2760,7 @@ const drive_settings builtin_knowndrives[] = { "" }, { "Seagate Samsung SpinPoint F4 EG (AF)", // later sold as Barracuda Green, - // tested with ST2000DL004 HD204UI/1AQ10001 + // tested with ST2000DL004 HD204UI/1AQ10001 "ST2000DL004 HD204UI", "", "", "" }, @@ -2655,20 +2893,24 @@ const drive_settings builtin_knowndrives[] = { }, // Flash accelerated, no SMART info in the specs // ST1000LX015-1U7172/SDM1 - { "Seagate FireCuda 2.5", // + { "Seagate FireCuda 2.5", "ST(500|1000|2000)LX0(01|15|25)-.*", "", "", "-v 240,msec24hour32 " }, - // ST1000DX002/CC41 { "Seagate FireCuda 3.5", // ST2000DX002-2DV164/CC41 "ST[12]000DX002-.*", "", "", "-v 240,msec24hour32 " }, { "Seagate Samsung SpinPoint M9TU (USB)", // tested with ST1500LM008 HN-M151AAD/2BC10001 - // (0x04e8:0x61b5), ST2000LM005 HN-M201AAD2BC10001 (0x04e8:0x61b4) + // (0x04e8:0x61b5), ST2000LM005 HN-M201AAD2BC10001 (0x04e8:0x61b4) "ST(1500|2000)LM00[58] HN-M[0-9]*AAD", "", "", "" }, + { "Seagate FreePlay", // tested with ST1500LM003-9YH148/CC94 + // from FreeAgent GoFlex Enclosure. + "ST(1500LM003|1000LM010|1000LM002)-.*", + "", "", "" + }, { "SAMSUNG SpinPoint MP5", // tested with HM250HJ/2AK10001 "SAMSUNG HM(250H|320H|500J|640J)J", "", "", "" @@ -2687,21 +2929,31 @@ const drive_settings builtin_knowndrives[] = { "", "-v 9,halfminutes" }, - { "SAMSUNG SpinPoint N3U-3 (USB, 4KiB LLS)", // tested with HS25YJZ/3AU10-01 + { "SAMSUNG SpinPoint N3U-3 (USB)", // tested with + // SAMSUNG HS25YJZ/3AU10-01 (0x18a5:0x0227, reports 4KiB LPS/LLS. ticket #159), + // SAMSUNG HS20YJZ/3AU10-01 (0x04e8:0x2f06, reports 512B sectors, Debian Bug 964032) "SAMSUNG HS(122H|2[05]YJ)Z", "", "", "" }, { "SK hynix SATA SSDs", - "SK ?hynix SC(210|300|308|311|313).*|" // tested with + "SK ?hynix (SC(210|300|308|311|313|401)|SH920) .*|" // tested with // SK hynix SC210 mSATA 256GB/20002L00, // SKhynix SC300 HFS256G32MND-3210A/20131P00, + // SK hynix SC308 SATA 256GB/30000P10, // SK hynix SC308 SATA 128GB/30001P10, // SK hynix SC311 SATA 512GB/70000P10, - // SK hynix SC313 HFS256G32TNF-N3A0A/70000P10 - "HFS(128|256|512)G3[29]MND-(2200|3[23]10)A|" // HFS128G32MND-2200A/20200L00, - // HFS512G32MND-3210A/20100P00, HFS512G39MND-3310A/20002P00 + // SK hynix SC313 HFS256G32TNF-N3A0A/70000P10, + // SK hynix SC401 SATA 512GB/90000121, + // SK hynix SH920 mSATA 256GB/1010BL00 + "HFS(128|256|512)G3[29A]MN[BD]-(2200|3[23]10)A|" // SC210, tested with + // HFS128G32MND-2200A/20200L00, HFS512G32MND-3210A/20100P00, + // HFS512G39MND-3310A/20002P00, HFS256G3AMNB-2200A/1010BL00 + "HFS(128|256|512)G3[29]MND-3(312|510)A|" // SC300, tested with HFS256G32MND-3312A/20001P00, + // HFS512G39MND-3510A/20400P00 + "HFS(128|256|512)G39TND-N210A|" // SC308, tested with HFS128G39TND-N210A/30001P10 "HFS(120|250|500)G32TND-N1A2A|" // SL308, tested with HFS500G32TND-N1A2A/30000P10 - "HFS(128|256|512)G39TND-N210A", // SC308, tested with HFS128G39TND-N210A/30001P10 + "HFS(128|256|512)G32TNF-N3A0A|" // SC313, tested with HFS256G32TNF-N3A0A/70000P10 + "SHGS31-(250|500|1000)GS-2", // S31, tested with SHGS31-1000GS-2/90000Q00 "", "", //"-v 1,raw48,Raw_Read_Error_Rate " "-v 5,raw48,Retired_Block_Count " @@ -2710,6 +2962,7 @@ const drive_settings builtin_knowndrives[] = { "-v 100,raw48,Total_Erase_Count " "-v 168,raw48,Min_Erase_Count " "-v 169,raw48,Max_Erase_Count " + "-v 170,raw48,Unknown_SK_hynix_Attrib " "-v 171,raw48,Program_Fail_Count " "-v 172,raw48,Erase_Fail_Count " "-v 173,raw48,Wear_Leveling_Count " @@ -2725,6 +2978,7 @@ const drive_settings builtin_knowndrives[] = { //"-v 184,raw48,End-to-End_Error " //"-v 187,raw48,Reported_Uncorrect " //"-v 188,raw48,Command_Timeout " + "-v 191,raw48,Unknown_SK_hynix_Attrib " // SC210 //"-v 194,tempminmax,Temperature_Celsius " //"-v 195,raw48,Hardware_ECC_Recovered " //"-v 196,raw16(raw16),Reallocated_Event_Count " @@ -2735,9 +2989,12 @@ const drive_settings builtin_knowndrives[] = { "-v 212,raw48,Phy_Error_Count " "-v 231,raw48,SSD_Life_Left " "-v 234,raw48,Unknown_SK_hynix_Attrib " - "-v 241,raw48,Total_Writes_GiB " - "-v 242,raw48,Total_Reads_GiB " + "-v 236,raw48,Unknown_SK_hynix_Attrib " // SC311, SC313 + "-v 238,raw48,Unknown_SK_hynix_Attrib " // SC401 + "-v 241,raw48,Total_Writes_GB " // SC31: ~GB, not GiB (#1517) + "-v 242,raw48,Total_Reads_GB " "-v 243,raw48,Total_Media_Writes " + "-v 249,raw48,NAND_Writes_GiB " // SC311, SC313 "-v 250,raw48,Read_Retry_Count " }, { "SK hynix SATA SSDs", @@ -3160,8 +3417,9 @@ const drive_settings builtin_knowndrives[] = { "(Hitachi|HGST) HT[ES]5432(16|25|32)A7A38[145]", "", "", "" }, - { "Hitachi Travelstar 5K500.B", // tested with Hitachi HTS545050B9SA00/PB4OC60X - "(Hitachi )?HT[ES]5450(12|16|25|32|40|50)B9(A30[01]|SA00)", + { "Hitachi Travelstar 5K500.B", // tested with Hitachi HTS545050B9SA00/PB4OC60X, + // Hitachi HTS545025B9SA02/PB2AC60W + "(Hitachi )?HT[ES]5450(12|16|25|32|40|50)B9(A30[01]|SA0[02])", "", "", "" }, { "Hitachi/HGST Travelstar Z5K500", // tested with HGST HTS545050A7E380/GG2OAC90, @@ -3171,7 +3429,7 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Hitachi/HGST Travelstar 5K750", // tested with Hitachi HTS547575A9E384/JE4OA60A, - // APPLE HDD HTS547550A9E384/JE3AD70F + // APPLE HDD HTS547550A9E384/JE3AD70F "(Hitachi|APPLE HDD) HT[ES]5475(50|64|75)A9E38[14]", "", "", "" }, @@ -3180,8 +3438,9 @@ const drive_settings builtin_knowndrives[] = { "HGST HT[ES]5410(64|75|10)A9E68[01]", "", "", "" }, - { "HGST Travelstar Z5K1000", // tested with HGST HTS541010A7E630/SE0OA4A0 - "HGST HTS5410(75|10)A7E63[015]", + { "HGST Travelstar Z5K1000", // tested with HGST HTS541010A7E630/SE0OA4A0, + // HGST HTS541010B7E610/01.01A01 + "HGST HTS5410(75|10)[AB]7E6(10|3[015])", "", "", "" }, { "HGST Travelstar 5K1500", // tested with HGST HTS541515A9E630/KA0OA500 @@ -3208,9 +3467,9 @@ const drive_settings builtin_knowndrives[] = { "(Hitachi |HITACHI )?HTS7220(80|10|12|16|20)K9(A3|SA)00", "", "", "" }, - { "Hitachi Travelstar 7K320", // tested with + { "Hitachi Travelstar 7K320", // tested with HITACHI HTS723216L9SA60/FC2ZC50B, // HTS723225L9A360/FCDOC30F, HTS723216L9A362/FC2OC39F - "(Hitachi )?HT[ES]7232(80|12|16|25|32)L9(A300|A36[02]|SA61)", + "(Hitachi |HITACHI )?HT[ES]7232(80|12|16|25|32)L9(A300|A36[02]|SA6[01])", "", "", "" }, { "Hitachi Travelstar Z7K320", // tested with HITACHI HTS723232A7A364/EC2ZB70B @@ -3266,12 +3525,13 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Hitachi Deskstar 5K3000", // tested with HDS5C3030ALA630/MEAOA5C0, - // Hitachi HDS5C3020BLE630/MZ4OAAB0 (OEM, Toshiba Canvio Desktop) + // Hitachi HDS5C3020BLE630/MZ4OAAB0 (OEM, Toshiba Canvio Desktop) "(Hitachi )?HDS5C30(15|20|30)(ALA|BLE)63[02].*", "", "", "" }, - { "Hitachi Deskstar 5K4000", // tested with HDS5C4040ALE630/MPAOA250 - "(Hitachi )?HDS5C40(30|40)ALE63[01].*", + { "Hitachi/HGST Deskstar 5K4000", // tested with HDS5C4040ALE630/MPAOA250 + // HGST HDS5C4040ALE630/MPAOA580 + "(Hitachi |HGST )?HDS5C40(30|40)ALE63[01].*", "", "", "" }, { "Hitachi Deskstar 7K80", @@ -3346,9 +3606,15 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "HGST Deskstar NAS", // tested with HGST HDN724040ALE640/MJAOA5E0, - // HGST HDN726050ALE610/APGNT517, HGST HDN726060ALE610/APGNT517 - // HGST HDN726040ALE614/APGNW7JH, HGST HDN726060ALE614/K1HE594D - "HGST HDN72(4030|4040|6040|6050|6060)ALE6(10|14|40|04)", + // HGST HDN726050ALE610/APGNT517, HGST HDN726060ALE610/APGNT517 + // HGST HDN726040ALE614/APGNW7JH, HGST HDN726060ALE614/K1HE594D + // HGST HDN728080ALE604/A4GNW91X + "HGST HDN72(40[34]|60[456]|808)0ALE6(04|1[04]|40)", + "", "", + "-v 22,raw48,Helium_Level" // HDN728080ALE604 + }, + { "Hitachi/HGST Ultrastar 5K3000", // tested with Hitachi HUA5C3030ALA640/MEAOA800 + "(Hitachi |HGST )?HUA5C30(20|30)ALA64[01]", "", "", "" }, { "Hitachi Ultrastar A7K1000", // tested with @@ -3364,16 +3630,17 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Hitachi Ultrastar 7K3000", // tested with Hitachi HUA723030ALA640/MKAOA580, - // Hitachi HUA723020ALA641/MK7OA840 - "Hitachi HUA7230(20|30)ALA64[01]", + // Hitachi HUA723020ALA641/MK7OA840, HUA723020ALA640/MK7OAAA0 + "(Hitachi )?HUA7230(20|30)ALA64[01]", "", "", "" }, { "Hitachi/HGST Ultrastar 7K4000", // tested with Hitachi HUS724040ALE640/MJAOA3B0, - // HGST HUS724040ALE640/MJAOA580, HGST HUS724020ALA640/MF6OAA70 - "(Hitachi|HGST) HUS7240(20|30|40)AL[AE]64[01]", + // HGST HUS724040ALE640/MJAOA580, HGST HUS724020ALA640/MF6OAA70, + // HUS724030ALA640/MF8OAAZ0 + "(Hitachi |HGST )?HUS7240(20|30|40)AL[AE]64[01]", "", "", "" }, - { "Hitachi/HGST Ultrastar 7K2", // + { "Hitachi/HGST Ultrastar 7K2", "(Hitachi|HGST) HUS722T[12]TALA604", "", "", "-v 16,raw48,Gas_Gauge" @@ -3382,6 +3649,11 @@ const drive_settings builtin_knowndrives[] = { "HGST HUS7260[2456]0AL[AEN]61[014]", "", "", "" }, + { "HGST Ultrastar HC310/320", // tested with HGST HUS726T6TALE6L4/VKGNW40H, + // HGST HUS728T8TALE6L4/V8GNW460 + "HGST HUS72(6T[46]|8T8)TALE6L4", + "", "", "" + }, { "HGST Ultrastar He6", // tested with HGST HUS726060ALA640/AHGNT1E2 "HGST HUS726060ALA64[01]", "", "", @@ -3397,24 +3669,63 @@ const drive_settings builtin_knowndrives[] = { "", "", "-v 22,raw48,Helium_Level" }, - { "Western Digital Ultrastar He10/12", // WD white label, tested with + { "Western Digital Ultrastar (He10/12)", // WD white label, tested with // WDC WD80EMAZ-00WJTA0/83.H0A83 (Easystore 0x1058:0x25fb), // WDC WD80EZAZ-11TDBA0/83.H0A83, WDC WD100EMAZ-00WJTA0/83.H0A83, // WDC WD100EZAZ-11TDBA0/83.H0A83, WDC WD120EMAZ-11BLFA0/81.00A81 - "WDC WD(80|100|120)E[MZ]AZ-.*", + // WDC WD140EDFZ-11A0VA0/81.00A81 (Easystore 0x1058:0x25fb) + // WDC WD140EDGZ-11B2DA2/85.00A85, WDC WD140EDGZ-11B1PA0/85.00A85 + // WDC WD120EDAZ-11F3RA0/81.00A81, WDC WD80EDAZ-11TA3A0/81.00A81 + "WDC WD(80|100|120|140)E([MZ]A|DA|DF|DG)Z-.*", "", "", - "-v 22,raw48,Helium_Level" + "-v 22,raw48,Helium_Level" // not: WD80EDAZ }, { "HGST Ultrastar DC HC520 (He12)", // tested with HGST HUH721212ALE600/LEGNT3D0 "HGST HUH721212AL[EN]60[014]", "", "", "-v 22,raw48,Helium_Level" }, - { "Western Digital Ultrastar DC HC530", // tested with WDC WUH721414ALE6L4/LDGNW07G - "WDC ?WUH721414ALE6L4", + { "Western Digital Ultrastar DC HC530", // tested with + // WDC WUH721414ALE604/LDAZW110, WDC WUH721414ALE6L4/LDGNW07G + "WDC ?WUH721414ALE6[0L]4", "", "", "-v 22,raw48,Helium_Level" }, + { "Western Digital Ultrastar DC HC550", // tested with WDC WUH721818ALE6L4/PCGNW110, + // WUH721818ALE6L4/PCGAW232, WDC WUH721818ALN6L4/PCGNW088 + "(WDC ?)?WUH72181[68]AL[EN]6[0L][0146]", + "", "", + "-v 22,raw48,Helium_Level" + }, + { "Western Digital Ultrastar DC HC560", // tested with WDC WUH722020ALN604/PQGNW108 + // WDC WUH722020BLE6L4 + "(WDC ?)?WUH722020[AB]L[EN]6[0L][014]", + "", "", + "-v 22,raw48,Helium_Level " + "-v 82,raw16,Head_Health_Score " + "-v 90,hex48,NAND_Master" + }, + { "Western Digital Ultrastar DC HC570", // tested with WUH722222ALE604 + "(WDC ?)?WUH722222[AB]L[EN]6[0L]4", + "", "", + "-v 22,raw48,Helium_Level " + "-v 71,raw16,Milli_Micro_Actuator " + "-v 82,raw16,Head_Health_Score " + "-v 90,hex48,NAND_Master" + }, + { "Western Digital Ultrastar DC HC650", // tested with WDC WSH722020ALE6L0/PCGMT421 + "(WDC ?)?WSH7220(20|VC)AL[EN]6[0L][0146]", + "", "", + "-v 22,raw48,Helium_Level" + }, + { "Western Digital Ultrastar DC HC670", // WSH722626ALE604 + "(WDC ?)?WSH722222[AB]L[EN]6[0L]4", + "", "", + "-v 22,raw48,Helium_Level " + "-v 71,raw16,Milli_Micro_Actuator " + "-v 82,raw16,Head_Health_Score " + "-v 90,hex48,NAND_Master" + }, { "HGST MegaScale 4000", // tested with HGST HMS5C4040ALE640/MPAOA580 "HGST HMS5C4040[AB]LE64[01]", // B = DC 4000.B "", "", "" @@ -3447,7 +3758,6 @@ const drive_settings builtin_knowndrives[] = { "TOSHIBA MK(80|12|10)34GSX", "", "", "" }, - // { "Toshiba 2.5\" HDD MK..32GSX", // tested with TOSHIBA MK1032GSX/AS021G "TOSHIBA MK(10|80|60|40)32GSX", "", "", "" @@ -3458,7 +3768,7 @@ const drive_settings builtin_knowndrives[] = { "", "-v 9,minutes" }, - { "Toshiba 2.5\" HDD MK..52GSX", + { "Toshiba 2.5\" HDD MK..52GSX", // tested with TOSHIBA MK3252GSX/LV010A "TOSHIBA MK(80|12|16|25|32)52GSX", "", "", "" }, @@ -3500,6 +3810,11 @@ const drive_settings builtin_knowndrives[] = { "TOSHIBA MK(32|50|64|75)75GSX", "", "", "" }, + { "Toshiba 2.5\" HDD MK..76GSX/GS001A", // tested with TOSHIBA MK2576GSX/GS001A + "TOSHIBA MK(16|25|32|50|64)76GSX", + "GS001A", + "", "" + }, { "Toshiba 2.5\" HDD MK..76GSX", // tested with TOSHIBA MK3276GSX/GS002D "TOSHIBA MK(16|25|32|50|64)76GSX", "", @@ -3515,7 +3830,7 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Toshiba 2.5\" HDD MQ01ABD...", // tested with TOSHIBA MQ01ABD100/AX001U, - // TOSHIBA MQ01ABD100V/AX001Q + // TOSHIBA MQ01ABD100/AX1R4C, TOSHIBA MQ01ABD100V/AX001Q "TOSHIBA MQ01ABD(025|032|050|064|075|100)V?", "", "", "" }, @@ -3558,12 +3873,13 @@ const drive_settings builtin_knowndrives[] = { "TOSHIBA MG03ACA[1234]00Y?", "", "", "" }, - { "Toshiba 3.5\" MD04ACA... Enterprise HDD", // tested with TOSHIBA MD04ACA500/FP1A - "TOSHIBA MD04ACA[2345]00", + { "Toshiba MG04ACA... Enterprise HDD", // tested with TOSHIBA MD04ACA500/FP1A, + // TOSHIBA MG04ACA600A/FS2B, TOSHIBA MG04ACA400NY/FK5D (Dell) + "TOSHIBA MG04ACA[23456]00([AEN].?)?", "", "", "" }, - { "Toshiba 3.5\" MG04ACA... Enterprise HDD", // tested with TOSHIBA MG04ACA600A/FS2B - "TOSHIBA MG04ACA[23456]00[AE].?", + { "Toshiba MG05ACA... Enterprise Capacity HDD", // tested with TOSHIBA MG05ACA800E/GX2A + "TOSHIBA MG05ACA800[AE]", "", "", "" }, { "Toshiba MG06ACA... Enterprise Capacity HDD", // tested with TOSHIBA MG06ACA800E/4303, @@ -3577,6 +3893,27 @@ const drive_settings builtin_knowndrives[] = { "-v 23,raw48,Helium_Condition_Lower " "-v 24,raw48,Helium_Condition_Upper" }, + { "Toshiba MG08ACA... Enterprise Capacity HDD", // tested with TOSHIBA MG08ACA14TE/0102, + // TOSHIBA MG08ACA16TE/0102 + "TOSHIBA MG08ACA1[46]T[AE]Y?", + "", "", + "-v 23,raw48,Helium_Condition_Lower " + "-v 24,raw48,Helium_Condition_Upper" + }, + { "Toshiba MG09ACA... Enterprise Capacity HDD", // tested with TOSHIBA MG09ACA18TE/0102 + "TOSHIBA MG09ACA1[68]T[AE]Y?", + "", "", + "-v 23,raw48,Helium_Condition_Lower " + "-v 24,raw48,Helium_Condition_Upper " + "-v 27,raw48,MAMR_Health_Monitor" + }, + { "Toshiba MG10ACA... Enterprise Capacity HDD", // tested with TOSHIBA MG10ACA20TE/0102 + "TOSHIBA MG10ACA20T[AE]Y?", + "", "", + "-v 23,raw48,Helium_Condition_Lower " + "-v 24,raw48,Helium_Condition_Upper " + "-v 27,raw48,MAMR_Health_Monitor" + }, { "Toshiba 3.5\" DT01ABA... Desktop HDD", // tested with TOSHIBA DT01ABA300/MZ6OABB0 "TOSHIBA DT01ABA(100|150|200|300)", "", "", "" @@ -3586,12 +3923,36 @@ const drive_settings builtin_knowndrives[] = { "TOSHIBA DT01ACA(025|032|050|075|100|150|200|300)", "", "", "" }, - { "Toshiba X300", // tested with TOSHIBA HDWE160/FS2A - "TOSHIBA HDWE1[456]0", + { "Toshiba N300/MN NAS HDD", // tested with TOSHIBA HDWQ140/FJ1M, TOSHIBA HDWN160/FS1M, + // TOSHIBA HDWN180/GX2M, TOSHIBA HDWG480/0601 (8TB), TOSHIBA HDWG11A/0603 (10TB), + // TOSHIBA HDWG21C/0601 (12TB), TOSHIBA HDWG21E/0601 (14TB), + // TOSHIBA MN07ACA12T/0601, TOSHIBA MN08ACA14T/0601 + "TOSHIBA HDW([GNQ]1[468]0|G(480|11A|21[CE]|31G))|" // 31G: 16TB + "TOSHIBA MN0(4ACA400|6ACA([68]00|10T)|7ACA1[24]T|8ACA1[46]T)", + "", "", + "-v 23,raw48,Helium_Condition_Lower " // ] >= 12TB + "-v 24,raw48,Helium_Condition_Upper" // ] + }, + { "Toshiba P300 (CMR)", // tested with TOSHIBA HDWD120/MX4OACF0 + "TOSHIBA HDWD1(05|10|20|30)", "", "", "" }, - { "Toshiba P300", // tested with TOSHIBA HDWD120/MX4OACF0 - "TOSHIBA HDWD1(30|20|10|05)", + { "Toshiba P300 (SMR)", // tested with TOSHIBA HDWD240/KQ000A + "TOSHIBA HDWD2[246]0", + "", "", "" + }, + { "Toshiba X300", // tested with TOSHIBA HDWE160/FS2A, TOSHIBA HDWF180/GX0B + "TOSHIBA HDW(E1[456]0|[FR]180|R(11A|21[CE]|31G))", // 11A:10TB, 21C:12TB, 21E:14TB, 31G: 16TB + "", "", + "-v 23,raw48,Helium_Condition_Lower " // ] >= 12TB + "-v 24,raw48,Helium_Condition_Upper" // ] + }, + { "Toshiba L200 (CMR)", + "TOSHIBA HDW[JK]1(05|10)", + "", "", "" + }, + { "Toshiba L200 (SMR)", // tested with TOSHIBA HDWL110/JU000A. TOSHIBA HDWL120/JT000A + "TOSHIBA HDWL1[12]0", "", "", "" }, { "Toshiba 1.8\" HDD", @@ -3608,7 +3969,7 @@ const drive_settings builtin_knowndrives[] = { }, { "Toshiba HK4R Series SSD", // TOSHIBA THNSN8960PCSE/8EET6101 "TOSHIBA THNSN8(120P|240P|480P|960P|1Q92)CSE", - "", "", + "", "", "-v 167,raw48,SSD_Protect_Mode " "-v 168,raw48,SATA_PHY_Error_Count " "-v 169,raw48,Bad_Block_Count " @@ -3619,7 +3980,7 @@ const drive_settings builtin_knowndrives[] = { // TOSHIBA THNSFJ256GCSU/JULA1102 // TOSHIBA THNSFJ256GDNU A/JYLA1102 "TOSHIBA THNS[NF]J(060|128|256|512)G[BCAM8VD][SCN][TU].*", - "", "", + "", "", "-v 167,raw48,SSD_Protect_Mode " "-v 168,raw48,SATA_PHY_Error_Count " "-v 169,raw48,Bad_Block_Count " @@ -3931,11 +4292,21 @@ const drive_settings builtin_knowndrives[] = { "", "", "-v 188,raw16 -v 240,msec24hour32" }, - { "Seagate BarraCuda 3.5", // tested with ST1000DM010-2EP102/Z9ACZM97, - // ST2000DM008-2FR102/0001, ST3000DM008-2DM166/CC26, ST4000DM005-2DP166/0001, - // ST4000DM006-2G5107/DN02, ST8000DM004-2CX188/0001, ST10000DM0004-1ZC101/DN01 - "ST(500DM009|1000DM010|2000DM00[5-9]|3000DM00[789]|4000DM00[456]|6000DM00[34]|8000DM00[45]|10000DM0004)-.*", + { "Seagate BarraCuda 3.5 (CMR)", // tested with ST1000DM010-2EP102/CC43, + // ST3000DM008-2DM166/CC26, ST4000DM006-2G5107/DN02, ST10000DM0004-1ZC101/DN01, + // ST12000DM0007-2GR116/DN01 + "ST(500DM009|1000DM010|2000DM00[67]|3000DM00[89]|4000DM006|6000DM004|" + "8000DM005|10000DM0004|12000DM0007)-.*", "", "", + "-v 200,raw48,Pressure_Limit " + "-v 188,raw16 -v 240,msec24hour32" + }, + { "Seagate BarraCuda 3.5 (SMR)", // tested with ST2000DM008-2FR102/0001, + // ST4000DM004-2CV104/0001 (TRIM: no), ST4000DM005-2DP166/0001, ST8000DM004-2CX188/0001 + "ST(2000DM00[589]|3000DM007|4000DM00[45]|6000DM003|8000DM004)-.*", + "", "", + "-v 9,msec24hour32 " // ST4000DM004-2CV104/0001 + "-v 200,raw48,Pressure_Limit " "-v 188,raw16 -v 240,msec24hour32" }, { "Seagate Desktop HDD.15", // tested with ST4000DM000-1CD168/CC43, ST5000DM000-1FK178/CC44, @@ -4062,9 +4433,10 @@ const drive_settings builtin_knowndrives[] = { // ST4000NM0035-1V4107/TNC3 // ST1000NM0055-1V410C/TN02 // ST8000NM0055-1RM112/SN04 - // ST10000NM0156-2AA111/SS05 - "ST([1234568]|10)000NM0[01][0-68][456]-.*", // *[069]4 = 4Kn - "", "", + // ST10000NM0156-2AA111/SS05, ST4000NM0245-1Z2107/SS05 + "ST([1234568]|10)000NM0[012][0-68][456]-.*", // *[069]4 = 4Kn + "", "", + "-v 200,raw48,Pressure_Limit " "-v 188,raw16 -v 240,msec24hour32" }, { "Seagate Enterprise Capacity 3.5 HDD", // V5.1, ms in attribute 9 @@ -4077,23 +4449,37 @@ const drive_settings builtin_knowndrives[] = { "", "", "-v 9,msec24hour32 -v 240,msec24hour32" }, + // ST1000NM000A, ST1000NM002A, ST2000NM000A, ST2000NM001A, ST2000NM002A, + // ST3000NM000A, ST3000NM004A, ST4000NM000A, ST4000NM001A, ST4000NM002A, + // ST4000NM006A, ST4000NM010A, ST4000NM012A, ST4000NM013A, ST6000NM002A, + // ST6000NM021A, ST6000NM022A, ST6000NM025A, ST6000NM026A, ST8000NM000A, + // ST8000NM002A, ST8000NM004A, ST8000NM008A, ST8000NM009A, ST8000NM016A + { "Seagate Exos 7E8", // tested with ST6000NM021A-2R7101/SN02, ST8000NM000A-2KE101/SN02 + "ST[123468]000NM0(0[01234689]|1[0236]|2[1256])A-.*", + "", "", + "-v 18,raw48,Head_Health " + "-v 240,msec24hour32" + }, { "Seagate Exos X12", // tested with ST12000NM0007-2A1101/SN02 "ST12000NM00[01]7-.*", // *17 = SED "", "", + "-v 200,raw48,Pressure_Limit " "-v 240,msec24hour32" }, { "Seagate Exos X14", // tested with ST12000NM0008-2H3101/SN02, // ST12000NM0538-2K2101/CMA2 (OEM?) "ST(14000NM04[24]8|14000NM0(01|25)8|12000NM0(00|24|53)8|10000NM0(47|56)8)-.*", "", "", - "-v 18,raw48,Unknown_Seagate_Attrib " + "-v 18,raw48,Head_Health " + "-v 200,raw48,Pressure_Limit " "-v 240,msec24hour32" }, - { "Seagate Exos X16", // tested with X16 ST14000NM001G-2KJ103/SN02, - // ST16000NM001G-2KK103/SN02 - "ST1[46]000NM00[13]G-.*", + { "Seagate Exos X16", // tested with ST10000NM001G-2MW103/SN02 + // ST14000NM001G-2KJ103/SN02, ST16000NM001G-2KK103/SN02, ST16000NM001G-2KK103/SN03 + "ST1[0246]000NM00[13]G-.*", "", "", - "-v 18,raw48,Unknown_Seagate_Attrib " + "-v 18,raw48,Head_Health " + "-v 200,raw48,Pressure_Limit " "-v 240,msec24hour32" }, // new models: ST8000VN0002, ST6000VN0021, ST4000VN000 @@ -4111,17 +4497,25 @@ const drive_settings builtin_knowndrives[] = { "ST(8000NE|[65432]000VN)00[01]1-.*", "", "", "" }, - { "Seagate IronWolf", // tested with ST6000VN0033-2EE110/SC60, - // ST6000VN0041-2EL11C/SC61, ST12000VN0007-2GS116/SC60, ST12000VN0008-2JH101/SC60 - "ST(1|2|3|4|6|8|10|12)000VN00(0?[2478]|22|33|41)-.*", - "", "", "" + { "Seagate IronWolf", // tested with ST3000VN007-2E4166/SC60, ST4000VN008-2DR166/SC60, + // ST6000VN001-2BB186/SC60, ST6000VN0033-2EE110/SC60, ST6000VN0041-2EL11C/SC61, + // ST8000VN0022-2EL112/SC61, ST10000VN0004-1ZD101/SC60, + // ST12000VN0007-2GS116/SC60, ST12000VN0008-2JH101/SC60 + "ST(1|2|3|4|6|8|10|12)000VN00(0?[2478]|1|22|33|41)-.*", + "", "", + "-v 18,raw48,Head_Health " + "-v 200,raw48,Pressure_Limit " + "-v 240,msec24hour32" }, { "Seagate IronWolf Pro", // tested with ST4000NE0025-2EW107/EN02, - // ST8000NE0004-1ZF11G/EN01, ST8000NE0021-2EN112/EN02 - "ST([24]000NE0025|4000NE001|6000NE0023|8000NE00(04|08|21)|(10|12|14)000NE000[478])-.*", - "", "", "" + // ST8000NE0004-1ZF11G/EN01, ST8000NE0021-2EN112/EN02, ST16000NE000-2RW103/EN02 + "ST([24]000NE0025|4000NE001|6000NE0023|8000NE00(04|08|21)|(10|12|14)000NE000[478]|16000NE000)-.*", + "", "", + "-v 18,raw48,Head_Health " // ST16000NE000 + "-v 200,raw48,Pressure_Limit " + "-v 240,msec24hour32" }, - { "Seagate Archive HDD", // tested with ST8000AS0002-1NA17Z/AR13 + { "Seagate Archive HDD (SMR)", // tested with ST8000AS0002-1NA17Z/AR13 "ST[568]000AS00[01][12]-.*", "", "", "" }, @@ -4197,7 +4591,7 @@ const drive_settings builtin_knowndrives[] = { }, { "Seagate Nytro XF1230 SATA SSD", // tested with XF1230-1A0480/ST200354 "XF1230-1A(0240|0480|0960|1920)", - "", "", + "", "", "-v 174,raw48,Unexpect_Power_Loss_Ct " "-v 180,raw48,End_to_End_Err_Detect " "-v 183,raw48,SATA_Downshift_Count " @@ -4213,10 +4607,10 @@ const drive_settings builtin_knowndrives[] = { { "Seagate IronWolf 110 SATA SSD", //Written to Seagate documentation "ZA(240|480|960|1920|3840)NM10001", "", "", - //"-v 1,raw48,Raw_Read_Error_Rate " - //"-v 5,raw48,Reallocated_Sector_Ct " - //"-v 9,raw48,Power_On_Hours " - //"-v 12,raw48,Drive_Power_Cycle_Ct " + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " "-v 100,raw48,Flash_GB_Erased " "-v 102,raw48,Lifetime_PS4_Entry_Ct " "-v 103,raw48,Lifetime_PS3_Exit_Ct " @@ -4228,26 +4622,56 @@ const drive_settings builtin_knowndrives[] = { "-v 177,raw16,Wear_Range_Delta " "-v 183,hex56,SATA_Downshift_Count " "-v 187,raw48,Uncorrectable_ECC_Ct " - //"-v 194,tempminmax,Primary_Temperature " + //"-v 194,tempminmax,Temperature_Celsius " "-v 195,raw16(raw16),RAISE_ECC_Cor_Ct " "-v 198,raw48,Uncor_Read_Error_Ct " - //"-v 199,raw48,SATA_R-Err_(CRC)_Err_Ct " + //"-v 199,raw48,UDMA_CRC_Error_Count " "-v 230,raw56,Drv_Life_Protect_Status " "-v 231,hex56,SSD_Life_Left " - //"-v 232,raw48,Available_Rsrvd_Space " + //"-v 232,raw48,Available_Reservd_Space " "-v 233,raw48,Lifetime_Wts_To_Flsh_GB " "-v 241,raw48,Lifetime_Wts_Frm_Hst_GB " "-v 242,raw48,Lifetime_Rds_Frm_Hst_GB " "-v 243,hex56,Free_Space " }, + { "Seagate IronWolf (Pro) 125 SSDs", // IronWolf_Pro_125_SSD_Product_Manual_100866982_A.pdf + // IronWolf_125_SSD_Product_Manual_100866980_C.pdf + "Seagate IronWolf ZA(250|500|1000|2000|4000)NM10002-.*|" // tested with + // Seagate IronWolf ZA500NM10002-2ZG101/SU3SC013 + "Seagate IronWolfPro ZA(240|480|960|1920|3840)NX10001-.*", // tested with + // Seagate IronWolfPro ZA3840NX10001-2ZH104/SU4SC01B + "", "", + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " + "-v 16,raw48,Spare_Blocks_Available " + "-v 17,raw48,Spare_Blocks_Remaining " + "-v 168,raw48,SATA_PHY_Error_Count " + "-v 170,raw16,Early/Later_Bad_Blck_Ct " + "-v 173,raw16,Max/Avg/Min_Erase_Ct " + "-v 174,raw48,Unexpect_Power_Loss_Ct " + "-v 177,raw16,Wear_Range_Delta " + //"-v 192,raw48,Power-Off_Retract_Count " + //"-v 194,tempminmax,Temperature_Celsius " + "-v 218,raw48,SATA_CRC_Error_Count " + "-v 231,raw48,SSD_Life_Left " + "-v 232,hex48,Read_Failure_Blk_Ct " + "-v 233,raw48,Flash_Writes_GiB " + "-v 234,raw48,NAND_Reads_Sectors " + "-v 235,raw48,Flash_Writes_Sectors " + "-v 241,raw48,Host_Writes_GiB " + "-v 242,raw48,Host_Reads_GiB " + "-v 246,hex64,Write_Protect_Detail " // prevents interpretation of bogus threshold 255 (ticket #1396) + "-v 247,raw48,Health_Check_Timer " + }, { "Seagate Nytro SATA SSD", //Written to Seagate documentation // tested with XA960LE10063, XA960LE10063 "XA(240|480|960|1920|3840)[LM]E10(00|02|04|06|08|10)3", "", "", - //"-v 1,raw48,Raw_Read_Error_Rate " - //"-v 5,raw48,Reallocated_Sector_Ct " - //"-v 9,raw48,Power_On_Hours " - //"-v 12,raw48,Drive_Power_Cycle_Ct " + //"-v 1,raw48,Raw_Read_Error_Rate " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " + //"-v 9,raw24(raw8),Power_On_Hours " + //"-v 12,raw48,Power_Cycle_Count " "-v 100,raw48,Flash_GB_Erased " "-v 102,raw48,Lifetime_PS4_Entry_Ct " "-v 103,raw48,Lifetime_PS3_Exit_Ct " @@ -4259,28 +4683,32 @@ const drive_settings builtin_knowndrives[] = { "-v 177,raw16,Wear_Range_Delta " "-v 183,hex56,SATA_Downshift_Count " "-v 187,raw48,Uncorrectable_ECC_Ct " - //"-v 194,tempminmax,Primary_Temperature " + //"-v 194,tempminmax,Temperature_Celsius " "-v 195,raw16(raw16),RAISE_ECC_Cor_Ct " "-v 198,raw48,Uncor_Read_Error_Ct " - //"-v 199,raw48,SATA_R-Err_(CRC)_Err_Ct " + //"-v 199,raw48,UDMA_CRC_Error_Count " "-v 230,raw56,Drv_Life_Protect_Status " "-v 231,hex56,SSD_Life_Left " - //"-v 232,raw48,Available_Rsrvd_Space " + //"-v 232,raw48,Available_Reservd_Space " "-v 233,raw48,Lifetime_Wts_To_Flsh_GB " "-v 241,raw48,Lifetime_Wts_Frm_Hst_GB " "-v 242,raw48,Lifetime_Rds_Frm_Hst_GB " "-v 243,hex56,Free_Space " }, - { "WD Blue and Green SSDs", // tested with WDC WDS250G1B0A-00H9H0/X41000WD, + { "WD Blue / Red / Green SSDs", // tested with WDC WDS250G1B0A-00H9H0/X41000WD, // WDC WDS250G1B0A-00H9H0/X41100WD, WDC WDS100T1B0A-00H9H0, // WDC WDS120G2G0A-00JH30/UE360000, WDC WDS240G2G0A-00JH30/UF300000, // WDC WDS500G2B0A-00SM50/X61130WD, WDC WDS200T2B0A-00SM50/X61130WD, // WDC WDS200T2B0A/X61190WD, WDC WDS120G1G0A-00SS50/Z3311000 - // WDC WDS500G2B0A-00SM50/401000WD - "WDC ?WDS((120|240|250|480|500)G|[12]00T)(1B|2B|1G|2G)0[AB](-.*)?", // *B* = Blue, *G* = Green, *2B* = Blue 3D NAND + // WDC WDS500G2B0A-00SM50/401000WD, + // WDC WDBNCE2500PNC/X61130WD, WDC WDBNCE0010PNC-WRSN/X41110WD, + // WDC WDS200T1R0A-68A4W0/411000WR, WDC WDS400T1R0A-68A4W0/411000WR + "WDC WDBNCE(250|500|00[124])0PNC(-.*)?|" // Blue 3D + "WDC ?WDS((120|240|250|480|500)G|[124]00T)(1B|2B|1G|2G|1R)0[AB](-.*)?", + // *B* = Blue, *G* = Green, *2B* = Blue 3D NAND, *1R* = Red SA500 "", "", - //"-v 5,raw48,Reallocated_Sector_Ct " // Reassigned Block Count - //"-v 9,raw48,Power_On_Hours " + //"-v 5,raw16(raw16),Reallocated_Sector_Ct " // Reassigned Block Count + //"-v 9,raw24(raw8),Power_On_Hours " //"-v 12,raw48,Power_Cycle_Count " "-v 165,raw48,Block_Erase_Count " "-v 166,raw48,Minimum_PE_Cycles_TLC " @@ -4292,13 +4720,13 @@ const drive_settings builtin_knowndrives[] = { "-v 172,raw48,Erase_Fail_Count " "-v 173,raw48,Average_PE_Cycles_TLC " "-v 174,raw48,Unexpected_Power_Loss " - //"-v 184,raw48,End-to-end_Error " // Detection/Correction Count + //"-v 184,raw48,End-to-End_Error " // Detection/Correction Count //"-v 187,raw48,Reported_Uncorrect " // Uncorrectable Errors - //"-v 188,raw48,Command_Timeout - //"-v 194,tempminmax,Temperature_Celsius " - //"-v 199,raw48,UDMA_CRC_Error_Count // SATA CRC Errors + //"-v 188,raw48,Command_Timeout " + //"-v 194,tempminmax,Temperature_Celsius " + //"-v 199,raw48,UDMA_CRC_Error_Count " // SATA CRC Errors "-v 230,hex48,Media_Wearout_Indicator " // Maybe hex16 - //"-v 232,raw48,Available_Reserve_Space" + //"-v 232,raw48,Available_Reservd_Space" "-v 233,raw48,NAND_GB_Written_TLC " "-v 234,raw48,NAND_GB_Written_SLC " "-v 241,raw48,Host_Writes_GiB " @@ -4377,6 +4805,10 @@ const drive_settings builtin_knowndrives[] = { "WDC WD(12|16|25|32)00SB-.*", "", "", "" }, + { "Western Digital PiDrive Foundation Edition", // WDC WD3750LMCW-11D9GS3 + "WDC WD(3750|2500)LMCW-.*", + "", "", "" + }, { "Western Digital Caviar Serial ATA", "WDC WD(4|8|20|32)00BD-.*", "", "", "" @@ -4404,8 +4836,13 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Western Digital Blue", // tested with WDC WD5000AZLX-00K4KA0/80.00A80, - // WDC WD10EZEX-00RKKA0/80.00A80, WDC WD10EZEX-75M2NA0/01.01A01, WDC WD40EZRZ-00WN9B0/80.00A80 - "WDC WD((25|32|50)00AAKX|5000AZ(LX|RZ)|7500A(AL|ZE)X|10E(AL|ZE)X|[1-6]0EZRZ)-.*", + // WDC WD10EZEX-00RKKA0/80.00A80, WDC WD10EZEX-75M2NA0/01.01A01, WDC WD40EZRZ-00WN9B0/80.00A80, + // APPLE HDD WDC WD10EALX-408EA0/07.01D03 + "(APPLE HDD )?WDC WD((25|32|50)00AAKX|5000AZ(LX|RZ)|7500A(AL|ZE)X|10E(AL|ZE)X|[1-6]0EZRZ)-.*", + "", "", "" + }, + { "Western Digital Blue (SMR)", // tested with WDC WD40EZAZ-00SF3B0/80.00A80 (TRIM: zeroed) + "WDC WD(20|40|60)EZAZ-.*", "", "", "" }, { "Western Digital RE Serial ATA", @@ -4421,7 +4858,7 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Western Digital RE3 Serial ATA", // tested with WDC WD7502ABYS-02A6B0/03.00C06, - // WD1002FBYS-12/03.M0300 + // WD1002FBYS-12/03.M0300 "(WDC )?WD((25|32|50|75)02A|(75|10)02F)BYS-.*", "", "", "" }, @@ -4452,7 +4889,7 @@ const drive_settings builtin_knowndrives[] = { "", "", "" }, { "Western Digital Caviar Green", // tested with WDC WD7500AADS-00M2B0/01.00A01, - // WDC WD10EADX/77.04D77 + // WDC WD10EADX/77.04D77 "WDC WD((50|64|75)00AA[CV]S|(50|64|75)00AADS|10EA[CV]S|(10|15|20)EAD[SX])-.*", "", "", @@ -4473,20 +4910,24 @@ const drive_settings builtin_knowndrives[] = { "WDC WD((500|640)1AAL|7501AA[EL]|1001FA[EL]|2001FAS)S-.*|" "WDC WD(2002|7502|1502|5003|1002|5002)(FAE|AAE|AZE|AAL)X-.*", // could be // WD2002FAEX, WD7502AAEX, WD1502FAEX, WD5003AZEX, WD1002FAEX, WD5002AALX - "", "", "" + "", "", "-F xerrorlba" // WDC WD6401AALS-00L3B2/01.03B01 (ticket #1558) }, { "Western Digital Black", // tested with // WDC WD1003FZEX-00MK2A0/01.01A01, WDC WD3001FAEX-00MJRA0/01.01L01, // WDC WD3003FZEX-00Z4SA0/01.01A01, WDC WD4001FAEX-00MJRA0/01.01L01 // WDC WD4003FZEX-00Z4SA0/01.01A01, WDC WD5003AZEX-00RKKA0/80.00A80, - // WDC WD4004FZWX-00GBGB0/81.H0A81 - "WDC WD(6001|2003|5001|1003|4003|4004|5003|3003|3001)(FZW|FZE|AZE)X-.*|" // could be + // WDC WD4004FZWX-00GBGB0/81.H0A81, WDC WD4005FZBX-00K5WB0/01.01A01 + "WDC WD(6001|2003|5001|1003|4003|4004|4005|5003|3003|3001)(FZW|FZE|FZB|AZE)X-.*|" // could be // new series WD6001FZWX WD2003FZEX WD5001FZWX WD1003FZEX // WD4003FZEX WD5003AZEX WD3003FZEX WD4004FZWX "WDC WD(4001|3001|2002|1002|5003|7500|5000|3200|2500|1600)(FAE|AZE)X-.*", // old series: WD4001FAEX WD3001FAEX WD2002FAEX WD1002FAEX WD5003AZEX "", "", "" }, + { "Western Digital Black (SMR)", // ticket #1313 + "WDC WD10SPSX-.*", + "", "", "" + }, { "Western Digital AV ATA", // tested with WDC WD3200AVJB-63J5A0/01.03E01 "WDC WD(8|16|25|32|50)00AV[BJ]B-.*", "", "", "" @@ -4536,8 +4977,8 @@ const drive_settings builtin_knowndrives[] = { "WDC WD(4|6|8|10|12|16|25)00BEAS-.*", "", "", "" }, - { "Western Digital Scorpio Blue Serial ATA", - "WDC WD((4|6|8|10|12|16|25)00BEVS|(8|12|16|25|32|40|50|64)00BEVT|7500KEVT|10TEVT)-.*", + { "Western Digital Scorpio Blue Serial ATA", // tested with WDC WD3200BEVS-08VAT2/14.01A14 + "WDC WD((4|6|8|10|12|16|25|32)00BEVS|(8|12|16|25|32|40|50|64)00BEVT|7500KEVT|10TEVT)-.*", "", "", "" }, { "Western Digital Scorpio Blue Serial ATA (AF)", // tested with @@ -4558,40 +4999,56 @@ const drive_settings builtin_knowndrives[] = { // WDC WD40EFRX-68WT0N0/80.00A80, WDC WD60EFRX-68MYMN1/82.00A82, // WDC WD80EFAX-68LHPN0/83.H0A83, WDC WD80EFZX-68UW8N0/83.H0A83, // WDC WD80EZZX-11CSGA0/83.H0A03 (My Book 0x1058:0x25ee), - // WDC WD60EFAX-68SHWN0/82.00A82, WDC WD100EFAX-68LHPN0/83.H0A83, + // WDC WD100EFAX-68LHPN0/83.H0A83, // WDC WD120EMFZ-11A6JA0/81.00A81 (Easystore 0x1058:0x25fb) - "WDC WD(7500BFCX|10JFCX|[1-6]0EFRX|[68]0E[FZ][AZ]X|100EFAX|120EMFZ)-.*", + // WDC WD160EMFZ-11AFXA0/81.00A81 + // WDC WD40EFZX-68AWUN0/81.00B81, WDC WD20EFZX-68AWUN0/81.00B81 + // WDC WD140EFFX-68VBXN0/81.00A81 + "WDC WD(7500BFCX|10JFCX|[1-6]0EFRX|[2468]0E[FZ]ZX|(8|10)0EFAX|1[26]0EMFZ|140E(FF|FG)X)-.*", "", "", - "-v 22,raw48,Helium_Level" // WD80EFZX, WD100EFAX, WD120EMFZ + "-v 22,raw48,Helium_Level" // WD80EFAX, WD80EFZX, WD100EFAX, WD120EMFZ, WD160EMFZ }, - { "Western Digital Red Pro", // tested with WDC WD2001FFSX-68JNUN0/81.00A81, - // WDC WD6002FFWX-68TZ4N0/83.H0A83, WDC WD101KFBX-68R56N0/83.H0A03 - "WDC WD([2-68]00[123]FF[BSW]|101KFB)X-.*", - "", "", - "-v 22,raw48,Helium_Level" // WD101KFBX - }, - { "Western Digital Purple", // tested with WDC WD40PURX-64GVNY0/80.00A80, - // WDC WD40PURZ-85TTDY0/80.00A80 - // WDC WD80PUZX-64NEAY0/80.H0A80 - "WDC WD[1234568]0PU[RZ][XZ]-.*", + { "Western Digital Red (SMR)", // ticket #1313, tested with WDC WD60EFAX-68SHWN0/82.00A82 + "WDC WD[2346]0EFAX-.*", "", "", "" }, + { "Western Digital Red Pro", // tested with WDC WD2001FFSX-68JNUN0/81.00A81, + // WDC WD6002FFWX-68TZ4N0/83.H0A83, WDC WD101KFBX-68R56N0/83.H0A03, + // WDC WD102KFBX-68M95N0/83.00A83 + "WDC WD([2-68]00[123]FF[BSW]|10[12]KFB)X-.*", + "", "", + "-v 22,raw48,Helium_Level" // WD101KFBX (but not WD102KFBX) + }, + { "Western Digital Purple (Pro)", // tested with WDC WD40PURX-64GVNY0/80.00A80, + // WDC WD40PURZ-85TTDY0/80.00A80 + // WDC WD80PUZX-64NEAY0/80.H0A80 + // WDC WD121PURP-85B5SY0/82.00A82 + "WDC WD[1234568](0|[0248]1)PU[RZ][PXZ]-.*", + "", "", + "-v 22,raw48,Helium_Level" // WD121PURP-85B5SY0, WD80PUZX-64NEAY0 + }, { "Western Digital Gold", // tested with WDC WD1005FBYZ-01YCBB2/RR07, + // WDC WD1005VBYZ-02RRWB2/RR07, WDC WD2005VBYZ-02RRWB2/RR07 // WDC WD2005FBYZ-01YCBB2/RR07, WDC WD4002FYYZ-01B7CB0/01.01M02, // WDC WD4003FRYZ-01F0DB0/01.01H01, WDC WD6003FRYZ-01F0DB0/01.01H01, // WDC WD8003FRYZ-01JPDB1/01.01H02, WDC WD8004FRYZ-01VAEB0/01.01H01, - // WDC WD121KRYZ-01W0RB0/01.01H01, - "WDC WD([12]005FB|4002FY|4003FR|600[23]FR|800[234]FR|1[02]1KR)YZ-.*", + // WDC WD102KRYZ-01A5AB0/01.01H01, WDC WD121KRYZ-01W0RB0/01.01H01, + // WDC WD141KRYZ-01C66B0/01.01H01, WDC WD161KRYZ-01AGBB0/01.01H01 + "WDC WD([12]005[FV]B|4002FY|4003FR|600[23]FR|800[234]FR|([12][02468]1|102)KR)YZ-.*", "", "", - "-v 22,raw48,Helium_Level" // WD121KRYZ + "-v 22,raw48,Helium_Level" // WD121KRYZ, WD141KRYZ }, { "Western Digital Blue Mobile", // tested with WDC WD5000LPVX-08V0TT2/03.01A03, - // WDC WD10JPVX-75JC3T0/0301A03, WDC WD10JPVX-22JC3T0/01.01A01, - // WDC WD10SPZX-22Z10T0/01.01A01, WDC WD10SPZX-21Z10T0/02.01A02, - // WDC WD20NPVZ-00WFZT0/01.01A01, WDC WD20SPZX-22CRAT0/01.01A01, - // WDC WD20SPZX-22UA7T0/01.01A01 - "WDC WD(3200LPCX|5000[BL]P[CV]X|7500BPVX|10[JS]P[VZ]X|15NPVZ|20NPVZ|20SPZX)-.*", - "", "", "" + // WDC WD10JPVX-75JC3T0/0301A03, WDC WD10JPVX-22JC3T0/01.01A01, + // WDC WD20NPVZ-00WFZT0/01.01A01 + "WDC WD(3200LPCX|5000[BL]P[CV]X|7500BPVX|10JP[VZ]X|(15|20)NPVZ)-.*", + "", "", "" + }, + { "Western Digital Blue Mobile (SMR)", // ticket #1313, tested with + // WDC WD10SPZX-22Z10T0/01.01A01, WDC WD10SPZX-21Z10T0/02.01A02, + // WDC WD20SPZX-22CRAT0/01.01A01, WDC WD20SPZX-22UA7T0/01.01A01 + "WDC WD[12]0SPZX-.*", + "", "", "" }, { "Western Digital Green Mobile", // tested with WDC WD20NPVX-00EA4T0/01.01A01 "WDC WD(15|20)NPV[TX]-.*", @@ -4624,8 +5081,11 @@ const drive_settings builtin_knowndrives[] = { // WDC WD20NMVW-59AV3S3/01.01A01 (0x1058:0x107d), // WDC WD30NMVW-11C3NS4/01.01A01, // WDC WD40NMZW-11GX6S1/01.01A01 (0x1058:0x2599/25e2/25fa) + // WDC WD50NDZW-11A8JS1/01.01A01 (0x1058:0x2627) // WDC WD50NDZW-11MR8S1/02.01A02 - "WDC WD((5000[LK]|7500[BK]|10[JST]|[234]0N)M|50ND)[VZ][VW]-.*", // *W-* = USB 3.0 + // WDC WD40NDZM-59A8KS1/01.01A01 + "WDC WD((5000[LK]|7500[BK]|10[JST]|[234]0N)M|50ND|40ND)[VZ][VWM]-.*", // *W-* = USB 3.0 + // Model numbers with "M" suffix denote the use of USB-C receptacles instead of Micro-B. "", "", "" }, { "Quantum Bigfoot", // tested with TS10.0A/A21.0G00, TS12.7A/A21.0F00 @@ -4702,6 +5162,12 @@ const drive_settings builtin_knowndrives[] = { "-d sat,12" // ATA output registers missing }, // Hewlett-Packard + { "USB: HP Personal Media Drive; ", + "0x03f0:0x070c", + "", + "", + "-d usbsunplus" + }, { "USB: HP Desktop HD BD07; ", // 2TB "0x03f0:0xbd07", "", @@ -4742,7 +5208,7 @@ const drive_settings builtin_knowndrives[] = { "-d sat" }, { "USB: Buffalo; ", - "0x0411:0x0(1[df]9|1e7|240|251|27e)", // 0x01d9: HD-PCTU2 (0x0108), 0x01e7: HD-PNTU3, + "0x0411:0x0(157|1[df]9|1e7|240|251|27e)", // 0x0157: HD-PEU2, 0x01d9: HD-PCTU2 (0x0108), 0x01e7: HD-PNTU3, // 0x01f9: HD-PZU3 (0x0100), 0x0240: HD-PCFU3, 0x0251: HD-PNFU3, 0x027e: HD-LC3 "", "", @@ -4755,7 +5221,7 @@ const drive_settings builtin_knowndrives[] = { "", "-d usbjmicron" }, - // Hitachi (?) + // Hitachi / Renesas { "USB: ; Renesas uPD720231A", // USB2/3->SATA // 0x0229: Pi-102 Raspberry Pi USB to mSATA Converter Board // 0x022a: DeLock 62652 converter SATA 6GB/s > USB 3.0 @@ -4824,12 +5290,18 @@ const drive_settings builtin_knowndrives[] = { "", "-d usbjmicron" // 0x1f0a: works also with "-d sat" }, - { "USB: Samsung S1 Portable; JMicron", - "0x04e8:0x2f03", + { "USB: Samsung S1; JMicron", + "0x04e8:0x2f0[36]", // 0x2f03: S1 Portable, 0x2f06: S1 Mini (SAMSUNG HS20YJZ/3AU10-01) "", "", "-d usbjmicron" }, + { "USB: Samsung Portable SSD T7; ASMedia ASM2362", + "0x04e8:0x(4001|61fb)", // 0x61fb: T7 Shield + "", // 0x0100 + "", + "-d sntasmedia" + }, { "USB: Samsung Story Station; ", "0x04e8:0x5f0[56]", "", @@ -4896,6 +5368,12 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + { "USB: Sony HD-E1; ", + "0x054c:0x05bf", // Sony HD-E1B - 1TB USB3.0 + "", // 0x6610 + "", + "-d sat" + }, // Sunplus { "USB: ; SunPlus", "0x04fc:0x0c05", @@ -4915,6 +5393,13 @@ const drive_settings builtin_knowndrives[] = { "", "-d usbsunplus" }, + // Intrinsix + { "USB: ; Intrinsix", + "0x0578:0x0578", + "", // 0x0202 + "", + "-d sat" // ATA output registers missing + }, // Iomega { "USB: Iomega Prestige Desktop USB 3.0; ", "0x059b:0x0070", @@ -5069,8 +5554,8 @@ const drive_settings builtin_knowndrives[] = { "-d sat" }, { "USB: LaCie; ", // 0x1070: ASMedia 1053 ? - "0x059f:0x10(6f|7[05])", - "", // 6f/70=0x0001, 75=0x0000 + "0x059f:0x10(6f|7[05]|b8)", // 0x0x10b8: d2 PROFESSIONAL + "", // 6f/70/b8=0x0001, 75=0x0000 "", "-d sat" }, @@ -5095,22 +5580,10 @@ const drive_settings builtin_knowndrives[] = { "", "" // unsupported }, - { "USB: ; Genesys Logic", // TODO: requires '-T permissive' - "0x05e3:0x0718", - "", // 0x0041 - "", - "-d sat" - }, - { "USB: ; Genesys Logic GL3310", - "0x05e3:0x0731", // Chieftec USB 3.0 2.5" case - "", - "", - "-d sat" - }, { "USB: ; Genesys Logic", - "0x05e3:0x0735", - "", // 0x1003 - "", + "0x05e3:0x(0718|073[15]|2013)", // 0x0718(0x0041): Requires '-T permissive', + "", // 0x0731: Genesys Logic GL3310, Chieftec USB 3.0 2.5" case, 0x0735(0x1003): ?, + "", // 0x2013(0x0100): Sharkoon QuickPort Duo Clone USB 3.1 Type-C "-d sat" }, // Micron @@ -5146,6 +5619,20 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + // Jess-Link + { "USB: Packard Bell Carbon; ", + "0x0766:0x0017", + "", // 0x0108 + "", + "" // unsupported + }, + // Logitec + { "USB: Logitec LGB-4BNHUC; ", + "0x0789:0x0296", + "", + "", + "-d sat" + }, // SanDisk { "USB: SanDisk SDCZ80 Flash Drive; Fujitsu", // ATA ID: SanDisk pSSD "0x0781:0x558[08]", @@ -5196,13 +5683,13 @@ const drive_settings builtin_knowndrives[] = { "", "" // unsupported }, - { "USB: Freecom HD; JMicron", // 500GB - "0x07ab:0xfcd[6a]", + { "USB: Freecom; JMicron", // 0xfc85: Freecom FHD-2 Pro / JMicron JM20316 + "0x07ab:0xfc(85|d[6a])", "", "", "-d usbjmicron" }, - // Fast Point Technologies (?) + // Fast Point Technologies { "USB: ; ", "0x0850:0x00(03|31)", "", // 0x0100 @@ -5260,6 +5747,12 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + { "USB: Toshiba; Sunplus", + "0x0930:0xa002", + "", // 0x0103 + "", + "-d usbsunplus" + }, // Lumberg, Inc. { "USB: Toshiba Stor.E; Sunplus", "0x0939:0x0b1[56]", @@ -5274,10 +5767,10 @@ const drive_settings builtin_knowndrives[] = { "-d sat,12" }, // Apricorn - { "USB: Apricorn SATA Wire; ", - "0x0984:0x0(040|301)", // 0x0040: Apricorn SATA Wire + { "USB: Apricorn; ", + "0x0984:0x0(040|301|320)", // 0x0040: Apricorn SATA Wire "", // 0x0301 (0x0201): Corsair SSD & HDD Cloning Kit - "", + "", // 0x0320 (0x0133): Apricorn EZ-UP3 (Initio INIC-3607) "-d sat" }, // Neodio Technologies @@ -5306,6 +5799,25 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + // Realtek + { "USB: ; Realtek RTL9210", // USB->PCIe (NVMe) + "0x0bda:0x9210", + "", // 0x2100 + "", + "-d sntrealtek" + }, + { "USB: ; Realtek RTL9211", // USB->PCIe (NVMe) or SATA + "0x(0bda|2eb9):0x9211", // 0x0bda: guessed, 0x2eb9: Sabrent EC-WPTF + ".*", // fall through to next entry and report ambiguous result + "", + "-d sntrealtek" // NVMe or ... + }, + { "USB: ; Realtek RTL9211", + "0x(0bda|2eb9):0x9211", + "", + "", + "" // ... SATA (unsupported) + }, // Addonics { "USB: Addonics HDMU3; ", // (ticket #609) "0x0bf6:0x1001", @@ -5389,6 +5901,13 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + // Netac Technology + { "USB: Netac Z Slim; ", + "0x0dd8:0x0562", + "", // 0x1101 + "", + "-d sat" + }, // Cowon Systems, Inc. { "USB: Cowon iAudio X5; ", "0x0e21:0x0510", @@ -5432,9 +5951,10 @@ const drive_settings builtin_knowndrives[] = { }, // ADATA { "USB: ADATA; ", - "0x125f:0xa(11|13|15|31|35|37|75)a", // 0xa11a: Classic CH11 1TB, 0xa13a: NH13 1TB, - "", // 0xa15a: HD710 1TB, 0xa31a: HV620 2TB (0x0100), 0xa35a: HD650 2TB (0x6503), - "", // 0xa37a: Silverstone MS10 M.2 (0x3103), 0xa75a: HD710P 4TB + "0x125f:0xa(1[135]|21|31|3[57]|68|7[56]|83)a", // 0xa11a: Classic CH11 1TB, 0xa13a: NH13 1TB, + "", // 0xa15a: HD710 1TB, 0xa21a: HV610 (0x4504), 0xa31a: HV620 2TB (0x0100), + "", // 0xa35a: HD650 2TB (0x6503), 0xa37a: Silverstone MS10 M.2 (0x3103), 0xa75a: HD710P 4TB, + // 0xa68a: SD600, 0xa76a: ED600 (0x0204), 0xa83a: HD330 (0x0100) "-d sat" }, { "USB: ADATA; Cypress", @@ -5515,7 +6035,7 @@ const drive_settings builtin_knowndrives[] = { }, { "USB: ; JMicron JMS578", // USB->SATA "0x152d:0x0578", - "", // 0x0100 + "", // 0x0100, 0x0204 "", "-d sat" }, @@ -5550,7 +6070,7 @@ const drive_settings builtin_knowndrives[] = { "-d sat" }, { "USB: ; JMicron JMS576", // USB3.1->SATA - "0x152d:0x1576", + "0x152d:0x[01]576", "", // 0x0204, ICY BOX IB-223U3a-B "", "-d sat" @@ -5599,10 +6119,16 @@ const drive_settings builtin_knowndrives[] = { }, { "USB: ; JMicron", // USB->SATA "0x152d:0x2509", - "", // 0x0100 + "0x0100", // old firmware "", "-d usbjmicron,x" }, + { "USB: ; JMicron", // USB->SATA + "0x152d:0x2509", + "0x0107", // newer firmware supports SAT + "", + "-d sat" + }, { "USB: ; JMicron JMS566", // USB3->SATA "0x152d:0x2566", // e.g. Chieftec CEB-7035S "", // 0x0114 @@ -5647,18 +6173,31 @@ const drive_settings builtin_knowndrives[] = { }, // PNY { "USB: ; PNY", - "0x154b:0x5678", - "", // 0x5408 + "0x154b:0x(5678|8001|f009)", + "", // 0x5678: 0x5408 "", "-d sat" }, // ASMedia + { "USB: ; ASMedia ASM236x", // USB->PCIe (NVMe) + "0x174c:0x236[24]", + "", + "", + "-d sntasmedia" + }, { "USB: ; ASMedia", "0x174c:0x....", "", "", "-d sat" }, + // ASMedia + { "USB: ; ASMedia ASM1352-PM", // USB3->2xSATA + "0x174d:0x1352", + "", // 0x0100 + "", + "-d sat" + }, // LucidPort { "USB: ; LucidPORT USB300", // RaidSonic ICY BOX IB-110StU3-B, Sharkoon SATA QuickPort H3 "0x1759:0x500[02]", // 0x5000: USB 2.0, 0x5002: USB 3.0 @@ -5691,7 +6230,7 @@ const drive_settings builtin_knowndrives[] = { "", "-d usbsunplus" }, - { "USB: Verbatim Pocket Hard Drive; JMicron", // SAMSUNG SpinPoint N3U-3 (USB, 4KiB LLS) + { "USB: Verbatim Pocket Hard Drive; JMicron", // SAMSUNG HS25YJZ/3AU10-01 "0x18a5:0x0227", "", "", @@ -5742,6 +6281,13 @@ const drive_settings builtin_knowndrives[] = { "", "-d usbsunplus" }, + // Kanguru Solutions + { "USB: ; ", // ICY BOX IB-256WP + "0x1e1d:0x20a0", + "", // 0x3203 + "", + "-d sat" // ATA output registers missing + }, // TrekStor { "USB: TrekStor DataStation; ", // DataStation maxi light (USB 3.0) "0x1e68:0x0050", @@ -5749,13 +6295,19 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, - // 0x1e91 (?) + // Other World Computing { "USB: OWC Envoy Pro; ", "0x1e91:0xa2a5", "", // 0x0100 "", "-d sat" }, + { "USB: OWC Mercury Elite Pro Quad; ", + "0x1e91:0xa4a7", + "", // 0x0100 + "", + "-d sat" + }, // Innostor { "USB: ; Innostor IS611", // USB3->SATA+PATA "0x1f75:0x0611", // SMART access via PATA does not work @@ -5776,6 +6328,12 @@ const drive_settings builtin_knowndrives[] = { "-d sat" }, // VIA Labs + { "USB: ; VIA VL700", // USB2/3->SATA + "0x2109:0x0700", // Diginote 2.5" USB-3.0 HDD enclosure 80000894 + "", // 0x0005 + "", + "-d sat,12" // ATA output registers missing + }, { "USB: ; VIA VL701", // USB2/3->SATA "0x2109:0x0701", // Intenso 2,5" 1TB USB3 "", // 0x0107 @@ -5788,8 +6346,8 @@ const drive_settings builtin_knowndrives[] = { "", // 0x0507, Intenso 2,5" Memory Case 2TB USB3 "-d sat" }, - { "USB: ; VIA VL715/6", // USB2/3->SATA, USB-C->SATA - "0x2109:0x071[56]", + { "USB: ; VIA VL715/6/7", // USB2/3->SATA, USB-C->SATA + "0x2109:0x071[567]", "", // 0x0336/0x0000 "", "-d sat" @@ -5801,13 +6359,21 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, - // 0x2537 (?) + // Norelsys { "USB: ; ", // USB 3.0 "0x2537:0x106[68]", // 0x1066: Orico 2599US3, 0x1068: Fantec ER-35U3 "", // 0x0100 "", "-d sat" }, + // InX8 / AKiTiO + { "USB: AkiTio NT2 U3.1C; ", + "0x2ce5:0x0014", + "", // 0x0100 + "", + "-d sat" + }, + // 0x2eb9 (?): See Realtek (0x0bda) above // Power Quotient International { "USB: PQI H560; ", "0x3538:0x0902", @@ -5824,10 +6390,10 @@ const drive_settings builtin_knowndrives[] = { }, // Sharkoon { "USB: Sharkoon QuickPort XT USB 3.0; ", - "0x357d:0x7788", - "", - "", - "-d sat" + "0x357d:0x7788", + "", + "", + "-d sat" }, // Hitachi/SimpleTech { "USB: Hitachi Touro Desk; JMicron", // 3TB @@ -5881,6 +6447,13 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, + // Other World Computing + { "USB: USB3 to SATA; ", + "0x7825:0xa2a4", + "", // 0x4101 + "", + "-d sat" + }, // JMicron II { "USB: ; JMicron JMS566", "0xa152:0xb566", @@ -5888,7 +6461,14 @@ const drive_settings builtin_knowndrives[] = { "", "-d sat" }, - // 0xabcd (?) + // 0xab12 (?) + { "USB: ; JMicron JMS578", + "0xab12:0x34cd", + "", // 0x0405 + "", + "-d sat" + }, + // Logilink { "USB: ; ", "0xabcd:0x610[34]", // 0x6103: LogiLink AU0028A V1.0 USB 3.0 to IDE & SATA Adapter // 0x6104: LogiLink PCCloneEX Lite diff --git a/SOURCES/smartmontools-7.2-logsuppagefix1.patch b/SOURCES/smartmontools-7.2-logsuppagefix1.patch new file mode 100644 index 0000000..769ddce --- /dev/null +++ b/SOURCES/smartmontools-7.2-logsuppagefix1.patch @@ -0,0 +1,85 @@ +From da45fc39390208c30b3ba656ccfb478e217b7401 Mon Sep 17 00:00:00 2001 +From: "Milan P. Gandhi" +Date: Mon, 17 Oct 2022 14:23:54 +0530 +Subject: [PATCH 1/3] scsiprint.cpp: Attempted fix to tickets 1272, 1331 and + 1346: Log sub-page handling + +--- + smartmontools-7.1/scsiprint.cpp | 27 +++++++++++++++++---------- + 1 file changed, 17 insertions(+), 10 deletions(-) + +diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp +index 4c52268..1edb7c2 100644 +--- a/smartmontools-7.1/scsiprint.cpp ++++ b/smartmontools-7.1/scsiprint.cpp +@@ -118,8 +118,10 @@ static void + scsiGetSupportedLogPages(scsi_device * device) + { + bool got_subpages = false; +- int k, bump, err, payload_len, num_unreported, num_unreported_spg; +- int payload_len_pg0_0 = 0; ++ int k, bump, err, resp_len, num_unreported, num_unreported_spg; ++ int resp_len_pg0_0 = 0; ++ int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported ++ * log pages _and_ log subpages */ + const uint8_t * up; + uint8_t sup_lpgs[LOG_RESP_LEN]; + +@@ -143,7 +145,7 @@ scsiGetSupportedLogPages(scsi_device * device) + (scsi_version <= SCSI_VERSION_HIGHEST)) { + /* unclear what code T10 will choose for SPC-6 */ + memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); +- payload_len_pg0_0 = sup_lpgs[3]; ++ resp_len_pg0_0 = sup_lpgs[3]; + if ((err = scsiLogSense(device, SUPPORTED_LPAGES, SUPP_SPAGE_L_SPAGE, + gBuf, LOG_RESP_LONG_LEN, + -1 /* just single not double fetch */))) { +@@ -160,33 +162,38 @@ scsiGetSupportedLogPages(scsi_device * device) + if (scsi_debugmode > 0) + pout("%s supported subpages is bad SPF=%u SUBPG=%u\n", + logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]); +- } else ++ } else { ++ resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2); + got_subpages = true; ++ } + } +- } else ++ } else { + memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); ++ resp_len_pg0_0 = sup_lpgs[3]; ++ } + + if (got_subpages) { +- payload_len = sg_get_unaligned_be16(gBuf + 2); +- if (payload_len <= payload_len_pg0_0) { ++ resp_len = sg_get_unaligned_be16(gBuf + 2); ++ if (resp_len_pg0_ff <= resp_len_pg0_0) { + /* something is rotten ....., ignore SUPP_SPAGE_L_SPAGE */ +- payload_len = payload_len_pg0_0; ++ resp_len = resp_len_pg0_0; + bump = 1; + up = sup_lpgs + LOGPAGEHDRSIZE; + got_subpages = false; + (void)got_subpages; // not yet used below, suppress warning + } else { ++ resp_len = resp_len_pg0_ff; + bump = 2; + up = gBuf + LOGPAGEHDRSIZE; + } + } else { +- payload_len = payload_len_pg0_0; ++ resp_len = resp_len_pg0_0; + bump = 1; + up = sup_lpgs + LOGPAGEHDRSIZE; + } + + num_unreported_spg = 0; +- for (num_unreported = 0, k = 0; k < payload_len; k += bump, up += bump) { ++ for (num_unreported = 0, k = 0; k < resp_len; k += bump, up += bump) { + uint8_t pg_num = 0x3f & up[0]; + uint8_t sub_pg_num = (0x40 & up[0]) ? up[1] : 0; + +-- +2.35.1 + diff --git a/SOURCES/smartmontools-7.2-logsuppagefix2.patch b/SOURCES/smartmontools-7.2-logsuppagefix2.patch new file mode 100644 index 0000000..409bb69 --- /dev/null +++ b/SOURCES/smartmontools-7.2-logsuppagefix2.patch @@ -0,0 +1,185 @@ +From b6064d5ba30ee355e71e7543fdb66ea99fcebae4 Mon Sep 17 00:00:00 2001 +From: "Milan P. Gandhi" +Date: Mon, 17 Oct 2022 14:24:42 +0530 +Subject: [PATCH 2/3] scsiprint.cpp: Add 'Accumulated power on time' field to + 'smartctl -a' + +--- + smartmontools-7.1/scsiprint.cpp | 82 ++++++++++++++++++++++----------- + 1 file changed, 56 insertions(+), 26 deletions(-) + +diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp +index 1edb7c2..81bed88 100644 +--- a/smartmontools-7.1/scsiprint.cpp ++++ b/smartmontools-7.1/scsiprint.cpp +@@ -120,7 +120,7 @@ scsiGetSupportedLogPages(scsi_device * device) + bool got_subpages = false; + int k, bump, err, resp_len, num_unreported, num_unreported_spg; + int resp_len_pg0_0 = 0; +- int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported ++ int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported + * log pages _and_ log subpages */ + const uint8_t * up; + uint8_t sup_lpgs[LOG_RESP_LEN]; +@@ -163,13 +163,13 @@ scsiGetSupportedLogPages(scsi_device * device) + pout("%s supported subpages is bad SPF=%u SUBPG=%u\n", + logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]); + } else { +- resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2); ++ resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2); + got_subpages = true; +- } ++ } + } + } else { + memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); +- resp_len_pg0_0 = sup_lpgs[3]; ++ resp_len_pg0_0 = sup_lpgs[3]; + } + + if (got_subpages) { +@@ -182,7 +182,7 @@ scsiGetSupportedLogPages(scsi_device * device) + got_subpages = false; + (void)got_subpages; // not yet used below, suppress warning + } else { +- resp_len = resp_len_pg0_ff; ++ resp_len = resp_len_pg0_ff; + bump = 2; + up = gBuf + LOGPAGEHDRSIZE; + } +@@ -1162,12 +1162,14 @@ static const char * reassign_status[] = { + // Returns 0 if ok else FAIL* bitmask. Note can have a status entry + // and up to 2048 events (although would hope to have less). May set + // FAILLOG if serious errors detected (in the future). ++// When only_pow_time is true only print "Accumulated power on time" ++// data, if available. + static int +-scsiPrintBackgroundResults(scsi_device * device) ++scsiPrintBackgroundResults(scsi_device * device, bool only_pow_time) + { ++ bool noheader = true; ++ bool firstresult = true; + int num, j, m, err, truncated; +- int noheader = 1; +- int firstresult = 1; + int retval = 0; + uint8_t * ucp; + static const char * hname = "Background scan results"; +@@ -1188,9 +1190,12 @@ scsiPrintBackgroundResults(scsi_device * device) + // compute page length + num = sg_get_unaligned_be16(gBuf + 2) + 4; + if (num < 20) { +- print_on(); +- pout("%s %s length is %d, no scan status\n", hname, logSenStr, num); +- print_off(); ++ if (! only_pow_time) { ++ print_on(); ++ pout("%s %s length is %d, no scan status\n", hname, logSenStr, ++ num); ++ print_off(); ++ } + return FAILSMART; + } + truncated = (num > LOG_RESP_LONG_LEN) ? num : 0; +@@ -1205,22 +1210,32 @@ scsiPrintBackgroundResults(scsi_device * device) + switch (pc) { + case 0: + if (noheader) { +- noheader = 0; +- pout("%s log\n", hname); ++ noheader = false; ++ if (! only_pow_time) ++ pout("%s log\n", hname); + } +- pout(" Status: "); ++ if (! only_pow_time) ++ pout(" Status: "); + if ((pl < 16) || (num < 16)) { +- pout("\n"); ++ if (! only_pow_time) ++ pout("\n"); + break; + } + j = ucp[9]; +- if (j < (int)(sizeof(bms_status) / sizeof(bms_status[0]))) +- pout("%s\n", bms_status[j]); +- else +- pout("unknown [0x%x] background scan status value\n", j); ++ if (! only_pow_time) { ++ if (j < (int)(sizeof(bms_status) / sizeof(bms_status[0]))) ++ pout("%s\n", bms_status[j]); ++ else ++ pout("unknown [0x%x] background scan status value\n", j); ++ } + j = sg_get_unaligned_be32(ucp + 4); +- pout(" Accumulated power on time, hours:minutes %d:%02d " +- "[%d minutes]\n", (j / 60), (j % 60), j); ++ pout("%sAccumulated power on time, hours:minutes %d:%02d", ++ (only_pow_time ? "" : " "), (j / 60), (j % 60)); ++ if (only_pow_time) { ++ pout("\n"); ++ break; ++ } else ++ pout(" [%d minutes]\n", j); + jglb["power_on_time"]["hours"] = j / 60; + jglb["power_on_time"]["minutes"] = j % 60; + pout(" Number of background scans performed: %d, ", +@@ -1232,9 +1247,12 @@ scsiPrintBackgroundResults(scsi_device * device) + break; + default: + if (noheader) { +- noheader = 0; +- pout("\n%s log\n", hname); ++ noheader = false; ++ if (! only_pow_time) ++ pout("\n%s log\n", hname); + } ++ if (only_pow_time) ++ break; + if (firstresult) { + firstresult = 0; + pout("\n # when lba(hex) [sk,asc,ascq] " +@@ -1262,10 +1280,11 @@ scsiPrintBackgroundResults(scsi_device * device) + num -= pl; + ucp += pl; + } +- if (truncated) ++ if (truncated && (! only_pow_time)) + pout(" >>>> log truncated, fetched %d of %d available " + "bytes\n", LOG_RESP_LONG_LEN, truncated); +- pout("\n"); ++ if (! only_pow_time) ++ pout("\n"); + return retval; + } + +@@ -2447,6 +2466,17 @@ scsiPrintMain(scsi_device * device, const scsi_print_options & options) + scsiGetSupportedLogPages(device); + if (gTempLPage) + scsiPrintTemp(device); ++ } ++ // in the 'smartctl -a" case only want: "Accumulated power on time" ++ if ((! options.smart_background_log) && is_disk) { ++ if (! checkedSupportedLogPages) ++ scsiGetSupportedLogPages(device); ++ res = 0; ++ if (gBackgroundResultsLPage) ++ res = scsiPrintBackgroundResults(device, true); ++ any_output = true; ++ } ++ if (options.smart_vendor_attrib) { + if (gStartStopLPage) + scsiGetStartStopData(device); + if (is_disk) { +@@ -2488,7 +2518,7 @@ scsiPrintMain(scsi_device * device, const scsi_print_options & options) + scsiGetSupportedLogPages(device); + res = 0; + if (gBackgroundResultsLPage) +- res = scsiPrintBackgroundResults(device); ++ res = scsiPrintBackgroundResults(device, false); + else { + pout("Device does not support Background scan results logging\n"); + failuretest(OPTIONAL_CMD, returnval|=FAILSMART); +-- +2.35.1 + diff --git a/SOURCES/smartmontools-7.2-logsuppagefix3.patch b/SOURCES/smartmontools-7.2-logsuppagefix3.patch new file mode 100644 index 0000000..5dc4728 --- /dev/null +++ b/SOURCES/smartmontools-7.2-logsuppagefix3.patch @@ -0,0 +1,231 @@ +From 7c207dd5d06efccdee7258f832d4216fe5d1d998 Mon Sep 17 00:00:00 2001 +From: "Milan P. Gandhi" +Date: Mon, 17 Oct 2022 14:25:34 +0530 +Subject: [PATCH 3/3] scsiprint.cpp: applied patch proposed by Yannick Hemery + to merge both 'supported' log pages + +--- + smartmontools-7.1/scsicmds.h | 5 ++ + smartmontools-7.1/scsiprint.cpp | 103 +++++++++++++++++--------------- + 2 files changed, 59 insertions(+), 49 deletions(-) + +diff --git a/smartmontools-7.1/scsicmds.h b/smartmontools-7.1/scsicmds.h +index 516f773..9bd8b21 100644 +--- a/smartmontools-7.1/scsicmds.h ++++ b/smartmontools-7.1/scsicmds.h +@@ -167,6 +167,11 @@ struct scsi_readcap_resp { + uint16_t l_a_lba; /* Lowest Aligned Logical Block Address */ + }; + ++struct scsi_supp_log_pages { ++ uint8_t page_code; ++ uint8_t subpage_code; ++}; ++ + /* SCSI Peripheral types (of interest) */ + #define SCSI_PT_DIRECT_ACCESS 0x0 + #define SCSI_PT_SEQUENTIAL_ACCESS 0x1 +diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp +index 81bed88..21a4929 100644 +--- a/smartmontools-7.1/scsiprint.cpp ++++ b/smartmontools-7.1/scsiprint.cpp +@@ -39,6 +39,9 @@ uint8_t gBuf[GBUF_SIZE]; + #define LOG_RESP_LONG_LEN ((62 * 256) + 252) + #define LOG_RESP_TAPE_ALERT_LEN 0x144 + ++/* Supported log pages + Supported log pages and subpages maximum count */ ++#define SCSI_SUPP_LOG_PAGES_MAX_COUNT (252 + (62 * 128) + 126) ++ + /* Log pages supported */ + static bool gSmartLPage = false; /* Informational Exceptions log page */ + static bool gTempLPage = false; +@@ -118,14 +121,17 @@ static void + scsiGetSupportedLogPages(scsi_device * device) + { + bool got_subpages = false; +- int k, bump, err, resp_len, num_unreported, num_unreported_spg; +- int resp_len_pg0_0 = 0; +- int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported +- * log pages _and_ log subpages */ ++ int k, err, resp_len, num_unreported, num_unreported_spg; ++ int supp_lpg_and_spg_count = 0; ++ + const uint8_t * up; + uint8_t sup_lpgs[LOG_RESP_LEN]; ++ struct scsi_supp_log_pages supp_lpg_and_spg[SCSI_SUPP_LOG_PAGES_MAX_COUNT]; + + memset(gBuf, 0, LOG_RESP_LEN); ++ memset(supp_lpg_and_spg, 0, sizeof(supp_lpg_and_spg)); ++ ++ /* Get supported log pages */ + if ((err = scsiLogSense(device, SUPPORTED_LPAGES, 0, gBuf, + LOG_RESP_LEN, 0 /* do double fetch */))) { + if (scsi_debugmode > 0) +@@ -140,12 +146,23 @@ scsiGetSupportedLogPages(scsi_device * device) + logSenStr, scsiErrString(err)); + if (err) + return; +- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); +- } else if ((scsi_version >= SCSI_VERSION_SPC_4) && +- (scsi_version <= SCSI_VERSION_HIGHEST)) { ++ } ++ ++ memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); ++ resp_len = gBuf[3]; ++ up = gBuf + LOGPAGEHDRSIZE; ++ ++ for (k = 0; k < resp_len; k += 1) { ++ uint8_t page_code = 0x3f & up[k]; ++ supp_lpg_and_spg[supp_lpg_and_spg_count++] = {page_code, 0}; ++ } ++ ++ /* Get supported log pages and subpages. Most drives seems to include the ++ supported log pages here as well, but some drives such as the Samsung ++ PM1643a will only report the additional log pages with subpages here */ ++ if ((scsi_version >= SCSI_VERSION_SPC_4) && ++ (scsi_version <= SCSI_VERSION_HIGHEST)) { + /* unclear what code T10 will choose for SPC-6 */ +- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); +- resp_len_pg0_0 = sup_lpgs[3]; + if ((err = scsiLogSense(device, SUPPORTED_LPAGES, SUPP_SPAGE_L_SPAGE, + gBuf, LOG_RESP_LONG_LEN, + -1 /* just single not double fetch */))) { +@@ -153,6 +170,7 @@ scsiGetSupportedLogPages(scsi_device * device) + pout("%s for supported pages and subpages failed [%s]\n", + logSenStr, scsiErrString(err)); + } else { ++ /* Ensure we didn't get the same answer than without the subpages */ + if (0 == memcmp(gBuf, sup_lpgs, LOG_RESP_LEN)) { + if (scsi_debugmode > 0) + pout("%s: %s ignored subpage field, bad\n", +@@ -163,48 +181,34 @@ scsiGetSupportedLogPages(scsi_device * device) + pout("%s supported subpages is bad SPF=%u SUBPG=%u\n", + logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]); + } else { +- resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2); + got_subpages = true; + } + } +- } else { +- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN); +- resp_len_pg0_0 = sup_lpgs[3]; + } + + if (got_subpages) { + resp_len = sg_get_unaligned_be16(gBuf + 2); +- if (resp_len_pg0_ff <= resp_len_pg0_0) { +- /* something is rotten ....., ignore SUPP_SPAGE_L_SPAGE */ +- resp_len = resp_len_pg0_0; +- bump = 1; +- up = sup_lpgs + LOGPAGEHDRSIZE; +- got_subpages = false; +- (void)got_subpages; // not yet used below, suppress warning +- } else { +- resp_len = resp_len_pg0_ff; +- bump = 2; +- up = gBuf + LOGPAGEHDRSIZE; ++ up = gBuf + LOGPAGEHDRSIZE; ++ for (k = 0; k < resp_len; k += 2) { ++ uint8_t page_code = 0x3f & up[k]; ++ uint8_t subpage_code = up[k+1]; ++ supp_lpg_and_spg[supp_lpg_and_spg_count++] = {page_code, subpage_code}; + } +- } else { +- resp_len = resp_len_pg0_0; +- bump = 1; +- up = sup_lpgs + LOGPAGEHDRSIZE; + } + ++ num_unreported = 0; + num_unreported_spg = 0; +- for (num_unreported = 0, k = 0; k < resp_len; k += bump, up += bump) { +- uint8_t pg_num = 0x3f & up[0]; +- uint8_t sub_pg_num = (0x40 & up[0]) ? up[1] : 0; ++ for (k = 0; k < supp_lpg_and_spg_count; k += 1) { ++ struct scsi_supp_log_pages supp_lpg = supp_lpg_and_spg[k]; + +- switch (pg_num) ++ switch (supp_lpg.page_code) + { + case SUPPORTED_LPAGES: +- if (! ((NO_SUBPAGE_L_SPAGE == sub_pg_num) || +- (SUPP_SPAGE_L_SPAGE == sub_pg_num))) { ++ if (! ((NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code) || ++ (SUPP_SPAGE_L_SPAGE == supp_lpg.subpage_code))) { + if (scsi_debugmode > 1) + pout("%s: Strange Log page number: 0x0,0x%x\n", +- __func__, sub_pg_num); ++ __func__, supp_lpg.subpage_code); + } + break; + case READ_ERROR_COUNTER_LPAGE: +@@ -223,13 +227,13 @@ scsiGetSupportedLogPages(scsi_device * device) + gNonMediumELPage = true; + break; + case TEMPERATURE_LPAGE: +- if (NO_SUBPAGE_L_SPAGE == sub_pg_num) ++ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code) + gTempLPage = true; +- else if (ENVIRO_REP_L_SPAGE == sub_pg_num) ++ else if (ENVIRO_REP_L_SPAGE == supp_lpg.subpage_code) + gEnviroReportingLPage = true; +- else if (ENVIRO_LIMITS_L_SPAGE == sub_pg_num) ++ else if (ENVIRO_LIMITS_L_SPAGE == supp_lpg.subpage_code) + gEnviroLimitsLPage = true; +- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) { ++ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) { + ++num_unreported; + ++num_unreported_spg; + } +@@ -238,11 +242,11 @@ scsiGetSupportedLogPages(scsi_device * device) + reporting of ,0xff so it is not an error. */ + break; + case STARTSTOP_CYCLE_COUNTER_LPAGE: +- if (NO_SUBPAGE_L_SPAGE == sub_pg_num) ++ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code) + gStartStopLPage = true; +- else if (UTILIZATION_L_SPAGE == sub_pg_num) ++ else if (UTILIZATION_L_SPAGE == supp_lpg.subpage_code) + gUtilizationLPage = true; +- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) { ++ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) { + ++num_unreported; + ++num_unreported_spg; + } +@@ -254,15 +258,15 @@ scsiGetSupportedLogPages(scsi_device * device) + gSmartLPage = true; + break; + case BACKGROUND_RESULTS_LPAGE: +- if (NO_SUBPAGE_L_SPAGE == sub_pg_num) ++ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code) + gBackgroundResultsLPage = true; +- else if (PEND_DEFECTS_L_SPAGE == sub_pg_num) ++ else if (PEND_DEFECTS_L_SPAGE == supp_lpg.subpage_code) + gPendDefectsLPage = true; +- else if (BACKGROUND_OP_L_SPAGE == sub_pg_num) ++ else if (BACKGROUND_OP_L_SPAGE == supp_lpg.subpage_code) + gBackgroundOpLPage = true; +- else if (LPS_MISALIGN_L_SPAGE == sub_pg_num) ++ else if (LPS_MISALIGN_L_SPAGE == supp_lpg.subpage_code) + gLPSMisalignLPage = true; +- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) { ++ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) { + ++num_unreported; + ++num_unreported_spg; + } +@@ -296,9 +300,10 @@ scsiGetSupportedLogPages(scsi_device * device) + gSeagateFactoryLPage = true; + break; + default: +- if (pg_num < 0x30) { /* don't count VS pages */ ++ if (supp_lpg.page_code < 0x30) { /* don't count VS pages */ + ++num_unreported; +- if ((sub_pg_num > 0) && (SUPP_SPAGE_L_SPAGE != sub_pg_num)) ++ if ((supp_lpg.subpage_code > 0) && ++ (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code)) + ++num_unreported_spg; + } + break; +-- +2.35.1 + diff --git a/SOURCES/smartmontools-7.2-logsuppagefix4.patch b/SOURCES/smartmontools-7.2-logsuppagefix4.patch new file mode 100644 index 0000000..e363f2b --- /dev/null +++ b/SOURCES/smartmontools-7.2-logsuppagefix4.patch @@ -0,0 +1,31 @@ +Index: trunk/smartmontools/scsiprint.cpp +=================================================================== +--- smartmontools/scsiprint.cpp (revision 5076) ++++ smartmontools/scsiprint.cpp (revision 5090) +@@ -2340,6 +2340,6 @@ + !wce ? "Disabled" : "Enabled"); + } +- } else + any_output = true; ++ } + + if (options.drive_info) +@@ -2463,12 +2463,10 @@ + if (gTempLPage) + scsiPrintTemp(device); +- } +- // in the 'smartctl -a" case only want: "Accumulated power on time" +- if ((! options.smart_background_log) && is_disk) { +- if (! checkedSupportedLogPages) +- scsiGetSupportedLogPages(device); +- res = 0; +- if (gBackgroundResultsLPage) +- res = scsiPrintBackgroundResults(device, true); ++ // in the 'smartctl -A' case only want: "Accumulated power on time" ++ if ((! options.smart_background_log) && is_disk) { ++ res = 0; ++ if (gBackgroundResultsLPage) ++ res = scsiPrintBackgroundResults(device, true); ++ } + any_output = true; + } diff --git a/SOURCES/smartmontools-7.4-r5121.patch b/SOURCES/smartmontools-7.4-r5121.patch new file mode 100644 index 0000000..4a098e6 --- /dev/null +++ b/SOURCES/smartmontools-7.4-r5121.patch @@ -0,0 +1,200 @@ +diff -up smartmontools-7.1/nvmecmds.cpp.r5121 smartmontools-7.1/nvmecmds.cpp +--- smartmontools-7.1/nvmecmds.cpp.r5121 2019-07-01 22:54:14.000000000 +0200 ++++ smartmontools-7.1/nvmecmds.cpp 2023-11-22 12:56:02.927324622 +0100 +@@ -3,7 +3,7 @@ + * + * Home page of code is: https://www.smartmontools.org + * +- * Copyright (C) 2016-19 Christian Franke ++ * Copyright (C) 2016-20 Christian Franke + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +@@ -132,6 +132,7 @@ bool nvme_read_id_ctrl(nvme_device * dev + swapx(&id_ctrl.vid); + swapx(&id_ctrl.ssvid); + swapx(&id_ctrl.cntlid); ++ swapx(&id_ctrl.ver); + swapx(&id_ctrl.oacs); + swapx(&id_ctrl.wctemp); + swapx(&id_ctrl.cctemp); +@@ -181,30 +182,54 @@ bool nvme_read_id_ns(nvme_device * devic + return true; + } + +-// Read NVMe log page with identifier LID. +-bool nvme_read_log_page(nvme_device * device, unsigned char lid, void * data, +- unsigned size, bool broadcast_nsid) ++static bool nvme_read_log_page_1(nvme_device * device, unsigned nsid, ++ unsigned char lid, void * data, unsigned size, unsigned offset = 0) + { +- if (!(4 <= size && size <= 0x4000 && (size % 4) == 0)) +- throw std::logic_error("nvme_read_log_page(): invalid size"); ++ if (!(4 <= size && size <= 0x1000 && !(size % 4) && !(offset % 4))) ++ return device->set_err(EINVAL, "Invalid NVMe log size %u or offset %u", size, offset); + + memset(data, 0, size); + nvme_cmd_in in; + in.set_data_in(nvme_admin_get_log_page, data, size); +- in.nsid = broadcast_nsid ? 0xffffffff : device->get_nsid(); ++ in.nsid = nsid; + in.cdw10 = lid | (((size / 4) - 1) << 16); ++ in.cdw12 = offset; // LPOL, NVMe 1.2.1 + + return nvme_pass_through(device, in); + } + ++// Read NVMe log page with identifier LID. ++unsigned nvme_read_log_page(nvme_device * device, unsigned nsid, unsigned char lid, ++ void * data, unsigned size, bool nvme_121, unsigned offset /* = 0 */) ++{ ++ unsigned n, bs; ++ for (n = 0; n < size; n += bs) { ++ if (!nvme_121 && offset + n > 0) { ++ device->set_err(ENOSYS, "Log Page Offset requires NVMe >= 1.2.1"); ++ break; ++ } ++ ++ // Limit transfer size to one page to avoid problems with ++ // limits of NVMe pass-through layer or too low MDTS values. ++ bs = size - n; ++ if (bs > 0x1000) ++ bs = 0x1000; ++ if (!nvme_read_log_page_1(device, nsid, lid, (char *)data + n, bs, offset + n)) ++ break; ++ } ++ ++ return n; ++} ++ + // Read NVMe Error Information Log. +-bool nvme_read_error_log(nvme_device * device, nvme_error_log_page * error_log, unsigned num_entries) ++unsigned nvme_read_error_log(nvme_device * device, nvme_error_log_page * error_log, ++ unsigned num_entries, bool nvme_121) + { +- if (!nvme_read_log_page(device, 0x01, error_log, num_entries * sizeof(*error_log), true)) +- return false; ++ unsigned n = nvme_read_log_page(device, 0xffffffff, 0x01, error_log, ++ num_entries * sizeof(*error_log), nvme_121); + + if (isbigendian()) { +- for (unsigned i = 0; i < num_entries; i++) { ++ for (unsigned i = 0; i < n; i++) { + swapx(&error_log[i].error_count); + swapx(&error_log[i].sqid); + swapx(&error_log[i].cmdid); +@@ -215,13 +240,13 @@ bool nvme_read_error_log(nvme_device * d + } + } + +- return true; ++ return n / sizeof(*error_log); + } + + // Read NVMe SMART/Health Information log. + bool nvme_read_smart_log(nvme_device * device, nvme_smart_log & smart_log) + { +- if (!nvme_read_log_page(device, 0x02, &smart_log, sizeof(smart_log), true)) ++ if (!nvme_read_log_page_1(device, 0xffffffff, 0x02, &smart_log, sizeof(smart_log))) + return false; + + if (isbigendian()) { +diff -up smartmontools-7.1/nvmecmds.h.r5121 smartmontools-7.1/nvmecmds.h +--- smartmontools-7.1/nvmecmds.h.r5121 2019-07-01 22:54:14.000000000 +0200 ++++ smartmontools-7.1/nvmecmds.h 2023-11-22 12:56:02.927324622 +0100 +@@ -3,7 +3,7 @@ + * + * Home page of code is: https://www.smartmontools.org + * +- * Copyright (C) 2016-19 Christian Franke ++ * Copyright (C) 2016-20 Christian Franke + * + * Original code from : + * Copyright (C) 2011-2014 Intel Corporation +@@ -236,12 +236,12 @@ bool nvme_read_id_ctrl(nvme_device * dev + bool nvme_read_id_ns(nvme_device * device, unsigned nsid, smartmontools::nvme_id_ns & id_ns); + + // Read NVMe log page with identifier LID. +-bool nvme_read_log_page(nvme_device * device, unsigned char lid, void * data, +- unsigned size, bool broadcast_nsid); ++unsigned nvme_read_log_page(nvme_device * device, unsigned nsid, unsigned char lid, ++ void * data, unsigned size, bool nvme_121, unsigned offset = 0); + + // Read NVMe Error Information Log. +-bool nvme_read_error_log(nvme_device * device, smartmontools::nvme_error_log_page * error_log, +- unsigned num_entries); ++unsigned nvme_read_error_log(nvme_device * device, smartmontools::nvme_error_log_page * error_log, ++ unsigned num_entries, bool nvme_121); + + // Read NVMe SMART/Health Information log. + bool nvme_read_smart_log(nvme_device * device, smartmontools::nvme_smart_log & smart_log); +diff -up smartmontools-7.1/nvmeprint.cpp.r5121 smartmontools-7.1/nvmeprint.cpp +--- smartmontools-7.1/nvmeprint.cpp.r5121 2023-11-22 12:56:02.927324622 +0100 ++++ smartmontools-7.1/nvmeprint.cpp 2023-11-22 13:00:34.472659814 +0100 +@@ -524,6 +524,9 @@ int nvmePrintMain(nvme_device * device, + } + } + ++ // Log Page Offset requires NVMe >= 1.2.1 ++ bool nvme_121 = (id_ctrl.ver >= 0x10201); ++ + // Print Error Information Log + if (options.error_log_entries) { + unsigned num_entries = id_ctrl.elpe + 1; // 0-based value +@@ -531,39 +534,47 @@ int nvmePrintMain(nvme_device * device, + nvme_error_log_page * error_log = + reinterpret_cast(error_log_buf.data()); + +- if (!nvme_read_error_log(device, error_log, num_entries)) { ++ unsigned read_entries = nvme_read_error_log(device, error_log, num_entries, nvme_121); ++ if (!read_entries) { + jerr("Read Error Information Log failed: %s\n\n", device->get_errmsg()); + return retval | FAILSMART; + } ++ if (read_entries < num_entries) ++ jerr("Read Error Information Log failed, %u entries missing: %s\n", ++ num_entries - read_entries, device->get_errmsg()); + +- print_error_log(error_log, num_entries, options.error_log_entries); ++ print_error_log(error_log, read_entries, options.error_log_entries); + } + + // Dump log page + if (options.log_page_size) { + // Align size to dword boundary + unsigned size = ((options.log_page_size + 4-1) / 4) * 4; +- bool broadcast_nsid; + raw_buffer log_buf(size); + ++ unsigned nsid; + switch (options.log_page) { + case 1: + case 2: + case 3: +- broadcast_nsid = true; ++ nsid = 0xffffffff; + break; + default: +- broadcast_nsid = false; ++ nsid = device->get_nsid(); + break; + } +- if (!nvme_read_log_page(device, options.log_page, log_buf.data(), +- size, broadcast_nsid)) { ++ unsigned read_bytes = nvme_read_log_page(device, nsid, options.log_page, log_buf.data(), ++ size, nvme_121); ++ if (!read_bytes) { + jerr("Read NVMe Log 0x%02x failed: %s\n\n", options.log_page, device->get_errmsg()); + return retval | FAILSMART; + } ++ if (read_bytes < size) ++ jerr("Read NVMe Log 0x%02x failed, 0x%x bytes missing: %s\n", ++ options.log_page, size - read_bytes, device->get_errmsg()); + +- pout("NVMe Log 0x%02x (0x%04x bytes)\n", options.log_page, size); +- dStrHex(log_buf.data(), size, 0); ++ pout("NVMe Log 0x%02x (0x%04x bytes)\n", options.log_page, read_bytes); ++ dStrHex(log_buf.data(), read_bytes, 0); + pout("\n"); + } + diff --git a/SOURCES/smartmontools-7.4-r5471.patch b/SOURCES/smartmontools-7.4-r5471.patch new file mode 100644 index 0000000..ad38c76 --- /dev/null +++ b/SOURCES/smartmontools-7.4-r5471.patch @@ -0,0 +1,312 @@ +diff -up smartmontools-7.1/dev_interface.cpp.r5471 smartmontools-7.1/dev_interface.cpp +--- smartmontools-7.1/dev_interface.cpp.r5471 2019-11-24 19:19:24.000000000 +0100 ++++ smartmontools-7.1/dev_interface.cpp 2023-11-22 14:07:37.647756091 +0100 +@@ -15,6 +15,7 @@ + #include "dev_tunnelled.h" + #include "atacmds.h" // ATA_SMART_CMD/STATUS + #include "scsicmds.h" // scsi_cmnd_io ++#include "nvmecmds.h" // nvme_status_*() + #include "utility.h" + + #include +@@ -235,12 +236,11 @@ bool scsi_device::scsi_pass_through_and_ + + bool nvme_device::set_nvme_err(nvme_cmd_out & out, unsigned status, const char * msg /* = 0 */) + { +- if (!status) +- throw std::logic_error("nvme_device: set_nvme_err() called with status=0"); +- + out.status = status; + out.status_valid = true; +- return set_err(EIO, "%sNVMe Status 0x%02x", (msg ? msg : ""), status); ++ char buf[64]; ++ return set_err(nvme_status_to_errno(status), "%s%s (0x%03x)", (msg ? msg : ""), ++ nvme_status_to_info_str(buf, status), status); + } + + +diff -up smartmontools-7.1/nvmecmds.cpp.r5471 smartmontools-7.1/nvmecmds.cpp +--- smartmontools-7.1/nvmecmds.cpp.r5471 2023-11-22 14:07:37.646756079 +0100 ++++ smartmontools-7.1/nvmecmds.cpp 2023-11-22 14:07:37.648756102 +0100 +@@ -258,3 +258,221 @@ bool nvme_read_smart_log(nvme_device * d + + return true; + } ++ ++// Return flagged error message for NVMe status SCT/SC fields or nullptr if unknown. ++// If message starts with '-', the status indicates an invalid command (EINVAL). ++static const char * nvme_status_to_flagged_str(uint16_t status) ++{ ++ // Section 3.3.3.2.1 of NVM Express Base Specification Revision 2.0c, October 4, 2022 ++ uint8_t sc = (uint8_t)status; ++ switch ((status >> 8) & 0x7) { ++ case 0x0: // Generic Command Status ++ if (sc < 0x80) switch (sc) { ++ case 0x00: return "Successful Completion"; ++ case 0x01: return "-Invalid Command Opcode"; ++ case 0x02: return "-Invalid Field in Command"; ++ case 0x03: return "Command ID Conflict"; ++ case 0x04: return "Data Transfer Error"; ++ case 0x05: return "Commands Aborted due to Power Loss Notification"; ++ case 0x06: return "Internal Error"; ++ case 0x07: return "Command Abort Requested"; ++ case 0x08: return "Command Aborted due to SQ Deletion"; ++ case 0x09: return "Command Aborted due to Failed Fused Command"; ++ case 0x0a: return "Command Aborted due to Missing Fused Command"; ++ case 0x0b: return "-Invalid Namespace or Format"; ++ case 0x0c: return "Command Sequence Error"; ++ case 0x0d: return "-Invalid SGL Segment Descriptor"; ++ case 0x0e: return "-Invalid Number of SGL Descriptors"; ++ case 0x0f: return "-Data SGL Length Invalid"; ++ case 0x10: return "-Metadata SGL Length Invalid"; ++ case 0x11: return "-SGL Descriptor Type Invalid"; ++ case 0x12: return "-Invalid Use of Controller Memory Buffer"; ++ case 0x13: return "-PRP Offset Invalid"; ++ case 0x14: return "Atomic Write Unit Exceeded"; ++ case 0x15: return "Operation Denied"; ++ case 0x16: return "-SGL Offset Invalid"; ++ case 0x18: return "Host Identifier Inconsistent Format"; ++ case 0x19: return "Keep Alive Timer Expired"; ++ case 0x1a: return "-Keep Alive Timeout Invalid"; ++ case 0x1b: return "Command Aborted due to Preempt and Abort"; ++ case 0x1c: return "Sanitize Failed"; ++ case 0x1d: return "Sanitize In Progress"; ++ case 0x1e: return "SGL Data Block Granularity Invalid"; ++ case 0x1f: return "Command Not Supported for Queue in CMB"; ++ case 0x20: return "Namespace is Write Protected"; ++ case 0x21: return "Command Interrupted"; ++ case 0x22: return "Transient Transport Error"; ++ case 0x23: return "Command Prohibited by Command and Feature Lockdown"; ++ case 0x24: return "Admin Command Media Not Ready"; ++ // 0x25-0x7f: Reserved ++ } ++ else switch (sc) { ++ // 0x80-0xbf: I/O Command Set Specific ++ case 0x80: return "LBA Out of Range"; ++ case 0x81: return "Capacity Exceeded"; ++ case 0x82: return "Namespace Not Ready"; ++ case 0x83: return "Reservation Conflict"; ++ case 0x84: return "Format In Progress"; ++ case 0x85: return "-Invalid Value Size"; ++ case 0x86: return "-Invalid Key Size"; ++ case 0x87: return "KV Key Does Not Exist"; ++ case 0x88: return "Unrecovered Error"; ++ case 0x89: return "Key Exists"; ++ // 0x90-0xbf: Reserved ++ // 0xc0-0xff: Vendor Specific ++ } ++ break; ++ ++ case 0x1: // Command Specific Status ++ if (sc < 0x80) switch (sc) { ++ case 0x00: return "-Completion Queue Invalid"; ++ case 0x01: return "-Invalid Queue Identifier"; ++ case 0x02: return "-Invalid Queue Size"; ++ case 0x03: return "Abort Command Limit Exceeded"; ++ case 0x04: return "Abort Command Is Missing"; ++ case 0x05: return "Asynchronous Event Request Limit Exceeded"; ++ case 0x06: return "-Invalid Firmware Slot"; ++ case 0x07: return "-Invalid Firmware Image"; ++ case 0x08: return "-Invalid Interrupt Vector"; ++ case 0x09: return "-Invalid Log Page"; ++ case 0x0a: return "-Invalid Format"; ++ case 0x0b: return "Firmware Activation Requires Conventional Reset"; ++ case 0x0c: return "-Invalid Queue Deletion"; ++ case 0x0d: return "Feature Identifier Not Saveable"; ++ case 0x0e: return "Feature Not Changeable"; ++ case 0x0f: return "Feature Not Namespace Specific"; ++ case 0x10: return "Firmware Activation Requires NVM Subsystem Reset"; ++ case 0x11: return "Firmware Activation Requires Controller Level Reset"; ++ case 0x12: return "Firmware Activation Requires Maximum Time Violation"; ++ case 0x13: return "Firmware Activation Prohibited"; ++ case 0x14: return "Overlapping Range"; ++ case 0x15: return "Namespace Insufficient Capacity"; ++ case 0x16: return "-Namespace Identifier Unavailable"; ++ case 0x18: return "Namespace Already Attached"; ++ case 0x19: return "Namespace Is Private"; ++ case 0x1a: return "Namespace Not Attached"; ++ case 0x1b: return "Thin Provisioning Not Supported"; ++ case 0x1c: return "-Controller List Invalid"; ++ case 0x1d: return "Device Self-test In Progress"; ++ case 0x1e: return "Boot Partition Write Prohibited"; ++ case 0x1f: return "Invalid Controller Identifier"; ++ case 0x20: return "-Invalid Secondary Controller State"; ++ case 0x21: return "-Invalid Number of Controller Resources"; ++ case 0x22: return "-Invalid Resource Identifier"; ++ case 0x23: return "Sanitize Prohibited While Persistent Memory Region is Enabled"; ++ case 0x24: return "-ANA Group Identifier Invalid"; ++ case 0x25: return "ANA Attach Failed"; ++ case 0x26: return "Insufficient Capacity"; ++ case 0x27: return "Namespace Attachment Limit Exceeded"; ++ case 0x28: return "Prohibition of Command Execution Not Supported"; ++ case 0x29: return "I/O Command Set Not Supported"; ++ case 0x2a: return "I/O Command Set Not Enabled"; ++ case 0x2b: return "I/O Command Set Combination Rejected"; ++ case 0x2c: return "-Invalid I/O Command Set"; ++ case 0x2d: return "-Identifier Unavailable"; ++ // 0x2e-0x6f: Reserved ++ // 0x70-0x7f: Directive Specific ++ } ++ else if (sc < 0xb8) switch (sc) { ++ // 0x80-0xbf: I/O Command Set Specific (overlap with Fabrics Command Set) ++ case 0x80: return "-Conflicting Attributes"; ++ case 0x81: return "-Invalid Protection Information"; ++ case 0x82: return "Attempted Write to Read Only Range"; ++ case 0x83: return "Command Size Limit Exceeded"; ++ // 0x84-0xb7: Reserved ++ } ++ else switch (sc) { ++ case 0xb8: return "Zoned Boundary Error"; ++ case 0xb9: return "Zone Is Full"; ++ case 0xba: return "Zone Is Read Only"; ++ case 0xbb: return "Zone Is Offline"; ++ case 0xbc: return "Zone Invalid Write"; ++ case 0xbd: return "Too Many Active Zones"; ++ case 0xbe: return "Too Many Open Zones"; ++ case 0xbf: return "Invalid Zone State Transition"; ++ // 0xc0-0xff: Vendor Specific ++ } ++ break; ++ ++ case 0x2: // Media and Data Integrity Errors ++ switch (sc) { ++ // 0x00-0x7f: Reserved ++ case 0x80: return "Write Fault"; ++ case 0x81: return "Unrecovered Read Error"; ++ case 0x82: return "End-to-end Guard Check Error"; ++ case 0x83: return "End-to-end Application Tag Check Error"; ++ case 0x84: return "End-to-end Reference Tag Check Error"; ++ case 0x85: return "Compare Failure"; ++ case 0x86: return "Access Denied"; ++ case 0x87: return "Deallocated or Unwritten Logical Block"; ++ case 0x88: return "End-to-End Storage Tag Check Error"; ++ // 0x89-0xbf: Reserved ++ // 0xc0-0xff: Vendor Specific ++ } ++ break; ++ ++ case 0x3: // Path Related Status ++ switch (sc) { ++ case 0x00: return "Internal Path Error"; ++ case 0x01: return "Asymmetric Access Persistent Loss"; ++ case 0x02: return "Asymmetric Access Inaccessible"; ++ case 0x03: return "Asymmetric Access Transition"; ++ // 0x04-0x5f: Reserved ++ // 0x60-0x6f: Controller Detected Pathing Errors ++ case 0x60: return "Controller Pathing Error"; ++ // 0x61-0x6f: Reserved ++ // 0x70-0x7f: Host Detected Pathing Errors ++ case 0x70: return "Host Pathing Error"; ++ case 0x71: return "Command Aborted By Host"; ++ // 0x72-0x7f: Reserved ++ // 0x80-0xbf: I/O Command Set Specific ++ // 0xc0-0xff: Vendor Specific ++ } ++ break; ++ ++ // 0x4-0x6: Reserved ++ // 0x7: Vendor Specific ++ } ++ return nullptr; ++} ++ ++// Return errno for NVMe status SCT/SC fields: 0, EINVAL or EIO. ++int nvme_status_to_errno(uint16_t status) ++{ ++ if (!nvme_status_is_error(status)) ++ return 0; ++ const char * s = nvme_status_to_flagged_str(status); ++ if (s && *s == '-') ++ return EINVAL; ++ return EIO; ++} ++ ++// Return error message for NVMe status SCT/SC fields or nullptr if unknown. ++const char * nvme_status_to_str(uint16_t status) ++{ ++ const char * s = nvme_status_to_flagged_str(status); ++ return (s && *s == '-' ? s + 1 : s); ++} ++ ++// Return error message for NVMe status SCT/SC fields or explanatory message if unknown. ++const char * nvme_status_to_info_str(char * buf, size_t bufsize, uint16_t status) ++{ ++ const char * s = nvme_status_to_str(status); ++ if (s) ++ return s; ++ ++ uint8_t sct = (status >> 8) & 0x7, sc = (uint8_t)status; ++ const char * pfx = (sc >= 0xc0 ? "Vendor Specific " : "Unknown "); ++ switch (sct) { ++ case 0x0: s = "Generic Command Status"; break; ++ case 0x1: s = "Command Specific Status"; break; ++ case 0x2: s = "Media and Data Integrity Error"; break; ++ case 0x3: s = "Path Related Status"; break; ++ case 0x7: s = "Vendor Specific Status"; pfx = ""; break; ++ } ++ if (s) ++ snprintf(buf, bufsize, "%s%s 0x%02x", pfx, s, sc); ++ else ++ snprintf(buf, bufsize, "Unknown Status 0x%x/0x%02x", sct, sc); ++ return buf; ++} +diff -up smartmontools-7.1/nvmecmds.h.r5471 smartmontools-7.1/nvmecmds.h +--- smartmontools-7.1/nvmecmds.h.r5471 2023-11-22 14:07:37.646756079 +0100 ++++ smartmontools-7.1/nvmecmds.h 2023-11-22 14:09:29.911084240 +0100 +@@ -18,6 +18,8 @@ + + #include "static_assert.h" + ++#include ++#include + #include + + // The code below was originally imported from include file from +@@ -246,4 +248,22 @@ unsigned nvme_read_error_log(nvme_device + // Read NVMe SMART/Health Information log. + bool nvme_read_smart_log(nvme_device * device, smartmontools::nvme_smart_log & smart_log); + ++// Return true if NVMe status indicates an error. ++constexpr bool nvme_status_is_error(uint16_t status) ++ { return !!(status & 0x07ff); } ++ ++// Return errno for NVMe status SCT/SC fields: 0, EINVAL or EIO. ++int nvme_status_to_errno(uint16_t status); ++ ++// Return error message for NVMe status SCT/SC fields or nullptr if unknown. ++const char * nvme_status_to_str(uint16_t status); ++ ++// Return error message for NVMe status SCT/SC fields or explanatory message if unknown. ++const char * nvme_status_to_info_str(char * buf, size_t bufsize, uint16_t status); ++ ++// Version of above for fixed size buffers. ++template ++inline const char * nvme_status_to_info_str(char (& buf)[SIZE], unsigned status) ++ { return nvme_status_to_info_str(buf, SIZE, status); } ++ + #endif // NVMECMDS_H +diff -up smartmontools-7.1/nvmeprint.cpp.r5471 smartmontools-7.1/nvmeprint.cpp +--- smartmontools-7.1/nvmeprint.cpp.r5471 2023-11-22 14:07:37.648756102 +0100 ++++ smartmontools-7.1/nvmeprint.cpp 2023-11-22 14:11:35.899574762 +0100 +@@ -420,7 +420,7 @@ static void print_error_log(const nvme_e + continue; + + if (cnt == 1) +- pout("Num ErrCount SQId CmdId Status PELoc LBA NSID VS\n"); ++ pout("Num ErrCount SQId CmdId Status PELoc LBA NSID VS Message\n"); + + char sq[16] = "-", cm[16] = "-", st[16] = "-", pe[16] = "-"; + char lb[32] = "-", ns[16] = "-", vs[8] = "-"; +@@ -439,8 +439,10 @@ static void print_error_log(const nvme_e + if (e.vs != 0x00) + snprintf(vs, sizeof(vs), "0x%02x", e.vs); + +- pout("%3u %10" PRIu64 " %5s %7s %7s %6s %12s %5s %5s\n", +- i, e.error_count, sq, cm, st, pe, lb, ns, vs); ++ char buf[64]; ++ pout("%3u %10" PRIu64 " %5s %7s %7s %6s %12s %5s %5s %s\n", ++ i, e.error_count, sq, cm, st, pe, lb, ns, vs, ++ nvme_status_to_info_str(buf, e.status_field >> 1)); + } + + if (!cnt) diff --git a/SOURCES/smartmontools-7.4-r5472.patch b/SOURCES/smartmontools-7.4-r5472.patch new file mode 100644 index 0000000..eb6404e --- /dev/null +++ b/SOURCES/smartmontools-7.4-r5472.patch @@ -0,0 +1,159 @@ +diff -U0 smartmontools-7.1/ChangeLog.r5472 smartmontools-7.1/ChangeLog +diff -up smartmontools-7.1/smartd.conf.5.in.r5472 smartmontools-7.1/smartd.conf.5.in +--- smartmontools-7.1/smartd.conf.5.in.r5472 2019-12-13 21:20:45.000000000 +0100 ++++ smartmontools-7.1/smartd.conf.5.in 2023-11-22 12:32:37.341051288 +0100 +@@ -696,6 +696,20 @@ error log has increased since the last c + .I error + \- [NVMe] report if the "Number of Error Information Log Entries" from the + SMART/Health Information log has increased since the last check. ++.br ++[NEW EXPERIMENTAL SMARTD FEATURE] ++This will only be logged as LOG_CRIT if at least one of the new errors is ++still present in the Error Information log and its status indicates a ++device related error. ++Up to eight of the most recent of these errors are logged as LOG_INFO then. ++This is useful because the NVMe Error Information log is not persistent ++across power cycles or device resets. ++.br ++If all new errors are either no longer present in the log or are not device ++related (e.g. invalid command, invalid field in command, ...), a LOG_INFO ++message is generated instead. ++This avoids misleading warnings if the operating system issues unsupported ++commands and the device firmware also logs these kind of errors. + .Sp + .\" %ENDIF OS Darwin FreeBSD Linux NetBSD Windows Cygwin + .I xerror +diff -up smartmontools-7.1/smartd.cpp.r5472 smartmontools-7.1/smartd.cpp +--- smartmontools-7.1/smartd.cpp.r5472 2019-12-29 14:10:18.000000000 +0100 ++++ smartmontools-7.1/smartd.cpp 2023-11-22 12:35:19.254046678 +0100 +@@ -2,7 +2,7 @@ + * Home page of code is: https://www.smartmontools.org + * + * Copyright (C) 2002-11 Bruce Allen +- * Copyright (C) 2008-19 Christian Franke ++ * Copyright (C) 2008-23 Christian Franke + * Copyright (C) 2000 Michael Cornwell + * Copyright (C) 2008 Oliver Bock + * +@@ -410,6 +410,9 @@ struct dev_config + + ata_vendor_attr_defs attribute_defs; // -v options + ++ // NVMe only ++ unsigned nvme_err_log_max_entries{}; // size of error log ++ + dev_config(); + }; + +@@ -2628,6 +2631,74 @@ static int nvme_get_max_temp_kelvin(cons + return k; + } + ++// Check the NVMe Error Information log for device related errors. ++static bool check_nvme_error_log(const dev_config & cfg, dev_state & state, nvme_device * nvmedev, ++ uint64_t newcnt = 0) ++{ ++ // Limit transfer size to one page (64 entries) to avoid problems with ++ // limits of NVMe pass-through layer or too low MDTS values. ++ unsigned want_entries = 64; ++ if (want_entries > cfg.nvme_err_log_max_entries) ++ want_entries = cfg.nvme_err_log_max_entries; ++ raw_buffer error_log_buf(want_entries * sizeof(nvme_error_log_page)); ++ nvme_error_log_page * error_log = ++ reinterpret_cast(error_log_buf.data()); ++ unsigned read_entries = nvme_read_error_log(nvmedev, error_log, want_entries, false /*!lpo_sup*/); ++ if (!read_entries) { ++ PrintOut(LOG_INFO, "Device: %s, Read %u entries from Error Information Log failed\n", ++ cfg.name.c_str(), want_entries); ++ return false; ++ } ++ ++ if (!newcnt) ++ return true; // Support check only ++ ++ // Scan log, find device related errors ++ uint64_t oldcnt = state.nvme_err_log_entries, mincnt = newcnt; ++ int err = 0, ign = 0; ++ for (unsigned i = 0; i < read_entries; i++) { ++ const nvme_error_log_page & e = error_log[i]; ++ if (!e.error_count) ++ continue; // unused ++ if (e.error_count <= oldcnt) ++ break; // stop on first old entry ++ if (e.error_count < mincnt) ++ mincnt = e.error_count; // min known error ++ if (e.error_count > newcnt) ++ newcnt = e.error_count; // adjust maximum ++ uint16_t status = e.status_field >> 1; ++ if (!nvme_status_is_error(status) || nvme_status_to_errno(status) == EINVAL) { ++ ign++; // Not a device related error ++ continue; ++ } ++ ++ // Log the most recent 8 errors ++ if (++err > 8) ++ continue; ++ char buf[64]; ++ PrintOut(LOG_INFO, "Device: %s, NVMe error [%u], count %" PRIu64 ", status 0x%04x: %s\n", ++ cfg.name.c_str(), i, e.error_count, e.status_field, ++ nvme_status_to_info_str(buf, e.status_field >> 1)); ++ } ++ ++ std::string msg = strprintf("Device: %s, NVMe error count increased from %" PRIu64 " to %" PRIu64 ++ " (%d new, %d ignored, %" PRIu64 " unknown)", ++ cfg.name.c_str(), oldcnt, newcnt, err, ign, ++ (mincnt > oldcnt + 1 ? mincnt - oldcnt - 1 : 0)); ++ // LOG_CRIT only if device related errors are found ++ if (!err) { ++ PrintOut(LOG_INFO, "%s\n", msg.c_str()); ++ } ++ else { ++ PrintOut(LOG_CRIT, "%s\n", msg.c_str()); ++ MailWarning(cfg, state, 4, "%s", msg.c_str()); ++ } ++ ++ state.nvme_err_log_entries = newcnt; ++ state.must_write = true; ++ return true; ++} ++ + static int NVMeDeviceScan(dev_config & cfg, dev_state & state, nvme_device * nvmedev, + const dev_config_vector * prev_cfgs) + { +@@ -2687,8 +2758,14 @@ static int NVMeDeviceScan(dev_config & c + } + + // Init total error count ++ cfg.nvme_err_log_max_entries = id_ctrl.elpe + 1; // 0's based value + if (cfg.errorlog || cfg.xerrorlog) { +- state.nvme_err_log_entries = le128_to_uint64(smart_log.num_err_log_entries); ++ if (!check_nvme_error_log(cfg, state, nvmedev)) { ++ PrintOut(LOG_INFO, "Device: %s, Error Information unavailable, ignoring -l [x]error\n", name); ++ cfg.errorlog = cfg.xerrorlog = false; ++ } ++ else ++ state.nvme_err_log_entries = le128_to_uint64(smart_log.num_err_log_entries); + } + + // If no supported tests selected, return +@@ -3760,16 +3837,12 @@ static int NVMeCheckDevice(const dev_con + + // Check if number of errors has increased + if (cfg.errorlog || cfg.xerrorlog) { +- uint64_t oldcnt = state.nvme_err_log_entries; + uint64_t newcnt = le128_to_uint64(smart_log.num_err_log_entries); +- if (newcnt > oldcnt) { +- PrintOut(LOG_CRIT, "Device: %s, number of Error Log entries increased from %" PRIu64 " to %" PRIu64 "\n", +- name, oldcnt, newcnt); +- MailWarning(cfg, state, 4, "Device: %s, number of Error Log entries increased from %" PRIu64 " to %" PRIu64, +- name, oldcnt, newcnt); +- state.must_write = true; ++ if (newcnt > state.nvme_err_log_entries) { ++ // Warn only if device related errors are found ++ check_nvme_error_log(cfg, state, nvmedev, newcnt); + } +- state.nvme_err_log_entries = newcnt; ++ // else // TODO: Handle decrease of count? + } + + CloseDevice(nvmedev, name); diff --git a/SPECS/smartmontools.spec b/SPECS/smartmontools.spec index bab18c2..229efa8 100644 --- a/SPECS/smartmontools.spec +++ b/SPECS/smartmontools.spec @@ -1,7 +1,7 @@ Summary: Tools for monitoring SMART capable hard disks Name: smartmontools Version: 7.1 -Release: 1%{?dist} +Release: 3%{?dist} Epoch: 1 Group: System Environment/Base License: GPLv2+ @@ -15,6 +15,15 @@ Source5: drivedb.h #fedora/rhel specific Patch1: smartmontools-5.38-defaultconf.patch +Patch2: smartmontools-7.2-logsuppagefix1.patch +Patch3: smartmontools-7.2-logsuppagefix2.patch +Patch4: smartmontools-7.2-logsuppagefix3.patch +Patch5: smartmontools-7.2-logsuppagefix4.patch + +# 3x from upstream, for smartmontools <= 7.4, #RHEL-6982 +Patch6: smartmontools-7.4-r5121.patch +Patch7: smartmontools-7.4-r5471.patch +Patch8: smartmontools-7.4-r5472.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) #new rpm does not handle this (yet?) @@ -36,7 +45,14 @@ failure. %prep %setup -q -%patch1 -p1 -b .defaultconf +%patch -P 1 -p1 -b .defaultconf +%patch -P 2 -p2 -b .logsuppagefix1 +%patch -P 3 -p2 -b .logsuppagefix2 +%patch -P 4 -p2 -b .logsuppagefix3 +%patch -P 5 -p1 -b .logsuppagefix4 +%patch -P 6 -p1 -b .r5121 +%patch -P 7 -p1 -b .r5471 +%patch -P 8 -p1 -b .r5472 # update SOURCE5 on maintainer's machine prior commiting, there's no internet connection on builders curl %{UrlSource5} -o %{SOURCE5} ||: @@ -108,6 +124,12 @@ fi %{_sharedstatedir}/%{name} %changelog +* Wed Nov 22 2023 Michal Hlavinka - 1:7.1-3 +- don't report new non-device related errors as critical (#RHEL-6982) + +* Mon May 29 2023 Michal Hlavinka - 1:7.1-2 +- support reporting of Error Counter logging details (#2136439) + * Wed Apr 22 2020 Michal Hlavinka - 1:7.1-1 - smartmontools updated to 7.1 (#1671154)