Misurazione dei "byte totali scritti" sotto Linux


36

Siamo piuttosto interessati a esplorare la possibilità di utilizzare unità SSD in un ambiente server. Tuttavia, una cosa che dobbiamo stabilire è la longevità del disco atteso. Secondo questo articolo, i produttori riportano la resistenza dell'unità in termini di "byte totali scritti" (TBW). Ad esempio, da quell'articolo un SSD Crucial C400 è valutato a 72 TB TBW. Esistono script / strumenti nell'ecosistema Linux per aiutarci a misurare TBW? (e quindi prendere una decisione più informata sulla fattibilità dell'utilizzo di unità SSD)

Risposte:


28

Un'altra possibilità è quella di guardare / proc / diskstats . Non è persistente tra i riavvii, ma contiene dati per ogni dispositivo a blocchi. Probabilmente il più interessante per te è il campo 10, che contiene il numero totale di settori scritti. Su un sistema con dischi scsi con una dimensione del settore di 512 byte, è possibile eseguire

awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats

per vedere quanti megabyte sono stati scritti su ciascun dispositivo. L'output sarà simile

sda 728.759
sda1 79.0908
sda2 649.668


4
La dimensione del settore può essere trovata eseguendo il comando #cat / sys / block / sda / queue / hw_sector_size
Antonio

@Antonio grazie! Non sono sicuro di quando è stato aggiunto. Sembra che sia in 3.2 ma non in 2.6.18.
sciurus,

@sciurus potresti spiegare la matematica dietro i tuoi calcoli, per favore? Stai parlando della dimensione del settore = 512 ma i tuoi calcoli stanno dividendo il valore letto con 2/1024
gyre

@gyre Il campo 10 contiene il numero di 0,5 kilobyte di settori scritti. Lo divido per 2 per ottenere il numero di kilobyte scritti. Quindi lo divido per 1024 per convertirlo in megabyte.
sciurus,

@antonio Questo fa visualizzare la dimensione del settore utilizzato con l'hardware sottostante, ma AFAICT dalla sorgente del kernel, iostat fonte, e prove empiriche, il numero "settori" in / proc / diskstats sempre si riferisce a 512 byte, anche quandohw_sector_size è differente ( almeno dalla serie 2.4). Vedi block/cfq-iosched.c, in particolare cfqg_stats_update_dispatch().
Paul

23

Stavo lottando con lo stesso problema sul mio notebook, ma mentre lo riavvio praticamente ogni giorno, la risposta accettata non è stata utile. Ho un SSD mSATA Samsung, che ha l'attributo SMART # 241 Total_LBAs_Written. Secondo la documentazione ufficiale ,

Per calcolare la dimensione totale (in byte), moltiplicare il valore grezzo di questo attributo per 512B.

Quindi il seguente comando mi dà la TB totale scritta sul mio disco SSD (sdb)

sudo smartctl -A /dev/sdb | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" } '

Dato che funziona anche sul mio HDD, suppongo che dovrebbe funzionare praticamente su tutti i moderni hard disk.


3
No, questo esiste solo su alcuni modelli di unità SSD. Non è universale.
Michael Hampton

3
Volevo far notare che l'equazione in realtà produce un numero che è fuori di esso sarebbe più esatto come: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell,

Il mio SSD Intel ha lo stesso attributo ma viene chiamato Host_Writes_32MiB. Inoltre c'è l'attributo 249 NAND_Writes_1GiB. Quindi tieni presente che su ogni SSD questo sembra essere diverso (ad esempio un mio SSD Intel mSATA non ha quegli attributi)
reox

Sul mio Intel SSD Pro 5400s (SATA) Total_LBAs_Writtenè specificato in GB! Non riusciva a dare alcun senso al fatto che lo 4714smart low stesse mostrando. Ma guardando nella casella degli strumenti Intel SSD in Windows è emerso che era in GB.
MrCalvin,

15

Puoi vedere quanti dati sono stati scritti su un filesystem ext4 guardando in / sys / fs / ext4 / $ DEVICE / life_write_kbytes.


Questa è una caratteristica interessante che non conoscevo! Peccato che la maggior parte dei nostri sistemi stiano eseguendo ext3 e anche alcune partizioni LVM non
elaborate

ext3 (e in misura leggermente minore) ext4 non sono progettati per scrivere su flash. L'errore si verificherà in base al numero di volte in cui viene scritta una posizione e, con i filesystem convenzionali, gli hotspot si sviluppano molto rapidamente. Le cifre citate dai produttori sono molto fuorvianti poiché ipotizzano una diffusione uniforme delle scritture. Esistono file system - come JFFS2 - appositamente progettati per prolungare la vita dei tuoi SSD.
symcbean,

2
@symcbean - con i dispositivi flash di oggi, questo è in gran parte un problema. Tutti hanno routine di livellamento dell'usura integrate nei controller di bordo.
SEE

1
@symcbean - Esistono due tipi di dispositivi flash. I dispositivi con tecnologia di memoria (o MTD) presentano un'interfaccia diretta con la memoria flash. Questi si trovano in genere nei dispositivi integrati e sono progettati per il filesystem come JFFS2. L'altro tipo di dispositivo flash nasconde la memoria flash dietro un Flash Translation Later (FTL) in modo che sembri un normale dispositivo a blocchi. Ecco come vengono implementate le tecnologie consumer come SSD, chiavette USB e schede di memoria. I filesystem come JFFS2 non sono appropriati per questi; invece, devi usare filesystem come ext4 che sono progettati per dispositivi a blocchi.
sciurus,

1
ATTENZIONE: ext4 life_write_kbytes e session_write_kbytes non sono rappresentativi delle scritture di celle di memoria SSD. Ho visto un sistema segnalare 15 TB per ext4 life_write_kbytes, mentre lo stesso SSD ha riportato solo 1 TB tramite l'attributo SMART 241. Sospetto che ext4 possa aggiungere l'intera dimensione dello spazio libero del filesystem a tali statistiche ogni volta che fstrim viene eseguito, anche se l'SSD il controller ovviamente non cancellerebbe ripetutamente tutti quei blocchi disponibili se non fossero stati toccati dall'ultima cancellazione. L'output di tune2fs -l sembra essere altrettanto fuorviante.
ʇsәɹoɈ,

2

Si può provare iostat. Fornisce statistiche relative all'utilizzo di IO e CPU. Dai un'occhiata al manuale man iostat.


Suppongo che potrebbe funzionare, ma speravo che ci fosse qualcosa di livello superiore disponibile in grado di fornire totali di byte cumulativi :)
badnews,

2

Per il mio KINGSTON SEDC400S37480G, sotto Ubuntu Server 14.04, utilizzo il seguente script per monitorare TBW. Lo eseguo da cron una volta al giorno. Lo script restituisce un file di registro.

Hai bisogno di calc per farlo funzionare. Installa calc usando:

apt-get install apcalc

Contenuto dello script:

echo "*** $(date -R) ***" >> /scripts/tbw/log.txt
tbw=$(cat /sys/fs/ext4/sda1/lifetime_write_kbytes)
TB=1000000000
echo TB written to sda1: >> /scripts/tbw/log.txt | calc $tbw / $TB >> /scripts/tbw/log.txt

Uscita:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442

Invece di calc, si potrebbe usare GNU bc
Elton Carvalho il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.