Ripristino delle prestazioni e stima della durata di un'unità SSD usata?


70

La mia vecchia unità SSD da 128 GB ha circa un anno e mezzo ormai e da allora ho eseguito l'upgrade a un'altra unità.

Vorrei ripulire il mio vecchio SSD per ...

  • ripristinare le sue prestazioni a livelli quasi nuovi

  • riabilitarlo e generalmente dargli un controllo sanitario

Come procedo a fare questo?


4
Sebbene non riguardi il restauro, potresti trovare questo post sul blog interessante per evitare che ciò accada.
Tamara Wijsman,

1
Potrei averlo perso, ma non ho visto che nessuna delle risposte di seguito fosse " controllata ". Nel caso di questa domanda, sono davvero curioso di sapere cosa è successo alla fine "meglio" per te. (Se ti capita di ricordare ...)
irrazionale John

Risposte:


56

Su Linux, esegui semplicemente

hdparm --trim-sector-ranges start:count /dev/sda

passando gli intervalli di blocco che si desidera TRIM anziché starte counte il dispositivo SSD al posto di /dev/sda. Ha il vantaggio di essere veloce e di non scrivere zeri sul disco. Piuttosto, invia semplicemente comandi TRIM al controller SSD facendogli sapere che non ti interessano i dati in quei blocchi e può presumere liberamente che non siano utilizzati nel suo algoritmo di garbage collection.

Probabilmente dovrai eseguire questo comando come root. Poiché questo comando è estremamente pericoloso, poiché può causare immediatamente una grande perdita di dati, è necessario passare l' --please-destroy-my-driveargomento a hdparm(non l'ho aggiunto alla riga di comando per impedire la perdita accidentale di dati causata da copia e incolla).

Nella riga di comando sopra, /dev/sdadeve essere sostituito con il dispositivo SSD a cui si desidera inviare i comandi TRIM. startè l'indirizzo del primo blocco (settore) a TRIM ed countè il numero di blocchi da contrassegnare come liberi da quell'indirizzo iniziale. È possibile passare più intervalli al comando.

Avendolo fatto personalmente con hdparm v9.32 su Ubuntu 11.04 sul mio laptop con un Crucial RealSSD C300 da 128 GB, devo sottolineare un problema: non sono stato in grado di passare il numero totale di blocchi del disco (0: 250069680) come intervallo . Ho manualmente (essenzialmente "ricerca binaria" a mano) trovato un valore abbastanza grande per il conteggio dei blocchi che ha funzionato (40000) ed è stato in grado di emettere comandi TRIM su una sequenza di 40000 intervalli per liberare l'intero disco. È possibile farlo con un semplice script shell come questo (testato su Ubuntu 11.04 sotto root):

 # fdisk -lu /dev/sda

 Disk /dev/sda: 128.0 GB, 128035676160 bytes
 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors
 ...  

per cancellare l'intera unità, prendere quel numero totale di settori e sostituire 250069680 nella riga seguente con quel numero ed eseguire (aggiungere --please-destroy-my-drive):

 # i=0; while [ $i -lt 250069680 ]; do echo $i:40000; i=$(((i+40000))); done \
 | hdparm --trim-sector-ranges-stdin /dev/sda

E hai finito! Puoi provare a leggere i contenuti non elaborati del disco con hexedit /dev/sdaprima e dopo e verificare che l'unità abbia eliminato i dati.


Naturalmente, anche se non si desidera utilizzare Linux come sistema operativo principale della macchina, è possibile sfruttare questo trucco avviando un CD live ed eseguendolo sull'unità.


3
Ottima scrittura, ma questo purtroppo non funzionerà per gli SSD che non supportano TRIM. Per questo dovrai andare un po 'oltre. Vedi il wiki ATA su kernel.org per istruzioni su come farlo con hdparm. Sarebbe ancora meglio se si potesse modificare la voce originale per includere queste informazioni :)
James,

"fstrim" è una versione semplice di quanto sopra (vedi risposta separata).
Bryce

@Bryce, errato; TRIM è solo consultivo e destinato a motivi di prestazioni, non di sicurezza, il che significa che l'unità è libera di ignorare il comando o ritardare la cancellazione fino a un momento successivo, come la maggior parte delle unità.
psusi,

