mirror of
https://github.com/ISpillMyDrink/OpenSuperClone.git
synced 2026-05-03 13:30:49 +00:00
380 lines
11 KiB
Plaintext
380 lines
11 KiB
Plaintext
seti $printhelp = $printhelp
|
|
seti $help = $help
|
|
if $help = 1
|
|
echo 'This will read the smart data from the drive and display the results.'
|
|
echo 'Example: opensuperclone --tool -t /dev/sda -f ata_smart_data'
|
|
if $printhelp = 1
|
|
exit 0
|
|
endif
|
|
echo 'Hit ENTER to continue...'
|
|
userinput $choicestring
|
|
previousscript
|
|
endif
|
|
|
|
include good_subroutines.osc
|
|
|
|
|
|
buffersize 512
|
|
setreadpio
|
|
|
|
# read threshold data
|
|
clearbuffer
|
|
ata28cmd 0xd1 0 0 0x4f 0xc2 0xa0 0xb0
|
|
seti $threshold_success = 1
|
|
# check if command failed
|
|
seti $command_failed = 0
|
|
gosub check_command_status
|
|
if $command_failed = 1
|
|
seti $threshold_success = 0
|
|
endif
|
|
|
|
#echo "Raw buffer:"
|
|
#printbuffer 0 512
|
|
copybuffertoscratchpad 0 0 512
|
|
|
|
# read attribute data
|
|
clearbuffer
|
|
ata28cmd 0xd0 0 0 0x4f 0xc2 0xa0 0xb0
|
|
|
|
# check if command failed
|
|
gosub status_check
|
|
|
|
#echo "Raw buffer:"
|
|
#printbuffer 0 512
|
|
|
|
|
|
seti $version = buffer 0 w
|
|
echo "Smart structure version= " $version
|
|
|
|
echo "ID# FLAG VALUE WORST THRESH RAW DATA ATTRIBUTE NAME"
|
|
sets $attribute_name = " "
|
|
seti $offset = 2
|
|
seti $count = 0
|
|
seti $warning = 0
|
|
while $count < 30
|
|
seti $attribute_id = buffer $offset
|
|
seti $offset = $offset + 1
|
|
if $attribute_id < 10
|
|
sets $spaces = " "
|
|
elseif $attribute_id < 100
|
|
sets $spaces = " "
|
|
else
|
|
sets $spaces = ""
|
|
endif
|
|
sets $attributestring = $spaces $attribute_id
|
|
|
|
seti $flags = buffer $offset w
|
|
seti $offset = $offset + 2
|
|
if $flags < 0x10
|
|
sets $zeros = "0x000"
|
|
elseif $flags < 0x100
|
|
sets $zeros = "0x00"
|
|
elseif $flags < 0x1000
|
|
sets $zeros = "0x0"
|
|
else
|
|
sets $zeros = "0x"
|
|
endif
|
|
hex
|
|
sets $flagstring = $zeros $flags
|
|
decimal
|
|
|
|
seti $current_value = buffer $offset
|
|
seti $offset = $offset + 1
|
|
if $current_value < 10
|
|
sets $spaces = " "
|
|
elseif $current_value < 100
|
|
sets $spaces = " "
|
|
else
|
|
sets $spaces = ""
|
|
endif
|
|
sets $currentstring = $spaces $current_value
|
|
|
|
seti $worst_value = buffer $offset
|
|
seti $offset = $offset + 1
|
|
if $worst_value < 10
|
|
sets $spaces = " "
|
|
elseif $worst_value < 100
|
|
sets $spaces = " "
|
|
else
|
|
sets $spaces = ""
|
|
endif
|
|
sets $worststring = $spaces $worst_value
|
|
|
|
seti $rawdata = buffer $offset dw
|
|
seti $offset = $offset + 4
|
|
seti $otherdata = buffer $offset w
|
|
seti $offset = $offset + 2
|
|
seti $otherdata = $otherdata < 32
|
|
seti $rawdata = $rawdata + $otherdata
|
|
seti $otherdata = buffer $offset
|
|
seti $offset = $offset + 1
|
|
seti $otherdata = $otherdata < 48
|
|
seti $rawdata = $rawdata + $otherdata
|
|
|
|
if $rawdata < 0x10
|
|
sets $zeros = "0x0000000000000"
|
|
elseif $rawdata < 0x100
|
|
sets $zeros = "0x000000000000"
|
|
elseif $rawdata < 0x1000
|
|
sets $zeros = "0x00000000000"
|
|
elseif $rawdata < 0x10000
|
|
sets $zeros = "0x0000000000"
|
|
elseif $rawdata < 0x100000
|
|
sets $zeros = "0x000000000"
|
|
elseif $rawdata < 0x1000000
|
|
sets $zeros = "0x00000000"
|
|
elseif $rawdata < 0x10000000
|
|
sets $zeros = "0x0000000"
|
|
elseif $rawdata < 0x100000000
|
|
sets $zeros = "0x000000"
|
|
elseif $rawdata < 0x1000000000
|
|
sets $zeros = "0x00000"
|
|
elseif $rawdata < 0x10000000000
|
|
sets $zeros = "0x0000"
|
|
elseif $rawdata < 0x100000000000
|
|
sets $zeros = "0x000"
|
|
elseif $rawdata < 0x1000000000000
|
|
sets $zeros = "0x00"
|
|
elseif $rawdata < 0x10000000000000
|
|
sets $zeros = "0x0"
|
|
else
|
|
sets $zeros = "0x"
|
|
endif
|
|
hex
|
|
sets $datastring = $zeros $rawdata
|
|
decimal
|
|
|
|
seti $threshold = 0
|
|
seti $threshold_value = $threshold
|
|
if $threshold_success = 1
|
|
gosub get_threshold_data
|
|
seti $threshold = $threshold_value
|
|
sets $threshold_warning = " "
|
|
if $attribute_id > 0
|
|
if $current_value <= $threshold
|
|
seti $warning = 1
|
|
sets $threshold_warning = "*"
|
|
elseif $worst_value <= $threshold
|
|
seti $warning = 1
|
|
sets $threshold_warning = "*"
|
|
endif
|
|
endif
|
|
endif
|
|
if $threshold < 10
|
|
sets $spaces = " "
|
|
elseif $threshold < 100
|
|
sets $spaces = " "
|
|
else
|
|
sets $spaces = ""
|
|
endif
|
|
sets $thresholdstring = $spaces $threshold_warning $threshold
|
|
|
|
if $attribute_id > 0
|
|
gosub get_attribute_name
|
|
echo $attributestring " " $flagstring " " $currentstring " " $worststring " " $thresholdstring " " $datastring " " $attribute_name
|
|
endif
|
|
|
|
seti $count = $count + 1
|
|
done
|
|
|
|
if $warning > 0
|
|
echo "Warning! One or more of the values has hit its threshold."
|
|
endif
|
|
|
|
previousscript
|
|
|
|
|
|
subroutine get_threshold_data
|
|
seti $t_offset = 2
|
|
seti $t_count = 0
|
|
while $t_count < 30
|
|
seti $threshold_id = scratchpad $t_offset
|
|
seti $t_offset = $t_offset + 1
|
|
|
|
if $threshold_id = $attribute_id
|
|
seti $threshold_value = scratchpad $t_offset
|
|
break
|
|
endif
|
|
|
|
seti $t_offset = $t_offset + 11
|
|
seti $t_count = $t_count + 1
|
|
done
|
|
endsubroutine
|
|
|
|
|
|
subroutine get_attribute_name
|
|
if $attribute_id = 1
|
|
sets $attribute_name = "Read Error Rate"
|
|
elseif $attribute_id = 2
|
|
sets $attribute_name = "Throughput Performance"
|
|
elseif $attribute_id = 3
|
|
sets $attribute_name = "Spin-Up Time"
|
|
elseif $attribute_id = 4
|
|
sets $attribute_name = "Start/Stop Count"
|
|
elseif $attribute_id = 5
|
|
sets $attribute_name = "Reallocated Sectors Count"
|
|
elseif $attribute_id = 6
|
|
sets $attribute_name = "Read Channel Margin"
|
|
elseif $attribute_id = 7
|
|
sets $attribute_name = "Seek Error Rate"
|
|
elseif $attribute_id = 8
|
|
sets $attribute_name = "Seek Time Performance"
|
|
elseif $attribute_id = 9
|
|
sets $attribute_name = "Power-On Hours Count"
|
|
elseif $attribute_id = 10
|
|
sets $attribute_name = "Spin Retry Count"
|
|
elseif $attribute_id = 11
|
|
sets $attribute_name = "Calibration Retries"
|
|
elseif $attribute_id = 12
|
|
sets $attribute_name = "Power Cycle Count"
|
|
elseif $attribute_id = 13
|
|
sets $attribute_name = "Soft Read Error Rate"
|
|
elseif $attribute_id = 100
|
|
sets $attribute_name = "Erase/Program Cycles"
|
|
elseif $attribute_id = 103
|
|
sets $attribute_name = "Translation Table Rebuild"
|
|
elseif $attribute_id = 166
|
|
sets $attribute_name = "Min W/E Cycle"
|
|
elseif $attribute_id = 167
|
|
sets $attribute_name = "Min Bad Block/Die"
|
|
elseif $attribute_id = 168
|
|
sets $attribute_name = "Maximum Erase Cycle"
|
|
elseif $attribute_id = 169
|
|
sets $attribute_name = "Total Bad Block"
|
|
elseif $attribute_id = 170
|
|
sets $attribute_name = "Reserved Block Count"
|
|
elseif $attribute_id = 171
|
|
sets $attribute_name = "Program Fail Count"
|
|
elseif $attribute_id = 172
|
|
sets $attribute_name = "Erase Fail Count"
|
|
elseif $attribute_id = 173
|
|
sets $attribute_name = "Wear Leveller Worst Case Erase Count"
|
|
elseif $attribute_id = 174
|
|
sets $attribute_name = "Unexpected Power Loss"
|
|
elseif $attribute_id = 175
|
|
sets $attribute_name = "Program Fail Count"
|
|
elseif $attribute_id = 176
|
|
sets $attribute_name = "Erase Fail Count"
|
|
elseif $attribute_id = 177
|
|
sets $attribute_name = "Wear Leveling Count"
|
|
elseif $attribute_id = 178
|
|
sets $attribute_name = "Used Reserved Block Count"
|
|
elseif $attribute_id = 179
|
|
sets $attribute_name = "Used Reserved Block Count"
|
|
elseif $attribute_id = 180
|
|
sets $attribute_name = "Unused Reserved Block Count"
|
|
elseif $attribute_id = 181
|
|
sets $attribute_name = "Program Fail Count"
|
|
elseif $attribute_id = 182
|
|
sets $attribute_name = "Erase Fail Count"
|
|
elseif $attribute_id = 183
|
|
sets $attribute_name = "SATA Downshifts"
|
|
elseif $attribute_id = 184
|
|
sets $attribute_name = "End-to-End error"
|
|
elseif $attribute_id = 185
|
|
sets $attribute_name = "Head Stability"
|
|
elseif $attribute_id = 186
|
|
sets $attribute_name = "Induced Op-Vibration Detection"
|
|
elseif $attribute_id = 187
|
|
sets $attribute_name = "Reported Uncorrectable Errors"
|
|
elseif $attribute_id = 188
|
|
sets $attribute_name = "Command Timeout"
|
|
elseif $attribute_id = 189
|
|
sets $attribute_name = "High Fly Writes"
|
|
elseif $attribute_id = 190
|
|
sets $attribute_name = "Temperature"
|
|
elseif $attribute_id = 191
|
|
sets $attribute_name = "G-Sense Errors"
|
|
elseif $attribute_id = 192
|
|
sets $attribute_name = "Power-Off Retract Cycles"
|
|
elseif $attribute_id = 193
|
|
sets $attribute_name = "Load/Unload Cycles"
|
|
elseif $attribute_id = 194
|
|
sets $attribute_name = "Temperature"
|
|
elseif $attribute_id = 195
|
|
sets $attribute_name = "Hardware ECC Recovered"
|
|
elseif $attribute_id = 196
|
|
sets $attribute_name = "Reallocation Events"
|
|
elseif $attribute_id = 197
|
|
sets $attribute_name = "Current Pending Sectors"
|
|
elseif $attribute_id = 198
|
|
sets $attribute_name = "Off-line Uncorrectable"
|
|
elseif $attribute_id = 199
|
|
sets $attribute_name = "UDMA CRC Error Rate"
|
|
elseif $attribute_id = 200
|
|
sets $attribute_name = "Write Error Rate"
|
|
elseif $attribute_id = 201
|
|
sets $attribute_name = "Soft Read Errors"
|
|
elseif $attribute_id = 202
|
|
sets $attribute_name = "Data Address Mark Errors"
|
|
elseif $attribute_id = 203
|
|
sets $attribute_name = "Run Out Cancel"
|
|
elseif $attribute_id = 204
|
|
sets $attribute_name = "Soft ECC Corrections"
|
|
elseif $attribute_id = 205
|
|
sets $attribute_name = "Thermal Asperity Rate"
|
|
elseif $attribute_id = 206
|
|
sets $attribute_name = "Flying Height"
|
|
elseif $attribute_id = 207
|
|
sets $attribute_name = "Spin High Current"
|
|
elseif $attribute_id = 208
|
|
sets $attribute_name = "Spin Buzz"
|
|
elseif $attribute_id = 209
|
|
sets $attribute_name = "Offline Seek Performance"
|
|
elseif $attribute_id = 210
|
|
sets $attribute_name = "Vibration During Write"
|
|
elseif $attribute_id = 211
|
|
sets $attribute_name = "Vibration During Write"
|
|
elseif $attribute_id = 212
|
|
sets $attribute_name = "Shock During Write"
|
|
elseif $attribute_id = 220
|
|
sets $attribute_name = "Disk Shift"
|
|
elseif $attribute_id = 221
|
|
sets $attribute_name = "G-Sense Error Rate"
|
|
elseif $attribute_id = 222
|
|
sets $attribute_name = "Loaded Hours"
|
|
elseif $attribute_id = 223
|
|
sets $attribute_name = "Load/Unload Retries"
|
|
elseif $attribute_id = 224
|
|
sets $attribute_name = "Load Friction"
|
|
elseif $attribute_id = 225
|
|
sets $attribute_name = "Load/Unload Cycles"
|
|
elseif $attribute_id = 226
|
|
sets $attribute_name = "Load-in Time"
|
|
elseif $attribute_id = 227
|
|
sets $attribute_name = "Torque Amplification Count"
|
|
elseif $attribute_id = 228
|
|
sets $attribute_name = "Power-Off Retracts"
|
|
elseif $attribute_id = 230
|
|
sets $attribute_name = "GMR Head Amplitude"
|
|
elseif $attribute_id = 231
|
|
sets $attribute_name = "Temperature"
|
|
elseif $attribute_id = 232
|
|
sets $attribute_name = "Available Reserved Space"
|
|
elseif $attribute_id = 233
|
|
sets $attribute_name = "Media Wearout Indicator"
|
|
elseif $attribute_id = 234
|
|
sets $attribute_name = "Average/Maximum Erase Count"
|
|
elseif $attribute_id = 235
|
|
sets $attribute_name = "Good/System(Free) Block Count"
|
|
elseif $attribute_id = 240
|
|
sets $attribute_name = "Head Flying Hours"
|
|
elseif $attribute_id = 241
|
|
sets $attribute_name = "Total LBAs Written"
|
|
elseif $attribute_id = 242
|
|
sets $attribute_name = "Total LBAs Read"
|
|
elseif $attribute_id = 249
|
|
sets $attribute_name = "NAND_Writes_1GiB"
|
|
elseif $attribute_id = 250
|
|
sets $attribute_name = "Read Error Retry Rate"
|
|
elseif $attribute_id = 254
|
|
sets $attribute_name = "Free Fall Protection"
|
|
|
|
else
|
|
sets $attribute_name = "Unknown"
|
|
endif
|
|
endsubroutine
|
|
|
|
|
|
end
|