User Tools

Site Tools


other:hardware:ssd

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
other:hardware:ssd [2020/01/25 00:35] rodolicoother:hardware:ssd [2020/01/25 21:06] (current) rodolico
Line 9: Line 9:
 <code bash> <code bash>
 apt install smartmontools # Devuan Linux apt install smartmontools # Devuan Linux
 +pkg install smartmontools # FreeBSD
 # record number of Logical Bytes that makes up a sector # record number of Logical Bytes that makes up a sector
 smartctl /dev/sda -a |grep "Sector Size" smartctl /dev/sda -a |grep "Sector Size"
Line 30: Line 31:
  
 NOTE: some vendors do not include ID 241 in their output, so all you can do is guess. One good thing to try is simply take the output of smartctl -a and pipe it to less, then read through it (not that big). NOTE: some vendors do not include ID 241 in their output, so all you can do is guess. One good thing to try is simply take the output of smartctl -a and pipe it to less, then read through it (not that big).
 +
 +===== Script =====
 +
 +The following script is very rough, but kinda works. No parameters, but you have to comment/uncomment lines at the beginning depending on whether you want to manually set the drives, or have them discovered by Linux or BSD systems. Use at your own risk. I'll probably clean it up in the future.
 +
 +<code perl getSmart.pl>
 +#! /usr/bin/env perl
 +
 +use warnings;
 +use strict;
 +
 +my %allDrives;
 +
 +# create a hash with the keys having values ada0, da0, etc
 +# comment/uncomment one of the three lines below
 +
 +# manually enter the drives to look at
 +# %allDrives = map { $_ => 0 } qw/ada0 da0 da1 da2 da3 da4 da5 da6 da7 da8 da9/;
 +# automagically find the drives on a BSD system
 +%allDrives = map { &trim($_) => 0 } `geom disk list | grep 'Geom name:' | cut -d':' -f 2`;
 +# automagically find the drives on a Linux system
 +#%allDrives = map { &trim($_) => 0 } `lsblk | grep disk | cut -d' ' -f1`;
 +
 +sub trim {
 +   my $value = shift;
 +   $value =~ s/^\s+|\s+$//g;
 +   return $value;
 +}
 +
 +sub getTotalWrites {
 +   my $drive = shift;
 +   my @report = `smartctl -a /dev/$drive`;
 +   return -2 unless grep{ /(Solid State Device)|(SSD)/ } @report;
 +   my @temp = grep{ /^Sector Size:/ } @report;
 +   my $sectors = shift @temp;
 +#   print "The Value is [$sectors]\n"; die;
 +   if ( $sectors =~ m/^Sector Size\:\s+(\d+)\s+bytes/ ) {
 +      $sectors = $1;
 +      # print "Sectors is $sectors\n"; die;
 +      @temp =  grep{ /^241/ } @report;
 +      my $lbas = $temp[0];
 +      if ( $lbas =~ m/(\d+)\s*$/ ) {
 +         $lbas = $1;
 +         return $lbas * $sectors;
 +      } else {
 +         return -3;
 +      }
 +   } else { 
 +      return -4; 
 +   }
 +   return -1; # we could not find something
 +}
 +  
 +# output the drives and information as tab delimited,
 +foreach my $thisDrive ( sort keys %allDrives ) {
 +   #print "$thisDrive\n";
 +   $allDrives{$thisDrive} = getTotalWrites( $thisDrive );
 +   print "$thisDrive\t" . $allDrives{$thisDrive} . "\n" if $allDrives{$thisDrive} > 0;
 +}
 +</code>
  
 ===== Links ===== ===== Links =====
other/hardware/ssd.1579934147.txt.gz · Last modified: 2020/01/25 00:35 by rodolico