24

Prima di tutto, iniziamo con la comprensione di ciò che provoca il degrado delle prestazioni. Senza saperlo, molte persone suggeriranno soluzioni inadeguate (come già vedo accadere). Il punto cruciale di questa intera situazione è sostanzialmente dovuto al fatto seguente, come citato da Wikipedia . Ricordalo, è importante:

Con la memoria flash NAND, le operazioni di lettura e programmazione devono essere eseguite pagina alla volta mentre lo sblocco e la cancellazione devono avvenire in modo a blocchi.

Gli SSD sono costituiti da flash NAND e il flash è costituito da "blocchi". Ogni blocco contiene molte "pagine". Per semplicità, immaginiamo di aver appena acquistato un nuovo SSD lucido che contiene un enorme blocco di memoria e quel blocco è composto da 4 pagine vuote.

Per motivi di chiarezza, faccio una distinzione tra pagine vuote, pagine usate e pagine cancellate con ∅, 1 e X. La chiave sta nel fatto che c'è una differenza tra ognuna di queste dal punto di vista dei controller! Non è semplice come 1 e 0. Quindi, per iniziare, le pagine sul nostro nuovo disco sembrano così:

∅, ∅, ∅, ∅ (tutto vuoto)

Ora andiamo a scrivere alcuni dati sull'unità e finisce per essere archiviati in quella prima pagina, quindi:

1, ∅, ∅, ∅

Successivamente, scriviamo un po 'più di dati, solo questa volta abbastanza che richiede due pagine e quindi finisce per essere memorizzato nella seconda e terza pagina:

1, 1, 1, ∅

Stiamo esaurendo lo spazio! Decidiamo che non abbiamo davvero bisogno dei dati iniziali che abbiamo scritto, quindi eliminiamoli per fare spazio .:

X, 1, 1, ∅

Infine, disponiamo di un altro ampio set di dati che dobbiamo archiviare e che consumeranno le restanti due pagine. QUESTO È DOVE IL PERFORMANCE HIT SUCCEDE A GUIDE SENZA BORDO !! Passando dal nostro ultimo stato a questo:

1, 1, 1, 1

... richiede più lavoro di quanto si pensi. Ancora una volta, ciò è dovuto al fatto che il flash può essere cancellato solo in modo a blocchi, non a livello di pagina, il che è esattamente ciò che richiede la transizione finale sopra. Il differenziatore tra SSD TRIM e non TRIM è quando viene eseguito il seguente lavoro!

Poiché è necessario utilizzare una pagina vuota e una pagina eliminata, l'SSD deve prima leggere il contenuto dell'intero blocco in una memoria / memoria esterna, cancellare il blocco originale, modificare il contenuto e quindi riscrivere tali contenuti in il blocco. Non è semplice come una "scrittura", ma ora è diventato una "lettura-cancellazione-scrittura". Questo è un grande cambiamento, e perché accada mentre stiamo scrivendo molti dati è probabilmente il momento più inopportuno per farlo accadere. Tutto potrebbe essere evitato se quella pagina "cancellata" fosse recuperata in anticipo, il che è esattamente ciò che TRIM è destinato a fare. Con TRIM, l'SSD recupera le nostre pagine eliminate immediatamente dopo l'eliminazione o in un altro momento opportuno che gli algoritmi TRIM ritengono appropriati. La parte importante però è che con TRIM non succede quando siamo nel mezzo di una scrittura!

Senza TRIM, alla fine non possiamo evitare lo scenario sopra mentre riempiamo i nostri dischi di dati. Per fortuna alcuni SSD più recenti vanno oltre TRIM e fanno effettivamente la stessa cosa di TRIM in background a livello hardware senza i necessari comandi ATA (alcuni chiamano questa garbage collection). Ma per quelli di noi abbastanza sfortunati da non averne neanche uno, è importante sapere che scrivere zero su tutto il disco non è sufficiente per recuperare le prestazioni originali !!!!! Scrivere tutti gli zeri sull'unità non indica al controller che la pagina in flash è libera per la scrittura. L'unico modo per farlo su un'unità che non supporta TRIM è invocare il comando di cancellazione sicura ATA sull'unità utilizzando uno strumento come HDDErase (tramite Wayback Machine) .

