In this notebook I'm demonstrating what I did with the Backblaze dataset - which is pretty big (in a previous attempt to work with it the size of the database exceeds 200G and the main table had over 330 mil entries in total ) - to get it to a manageable size such that I would not need massive clusters in order to process it.

The plan is as follows:

1. get a combined list of all the drives that failed over time

2. save it to the failed_drive table in database backblaze_ml such that we can use it later on to generate a table with information specific only to these failed drives

In [22]:
#import the relevant libraries 
import os
import pymysql
import pandas as pd
In [43]:
#establish the connection to the mysql database
host = "192.168.88.187"
port = "3306"
user = "backblaze"
password = "Testing.2023"
database = "backblaze_ml"

conn = pymysql.connect(
    host=host,
    port=int(3306),
    user=user,
    passwd=password,
    db=database,
    charset='utf8mb4')
In [24]:
#list of databases I'll be working with
df = pd.read_sql_query("show databases like 'backblaze%'", conn)
df.tail(100)
Out[24]:
Database (backblaze%)
0 backblaze_2013_Q1
1 backblaze_2013_Q2
2 backblaze_2013_Q3
3 backblaze_2013_Q4
4 backblaze_2014_Q1
5 backblaze_2014_Q2
6 backblaze_2014_Q3
7 backblaze_2014_Q4
8 backblaze_2015_Q1
9 backblaze_2015_Q2
10 backblaze_2015_Q3
11 backblaze_2015_Q4
12 backblaze_2016_Q1
13 backblaze_2016_Q2
14 backblaze_2016_Q3
15 backblaze_2016_Q4
16 backblaze_2017_Q1
17 backblaze_2017_Q2
18 backblaze_2017_Q3
19 backblaze_2017_Q4
20 backblaze_2018_Q1
21 backblaze_2018_Q2
22 backblaze_2018_Q3
23 backblaze_2018_Q4
24 backblaze_2019_Q1
25 backblaze_2019_Q2
26 backblaze_2019_Q3
27 backblaze_2019_Q4
28 backblaze_2020_Q1
29 backblaze_2020_Q2
30 backblaze_2020_Q3
31 backblaze_2020_Q4
32 backblaze_2021_Q1
33 backblaze_2021_Q2
34 backblaze_2021_Q3
35 backblaze_2021_Q4
36 backblaze_2022_Q1
37 backblaze_2022_Q2
38 backblaze_2022_Q3
39 backblaze_2022_Q4
40 backblaze_2023_Q1
41 backblaze_ml

Backblaze provides their SMART database exports in the form of quarterly zip files containing CSV files for each day. Importing these groups of files in their own database makes most sense as it keeps the size of the database relatively small enough to still be able to work with. The actual database I will be working with during the training phase is backblaze_ml where I will havel collected only the relevant information from the raw databases which will have a manageable size (considering it will only contain the relevant information needed) to not need any large scale infrastructure. -> remember: one of the core ideas behind my project is "practical" -> needing to deploy a lot of nodes to handle a lot of data is expensive which makes it less practical if dedicated specifically for this exercise

In [25]:
#demo for backblaze_2013_Q2 (there is no data for Q1)
conn = pymysql.connect(
    host=host,
    port=int(3306),
    user=user,
    passwd=password,
    db="backblaze_ml",
    charset='utf8mb4')

df = pd.read_sql_query("show tables", conn)
df.tail(100)
Out[25]:
Tables_in_backblaze_ml
0 drive_stats
1 failed_drive

The failed_drive table is a table I created which only contains the serial number and the model of the drives which I found in the database as having the fail field set to 1

In [30]:
#sample below
df = pd.read_sql_query("select * from failed_drive limit 10", conn)
df.tail(10)
Out[30]:
serial_number model
0 9VS3FM1J ST31500341AS
1 S1F02ZVX ST3000DM001
2 S1F02PL9 ST3000DM001
3 5YD8B2PN ST1500DL003
4 5YD4L8FB ST1500DL003
5 6XW1G4CA ST32000542AS
6 5YD0ZKLX ST1500DL003
7 9XW02JCL ST31500541AS
8 6XW0W3WH ST31500541AS
9 PL1331LAG5AZYH HGST HMS5C4040ALE640

The queries the follow are the ones demonstrating how I extracted the information I need to populate in the failed_drive table across all databases