Credo che alcuni dei primi SSD supportassero TRIM solo all'eliminazione delle partizioni o su cose come "diskpart clean all" di Windows 7, e non sulla cancellazione di singoli file. Questo potrebbe essere il motivo per cui un'unità più vecchia sembrava riacquistare le prestazioni eseguendo quel comando. Mi sembra un po 'confuso però ...

Gran parte della mia conoscenza di SSD e hardware / gadget in generale proviene da anandtech.com . Ho pensato che avesse un ottimo commento che spiegasse tutto questo, ma per la vita di me non riesco a trovarlo!



Ho scremato solo questo, ma +1 per aver menzionato la cancellazione sicura di ATA e la citazione per blocco contro per pagina.
Christopher Galpin,

1
Mentre la maggior parte di questa risposta è corretta, la parte relativa alla garbage collection non è corretta. Tutti gli SSD hanno la garbage collection. Non funzionerebbero senza di essa. La garbage collection non è un'alternativa a TRIM. In uno stato vuoto una cella NAND rappresenta un 1 e puoi quindi scriverlo su uno 0. Ma per riportarlo a zero devi cancellare un intero blocco in una volta. Pertanto, anziché sovrascrivere i dati esistenti, qualsiasi modifica viene scritta in un nuovo blocco e i vecchi dati vengono contrassegnati come non validi. La cancellazione di dati non validi è Garbage Collection. TRIM indica all'SSD di contrassegnare i dati come non validi quando vengono eliminati nel sistema operativo.
Sig. Alpha,

Non proprio il signor Alpha. Il termine "Garbage Collection" nasce da controller che in modo proattivo fare il processo che si descrive in tempi ottimali al contrario di limitarsi a reagire quando hanno assolutamente bisogno di farlo (che ancora una volta, si traduce in cattive prestazioni come l'unità si riempie).
James,

1
Forse non avremmo mai dovuto chiamarlo "Garbage Collection" e invece semplicemente soprannominato i "controllori" dei controller più vecchi e reattivi.
James,

17

Apparentemente la raccomandazione standard è quella di fare una scrittura completa di tutti gli zeri. Non sono del tutto sicuro del motivo per cui questo aiuta (non molte scritture alla fine uccidono gli SSD?), Ma sembra essere approvato dai principali forum di supporto SSD del fornitore.

Quindi, per farlo in Windows:

  • avviare un prompt dei comandi con privilegi di amministratore
  • eseguire il comando diskpart

Una volta nell'utilità vedrai un DISKPART>prompt ed emetterai i seguenti comandi:

DISKPART> list disk
DISKPART> select disk x

Ovviamente, ASSICURATI DI AVERE SELEZIONATO IL CORRETTO SSD DRIVE prima di procedere!

DISKPART> clean all
DISKPART> create partition primary
DISKPART> format quick fs=NTFS 

La magia qui è clean allche scrive tutti gli zeri sul disco :

Se si specifica il parametro all, tutti i settori possono essere azzerati e tutti i dati contenuti nell'unità possono essere eliminati.

Dopo aver fatto ciò, posso confermare che le prestazioni del disco sono aumentate sostanzialmente.


11
@Jeff Il motivo per cui scrivere tutti gli zeri può essere utile è stato recentemente spiegato da David Spillett : alcuni controller ipotizzano che i blocchi azzerati possano essere scartati e restituiti al pool di spazio libero, emulando l'effetto del comando TRIM.
sblair,

1
2 punti: in primo luogo, di solito, il comando di cancellazione del flash cancella i blocchi su tutti gli 0xff, quindi sarebbe meglio scriverlo invece di 0. Però, dovrei controllare i fogli dati. Secondo: se stai cercando di ingannare il controller nel TRIM del drive, non sarebbe una buona idea eseguire una sorta di utility che ha semplicemente TRIM su ogni blocco del drive? Personalmente, probabilmente farei entrambi (0xffs e TRIM), ma probabilmente sono un po 'pedante qui.
Dennis Munsie,

2
@dennis certo, se esiste una tale utilità - sentiti libero di indicarmene una.
Jeff Atwood,

1
@Dennis: se l'unità utilizza bit "fisici" "su" e questi vengono tradotti in bit logici su altri punti, allora 0xff potrebbe essere il modello di cui hai bisogno. Tuttavia potrebbero utilizzare la logica invertita, quindi la documentazione o la comunicazione con il produttore è l'unico modo per essere sicuri prima di procedere. Il mio suggerimento di usare sdelete o simili è provare a tagliare i blocchi inutilizzati su un filesystem funzionante. Ovviamente si tradurrà in una scrittura non trim per tutti i blocchi nella mappatura dell'SSD che sono un mix di usato e non usato.
David Spillett,

2
Sono un po 'sbalordito dal fatto che così tante persone siano apparentemente inconsapevoli della cancellazione sicura di un SSD. Non è necessario TRIM ogni singolo blocco. È sufficiente eseguire un'utilità che invia un comando Secure Aase ATA all'SSD e il problema è risolto, indipendentemente dal fatto che l'SSD supporti o meno TRIM.
James,

16

Ho anche trovato uno strumento, SSD Life Pro . Ha delle brutte notizie per me.

SSDLife Pro - la salute dell'unità è negativa!

Quanto a come lo calcola, utilizza gli indicatori SMART SSD. Apparentemente tenta di prevedere in base ai dati SMART :

  • La durata della memoria flash, su cui si basano gli SSD, è limitata a 10.000 scritture per cella
  • la maggior parte delle unità mostra anche dati sulle informazioni scritte e / o lette nei loro parametri SMART

Questo è complicato perché deve anche sapere quando i dati sono stati scritti per stimare, ma ecco i dati sottostanti:

01 Leggi tasso di errore 7
09 Conteggio ore di accensione 7085
Conteggio del ciclo di potenza 0C 318
B8 Conteggio iniziale blocchi errati 15
Conteggio blocchi errori programma C3 0
C4 Cancella conteggio blocchi errori 0
C5 Conteggio blocchi errori di lettura 0
Settori di lettura C6 5468243171
Settori di scrittura C7 41640920876
Comandi di lettura C8 100482453
Comandi di scrittura C9 417315851
Bit di errore CA da Flash 345270
Settori di lettura CB con errore bit correggibile 340001
CC Bad Block Bandiera completa 0
Specifica del conteggio P / E massimo CD 5000
Conteggio minimo cancellazione CE 3774
Conteggio massimo cancellazione CF 65348
D0 Conteggio medio di cancellazione 4837
D1 Durata residua dell'unità 4

Il numero spaventoso è Remaining Drive Life che è il 4 .. percento!

E i calcoli risultanti:

Modello: CRUCIAL_CT128M225
Dimensioni: 128 GB
Numero di serie: xxxxxxxxxxxxxxxxxxx456
Firmware: 2030
Tempi di accensione: 318    
Supporto TRIM in drive / OS: abilitato / abilitato
Tempo di lavoro: 9 mesi 16 giorni 5 ore
Totale dati letti: 2607,46 GB
scritto: 19855,94 GB

Per la cronaca, questo disco è stato originariamente acquistato nell'ottobre 2009, quindi ha poco più di un anno e mezzo.


3
@Jeff Mentre la memoria flash è migliorata nelle dimensioni del processo, il numero di cicli di programma / cancellazione è diminuito . Il valore 0xCD suggerisce di disporre di un'unità basata su 34nm con 5.000 cicli P / E nominali, anziché 10.000.
sblair,

1
@sblair buono a sapersi; Ho provato lo strumento su un nuovo OCZ Vertex 2 e ha campi e valori SMART totalmente diversi.
Jeff Atwood,

2
Quei dati sembrano un po 'fuori - dice che hai scritto quasi 10 volte più dati che hai letto. Non sembra alto? Mi aspetterei più letture di così. Hai un file di paging su quell'unità?
Dennis Munsie,

1
Altri punti dati: ho un SSD simile installato sul MacBook di mia moglie. In precedenza questo era il mio laptop, che veniva utilizzato a scopi di sviluppo. Ho appena guardato le statistiche su quell'SSD, e negli 8 mesi circa della vita di quell'unità, ha avuto un totale di 17 ore di accensione rispetto a 7085 per te (295 giorni). So per certo che la macchina ha funzionato per più di 17 ore in totale, ma sembra che il sistema operativo stia spegnendo in modo aggressivo l'unità.
Dennis Munsie,

2
20 TB scritti su un'unità da 128 GB !? Per cosa stai esattamente usando questa unità?
BlueRaja - Danny Pflughoeft

6

Ho scoperto che scrivere zero attraverso l'unità non è l'approccio migliore. Anche se potrebbe aiutare a breve termine, ho scoperto che sicuramente non ha ripristinato il mio disco alle sue massime prestazioni (ho un vecchio Intel-SSD non abilitato per TRIM). Dopo circa un anno di utilizzo piuttosto intenso, ho iniziato a bloccarmi in 1-2 secondi quando l'SSD tentava di scrivere su qualsiasi file, anche dopo aver azzerato l'SSD.

L'unica cosa che ho scoperto che ripristina completamente le prestazioni è stata una cancellazione sicura usando hdparm. Ho preso l'abitudine di cancellare in sicurezza il mio SSD ogni 6-12 mesi quando inizia a sperimentare qualche piccolo singhiozzo. Qualcuno su Macrumors ha fatto un tutorial specifico per Mac su come fare per i dispositivi mac *.

Secondo tutte le affermazioni che ho visto, una cancellazione sicura invia un comando speciale all'SSD che gli consente di impostare tutti i settori a zero a un livello molto più basso rispetto al solo utilizzo ddo qualcosa del genere.


se l'unità non supporta TRIM, tutte le scommesse sono disattivate.
Jeff Atwood,

1
Jeff errato, una cancellazione sicura è completamente indipendente da TRIM. È un vero comando ATA ed è l'unica cosa che puoi fare per ripristinare completamente le unità che non supportano TRIM. Quando un SSD riceve questo comando, tutte le celle NAND vengono contrassegnate come vuote, ripristinando le prestazioni di scrittura originali delle unità senza la necessità di TRIM. Ci sono numerosi strumenti disponibili che possono farlo, incluso hdparm a cui si fa riferimento finora nella risposta principale.
James,

5

Sul Mac, controlla il DiskTester di digilloydTools . Ci sono anche alcuni punti di dati interessanti lì per vedere gli effetti del ricondizionamento sulle prestazioni dell'unità.


Credo che tutto ciò che fa è scrivere un file molto grande di zero sul tuo SSD. Puoi ottenere i risultati del salvataggio facendo cat /dev/zero > /tmp/bigfile.
Kendall Hopkins,


2

Per controllare la vita di SSD lasciata su una SSD (unità a stato solido), è necessario installare il pacchetto smartmontools. Contiene due programmi di utilità (smartctl e smartd) per controllare e monitorare i sistemi di archiviazione utilizzando il sistema di automonitoraggio, analisi e reportistica (SMART) integrato nella maggior parte dei moderni dischi rigidi ATA e SCSI.

Per le distribuzioni basate su Ubuntu, Mint o Debian

# apt-get install smartmontools

For Fedora, Centos, or Red Hat based distributions
# yum install smartmontools

Media_Wearout_Indicator è ciò che stai cercando. Per 100 significa che il tuo SSD ha una vita del 100%, il numero più basso significa meno vita rimasta.

# smartctl -a /dev/sda | grep Media_Wearout_Indicator

Uscita dal mio laptop

233 Media_Wearout_Indicator 0×0032 100 100 000 Old_age Always – 0

Se vuoi vedere più dettagli e attributi completi dal tuo disco, puoi eseguirlo

# smartctl -data -A /dev/sda

Fonte: namhuy.net/1024/how-to-check-ssd-life-left.html


2

Ora c'è una risposta molto migliore per i sistemi Linux, rispetto alla risposta @LeakyCode:

sudo fstrim -v / boot

Il comando "fstrim" di "util-linx" verrà eseguito attraverso il filesystem ed emetterà comandi TRIM per tutto lo spazio inutilizzato. Su distribuzioni come Ubuntu, questo è disabilitato di default, ad eccezione di un elenco selezionato di unità "conosciute sicure" di Intel e Samsung. Ma il comando può essere eseguito manualmente su qualsiasi partizione per qualsiasi unità.

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.