In [27]:
#massive query that does union across all the databases to retrieve the list of failed drives
df = pd.read_sql_query("select distinct serial_number, model from backblaze_2013_Q2.drive_stats where backblaze_2013_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q3.drive_stats where backblaze_2013_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q4.drive_stats where backblaze_2013_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q1.drive_stats where backblaze_2014_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q2.drive_stats where backblaze_2014_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q3.drive_stats where backblaze_2014_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q4.drive_stats where backblaze_2014_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q1.drive_stats where backblaze_2015_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q2.drive_stats where backblaze_2015_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q3.drive_stats where backblaze_2015_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q4.drive_stats where backblaze_2015_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q1.drive_stats where backblaze_2016_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q2.drive_stats where backblaze_2016_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q3.drive_stats where backblaze_2016_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q4.drive_stats where backblaze_2016_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q1.drive_stats where backblaze_2017_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q2.drive_stats where backblaze_2017_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q3.drive_stats where backblaze_2017_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q4.drive_stats where backblaze_2017_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q1.drive_stats where backblaze_2018_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q2.drive_stats where backblaze_2018_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q3.drive_stats where backblaze_2018_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q4.drive_stats where backblaze_2018_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q1.drive_stats where backblaze_2019_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q2.drive_stats where backblaze_2019_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q3.drive_stats where backblaze_2019_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q4.drive_stats where backblaze_2019_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q1.drive_stats where backblaze_2020_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q2.drive_stats where backblaze_2020_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q3.drive_stats where backblaze_2020_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q4.drive_stats where backblaze_2020_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q1.drive_stats where backblaze_2021_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q2.drive_stats where backblaze_2021_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q3.drive_stats where backblaze_2021_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q4.drive_stats where backblaze_2021_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q1.drive_stats where backblaze_2022_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q2.drive_stats where backblaze_2022_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q3.drive_stats where backblaze_2022_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q4.drive_stats where backblaze_2022_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2023_Q1.drive_stats where backblaze_2023_Q1.drive_stats.failure = 1;", conn)
df.tail(10)
Out[27]:
serial_number model
18654 AAG1M63H HGST HUH721212ALN604
18655 AAG61VUH HGST HUH721212ALN604
18656 ZHZ3HK31 ST14000NM0138
18657 ZHZ3C5CS ST14000NM0138
18658 5PHP8TPD HGST HUH721212ALE604
18659 2AGMNB7Y HGST HUH721212ALN604
18660 8HH0KRGH HGST HUH721212ALE604
18661 ZLW16KEQ ST14000NM001G
18662 X0GE5KSC WDC WUH721414ALE6L4
18663 61B0A03NF97G TOSHIBA MG07ACA14TA

Now comes the fun part

In [28]:
conn.cursor().execute("insert into backblaze_ml.failed_drive select distinct serial_number, model from backblaze_2013_Q2.drive_stats where backblaze_2013_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q3.drive_stats where backblaze_2013_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q4.drive_stats where backblaze_2013_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q1.drive_stats where backblaze_2014_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q2.drive_stats where backblaze_2014_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q3.drive_stats where backblaze_2014_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q4.drive_stats where backblaze_2014_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q1.drive_stats where backblaze_2015_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q2.drive_stats where backblaze_2015_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q3.drive_stats where backblaze_2015_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q4.drive_stats where backblaze_2015_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q1.drive_stats where backblaze_2016_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q2.drive_stats where backblaze_2016_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q3.drive_stats where backblaze_2016_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q4.drive_stats where backblaze_2016_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q1.drive_stats where backblaze_2017_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q2.drive_stats where backblaze_2017_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q3.drive_stats where backblaze_2017_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q4.drive_stats where backblaze_2017_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q1.drive_stats where backblaze_2018_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q2.drive_stats where backblaze_2018_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q3.drive_stats where backblaze_2018_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q4.drive_stats where backblaze_2018_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q1.drive_stats where backblaze_2019_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q2.drive_stats where backblaze_2019_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q3.drive_stats where backblaze_2019_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q4.drive_stats where backblaze_2019_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q1.drive_stats where backblaze_2020_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q2.drive_stats where backblaze_2020_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q3.drive_stats where backblaze_2020_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q4.drive_stats where backblaze_2020_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q1.drive_stats where backblaze_2021_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q2.drive_stats where backblaze_2021_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q3.drive_stats where backblaze_2021_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q4.drive_stats where backblaze_2021_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q1.drive_stats where backblaze_2022_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q2.drive_stats where backblaze_2022_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q3.drive_stats where backblaze_2022_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q4.drive_stats where backblaze_2022_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2023_Q1.drive_stats where backblaze_2023_Q1.drive_stats.failure = 1;")
Out[28]:
18664
In [29]:
df = pd.read_sql_query("select * from backblaze_ml.failed_drive", conn)
df.tail(10)
Out[29]:
serial_number model
18654 AAG1M63H HGST HUH721212ALN604
18655 AAG61VUH HGST HUH721212ALN604
18656 ZHZ3HK31 ST14000NM0138
18657 ZHZ3C5CS ST14000NM0138
18658 5PHP8TPD HGST HUH721212ALE604
18659 2AGMNB7Y HGST HUH721212ALN604
18660 8HH0KRGH HGST HUH721212ALE604
18661 ZLW16KEQ ST14000NM001G
18662 X0GE5KSC WDC WUH721414ALE6L4
18663 61B0A03NF97G TOSHIBA MG07ACA14TA

Here we're taking a look at number of failed drives by model on the whole dataset (on the individual quarterly databases)

In [40]:
df = pd.read_sql_query("select count(distinct serial_number) as failed_disks, model from (select distinct serial_number, model from backblaze_2013_Q2.drive_stats where backblaze_2013_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q3.drive_stats where backblaze_2013_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2013_Q4.drive_stats where backblaze_2013_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q1.drive_stats where backblaze_2014_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q2.drive_stats where backblaze_2014_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q3.drive_stats where backblaze_2014_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2014_Q4.drive_stats where backblaze_2014_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q1.drive_stats where backblaze_2015_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q2.drive_stats where backblaze_2015_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q3.drive_stats where backblaze_2015_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2015_Q4.drive_stats where backblaze_2015_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q1.drive_stats where backblaze_2016_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q2.drive_stats where backblaze_2016_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q3.drive_stats where backblaze_2016_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2016_Q4.drive_stats where backblaze_2016_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q1.drive_stats where backblaze_2017_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q2.drive_stats where backblaze_2017_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q3.drive_stats where backblaze_2017_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2017_Q4.drive_stats where backblaze_2017_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q1.drive_stats where backblaze_2018_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q2.drive_stats where backblaze_2018_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q3.drive_stats where backblaze_2018_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2018_Q4.drive_stats where backblaze_2018_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q1.drive_stats where backblaze_2019_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q2.drive_stats where backblaze_2019_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q3.drive_stats where backblaze_2019_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2019_Q4.drive_stats where backblaze_2019_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q1.drive_stats where backblaze_2020_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q2.drive_stats where backblaze_2020_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q3.drive_stats where backblaze_2020_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2020_Q4.drive_stats where backblaze_2020_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q1.drive_stats where backblaze_2021_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q2.drive_stats where backblaze_2021_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q3.drive_stats where backblaze_2021_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2021_Q4.drive_stats where backblaze_2021_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q1.drive_stats where backblaze_2022_Q1.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q2.drive_stats where backblaze_2022_Q2.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q3.drive_stats where backblaze_2022_Q3.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2022_Q4.drive_stats where backblaze_2022_Q4.drive_stats.failure = 1 union select distinct serial_number, model from backblaze_2023_Q1.drive_stats where backblaze_2023_Q1.drive_stats.failure = 1) m group by m.model order by failed_disks;", conn)
df
Out[40]:
failed_disks model
0 1 Hitachi HDS723030BLE640
1 1 SAMSUNG HD154UI
2 1 Seagate BarraCuda SSD ZA2000CM10002
3 1 Seagate BarraCuda SSD ZA500CM10002
4 1 SSDSCKKB480G8R
5 1 ST2000DM001
6 1 ST3500320AS
7 1 ST4000DM004
8 1 WD Blue SA510 2.5 250GB
9 1 WDC WUH721414ALE6L4
10 1 WDC WD2500AAJB
11 1 WDC WD2500AAJS
12 1 WDC WD2500BPVT
13 1 WDC WD2500JB
14 1 WDC WD3200AAJB
15 1 WDC WD3200BEKT
16 1 WDC WD800JD
17 1 WDC WD800LB
18 2 HGST HDS724040ALE640
19 2 MTFDDAV240TDU
20 2 ST10000NM001G
21 2 ST16000NM002J
22 2 ST2000VN000
23 2 ST8000DM005
24 2 TOSHIBA MD04ABA500V
25 2 WDC WD30EZRS
26 2 WDC WD3200AAJS
27 2 WDC WD5002ABYS
28 2 WDC WDS250G2B0A
29 3 HGST HUS726040ALE610
... ... ...
90 87 ST320LT007
91 89 Hitachi HDS5C4040ALE630
92 90 ST1500DL003
93 97 ST6000DX000
94 108 HP SSD S700 250GB
95 109 TOSHIBA MG08ACA16TE
96 120 ST10000NM0086
97 130 HGST HUH721212ALE604
98 150 Hitachi HDS5C3030ALA630
99 174 WDC WD30EFRX
100 189 ST14000NM0138
101 190 TOSHIBA MQ01ABF050M
102 216 ST31500341AS
103 221 ST500LM012 HN
104 223 ST16000NM001G
105 226 ST12000NM001G
106 235 Hitachi HDS722020ALA330
107 247 HGST HMS5C4040ALE640
108 258 ST14000NM001G
109 291 HGST HUH721212ALN604
110 345 TOSHIBA MQ01ABF050
111 395 HGST HMS5C4040BLE640
112 397 ST31500541AS
113 818 ST8000DM002
114 858 TOSHIBA MG07ACA14TA
115 897 ST12000NM0008
116 1308 ST8000NM0055
117 1708 ST3000DM001
118 2040 ST12000NM0007
119 5260 ST4000DM000

120 rows × 2 columns

And here we're doing the same thing only this time on the failed_drive table in the backblaze_ml (to validate that it is accurate)

In [44]:
df = pd.read_sql_query("select count(backblaze_ml.failed_drive.model) as failed_disks, backblaze_ml.failed_drive.model as model from backblaze_ml.failed_drive group by backblaze_ml.failed_drive.model order by failed_disks;", conn)
df
Out[44]:
failed_disks model
0 1 Hitachi HDS723030BLE640
1 1 SAMSUNG HD154UI
2 1 Seagate BarraCuda SSD ZA2000CM10002
3 1 Seagate BarraCuda SSD ZA500CM10002
4 1 SSDSCKKB480G8R
5 1 ST2000DM001
6 1 ST3500320AS
7 1 ST4000DM004
8 1 WD Blue SA510 2.5 250GB
9 1 WDC WUH721414ALE6L4
10 1 WDC WD2500AAJB
11 1 WDC WD2500AAJS
12 1 WDC WD2500BPVT
13 1 WDC WD2500JB
14 1 WDC WD3200AAJB
15 1 WDC WD3200BEKT
16 1 WDC WD800JD
17 1 WDC WD800LB
18 2 HGST HDS724040ALE640
19 2 MTFDDAV240TDU
20 2 ST10000NM001G
21 2 ST16000NM002J
22 2 ST2000VN000
23 2 ST8000DM005
24 2 TOSHIBA MD04ABA500V
25 2 WDC WD30EZRS
26 2 WDC WD3200AAJS
27 2 WDC WD5002ABYS
28 2 WDC WDS250G2B0A
29 3 HGST HUS726040ALE610
... ... ...
90 87 ST320LT007
91 89 Hitachi HDS5C4040ALE630
92 90 ST1500DL003
93 97 ST6000DX000
94 108 HP SSD S700 250GB
95 109 TOSHIBA MG08ACA16TE
96 120 ST10000NM0086
97 130 HGST HUH721212ALE604
98 150 Hitachi HDS5C3030ALA630
99 174 WDC WD30EFRX
100 189 ST14000NM0138
101 190 TOSHIBA MQ01ABF050M
102 216 ST31500341AS
103 221 ST500LM012 HN
104 223 ST16000NM001G
105 226 ST12000NM001G
106 235 Hitachi HDS722020ALA330
107 247 HGST HMS5C4040ALE640
108 258 ST14000NM001G
109 291 HGST HUH721212ALN604
110 345 TOSHIBA MQ01ABF050
111 395 HGST HMS5C4040BLE640
112 397 ST31500541AS
113 818 ST8000DM002
114 858 TOSHIBA MG07ACA14TA
115 897 ST12000NM0008
116 1308 ST8000NM0055
117 1708 ST3000DM001
118 2040 ST12000NM0007
119 5260 ST4000DM000

120 rows × 2 columns