Trim ed Allineamento su hard disk SSD

Ora che gli SSD (Solid State Drive, ossia Unità a Stato Solido) sono scesi di prezzo è il momento di acquistarne uno.  Prima di mettere all'opera una nuova periferica bisognerebbe sempre informarsi un po' e vedere se vi siano da seguire particolari accorgimenti per non danneggiarla o comunque per farla funzionare al meglio.
In rete c'è molto materiale a riguardo quindi, tralasciando le diverse spiegazioni su cosa siano gli SSD ecc, veniamo al dunque e parliamo delle 2 cose che possono aumentare vita e prestazioni degli SSD: Trim ed Allineamento.

Un tutorial ben fatto e aggiornato lo potrete trovare qui:
https://wiki.archlinux.org/index.php/Solid_State_Drives

E' disponibile anche in lingua italiana ma la versione inglese è più aggiornata a quanto pare.
Vi sono molte spiegazioni di quali siano pregi e difetti degli SSD, spiegazione di TRIM, Allineamento, gestione di Swap, partizioni e molto altro, veramente ben fatto e utilissimo. La documentazione Arch in fondo non si smentisce mai...

 

 

 

TRIM

Il comando TRIM è presente a partire dai sistemi operativi Windows 7 e Windows Server 2008 R2 per quanto riguarda Microsoft, Linux 2.6.33 per quanto riguarda il pinguino, ed Apple come al solito è sempre un po' più indietro e ha una storia a sè...
Ovviamente anche il disco SSD stesso deve supportare tale funzione.
Riassumendo, il funzionamento dell'SSD prevede di distribuire la scrittura dei dati sull'intero disco, cercando così di occupare tutte le celle, questo per evitare di arrivare a fine ciclo di vita con alcune ed altre ancora nuove!
Per quanto riguarda l'eliminazione dei file, essi vengono solamente "marchiati" come eliminati, o meglio, le celle su cui risiedono non vengono liberate ma solamente indicate come libere e scrivibili per successivi nuovi dati.
In questo modo, però, si arriverà presto ad avere un disco pieno di dati, reali o "eliminati" e, al momento del recupero delle celle segnate come "libere", il disco dovrà effettuare due operazioni: liberare le celle e poi scriverci il nuovo dato, con conseguente e significativa perdita di prestazioni. Si parla anche del 20%-30% di prestazioni in meno.
Per ovviare a questo ci viene in aiuto il TRIM, sempre a patto che sia supportato dal disco stesso.
Il TRIM altro non fà che liberare le celle contrassegnate come "libere".

Quindi...

Verifichiamo innanzitutto se il TRIM sia supportato dal disco e in che modo (ho usato Linux, per Windows non ho trovato, ma nemmeno cercato, un comando apposito ma credo basti usare una qualsiasi utility che identifichi i dati del disco):

Usiamo per esempio il comando hdparm:

sudo hdparm -I /dev/sdx | grep TRIM

dove sdx è il disco in questione. Se il risultato sarà del tipo

*    Data Set Management TRIM supported (limit 8 block)
*    Deterministic read data after TRIM

allora il disco supporta il TRIM.

 

Ora vediamo, a seconda del sistema operativo in uso, come verificare se sia già abilitato e, in caso contrario, abilitarlo:

 

Windows

Aprire un prompt dei comandi con permessi di Amministratore ed eseguire il comando:

fsutil behavior query disabledeletenotify

 otterremo due tipi di risposta:

DisableDeleteNotify = 1

oppure

DisableDeleteNotify = 0

0 (zero) Significa che il TRIM è abilitato; viceversa, se la risposta sarà 1, significa che il TRIM non è abilitato.


Per abilitare il TRIM eseguire il comando:

fsutil behavior set disabledeletenotify 0

mentre per disabilitarlo:

fsutil behavior set disabledeletenotify 1

Finito, si può chiudere la finestra,

 

Ubuntu

Su Linux si potrà usare il TRIM solo su partizioni formattate come EXT*. Inoltre la seguente procedura non vale per le partizioni criptate, la procedura è un po' diversa.
Per verificare le partizioni basta eseguire in un terminale il comando:

df -T

A questo punto basta modificare il file /etc/fstab e verificare che non vi sia l'opzione "discard" dopo la descrizione del tipo di partizione.
Quindi, se vi è scritto discard il TRIM è disabilitato, viceversa se non vi è scritto o se la si elimina, il TRIM sarà abilitato. Se si dovesse eliminare la scritta, eliminare anche la virgola che segue la scritta stessa!

Ora, se tutto è andato per il verso giusto, lanciamo il comando apposito e puliamo il disco:

sudo fstrim -v /

dove "/" indica la partizione root, "/home" per la home e così via per tutte quelle che abbiamo abilitato.
Se tutto va a buon fine ci viene riportato il numero di byte "trimmati" ossia liberati e potremmo così impostare un'operazione pianificata che esegua questo compito per noi, ad esempio una volta al giorno.

Creiamo quindi un file chiamato ad esempio "trim" in /etc/cron.daily e inseriamo le seguenti righe:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

Salvare il file e come sempre renderlo eseguibile... chmod +x .
Ovviamente si può inserire il comando per ciascuna partizione desiderata.

 

 

ALLINEAMENTO

L'allineamento è un'altra operazione importante, e non consiste altro che nel garantire che un settore logico cominci esattamente all'inizio di una pagina fisica del disco.
Non è un comando, non è un programma... l'allineamento è un accorgimento in fase di creazione delle partizioni, tutto qua.
Quindi non bisogna fare altro che iniziare a partizionare esattamente da un settore fisico, la guida ora procederà usando un sistema operativo Linux, non ho effettuato alcuna prova su Windows quindi non mi sento di riportare alcun consiglio a riguardo, se non quello che in teoria Windows 7 e 8, in fase di installazione, dovrebbero iniziare automaticamente in modo corretto la loro partizione.

Procediamo quindi con Ubuntu:

Con il comando

sudo fdisk -l /dev/sdx

ed un possibile risultato come questo

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 testine, 63 settori/tracce, 14593 cilindri, totale 234441648 settori
....
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
....

/dev/sda1   *       16065    41174531    20579233+   7  HPFS/NTFS/exFAT
Partition 1 does not start on physical sector boundary.
/dev/sda2        41174595    49576589     4200997+  82  Linux swap / Solaris
Partition 2 does not start on physical sector boundary.
/dev/sda3        49577984    81047551    15734784   83  Linux
/dev/sda4        81047925   234436544    76694310   83  Linux
Partition 4 does not start on physical sector boundary.

Si possono notare le partizioni 1, 2 e 4, identificate come disallineate.
A questo punto c'è poco da fare, si potrebbe provare a ridimensionare le partizioni rischiando però di perdere dati, anche a causa di qualche errore generato dal programma usato. Se possibile, io salverei i dati e rifarei le partizioni da zero, ovviamente bisognerà reinstallare tutto...
Se proprio si vuole provare, consiglio GParted, si crea un Live CD (o una Live USB), si avvia e si ridimensionano le partizioni interessate avendo, però, l'accortezza di selezionare "Allinea a MiB" nell'apposita finestra, ultima casella in basso.
Faccio riferimento alla versione 0.19.1, per versioni passate o future in cui tale opzione fosse da un'altra parte... cercarla ed abilitarla. Mi sembra che nelle versioni passate ci fosse solo una checkbox indicante "Allinea al Cilindro", in tal caso deselezionarla.
Nel caso si dovesse usare un altro programma, assicurarsi che vi sia la possibilità di impostarlo nello stesso modo, o che eventualmente lo faccia in automatico. Insomma, credo si sia capito, bisogna allineare le partizioni al MegaByte non ai cilindri!

gparted-resize

Questa, dunque, la procedura se ci si trova con i dati già presenti nelle partizioni e non si vuole reinstallare tutto.

 

Partiamo, invece, da un disco nuovo, io ho usato il comando fdisk di Ubuntu.
Inoltre, il mio disco avrà 4 partizioni primarie, Windows 7 nella prima e a seguire una linux-swap (2), root (3) e home (4).

Per prima cosa dobbiamo procurarci il valore del settore fisico, già il comando precedente ci dava le stesse informazioni sui settori logico e fisico, se volessimo utilizzare ancora il comando hdparm:

sudo hdparm -I /dev/sdx


dove sdx è sempre il nostro disco SSD.
Tra le numerose righe del risultato, verso l'inizio, possiamo trovare le due voci che ci interessano:

Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes

Il mio disco, come si può notare, ha un settore fisico pari a 4096 byte, quindi dovrò iniziare a partizionare da 4096 in poi.

Lanciamo fdisk in modalità non compatibile con DOS (opzione -c):

sudo fdisk -c -u /dev/sdx


una volta entrati in fdisk, per conoscere i comandi basta digitare la lettera m:

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

Comando (m per richiamare la guida): m
Azione comando
   a  Cambia bootable flag
   b   modifica di bsd disklabel
   c   cambia il flag compatibile con il dos
   d   cancellazione di una partizione
   l   elenco dei tipi di partizione conosciuti
   m   stampa di questo menu
   n   aggiunta di una nuova partizione
   o   creazione di una nuova tabella delle partizioni DOS vuota
   p   stampa della tabella delle partizioni
   q   uscita senza salvataggio delle modifiche
   s   creazione di una nuova disklabel Sun vuota
   t   modifica l'id di sistema di una partizione
   u   modifica delle unità di visualizzazione/di immissione
   v   verifica la tabella delle partizioni
   w   scrivi la tabella su disco ed esci
   x   ulteriori funzioni (solo per esperti)


A questo punto

- n   per creare la prima partizione,
- p   per primary
- ci chiede ora il primo settore, inserisco 4096 e confermo
- ci chiede l'ultimo settore, digito +100G e confermo

se digitiamo p verrà visualizzata la prima partizione da 100GB appena creata, non è ancora scritta, per farlo bisognerà premere w.
Creiamo la seconda partizione, tutto come prima ma come primo settore dovremmo inserire la fine +1 della precedente, per non trascrivere ogni volta un numero abbastanza lungo, basta inserire un valore maggiore di 4096 (ma inferiore della fine dell'ultima partizione usata), a questo punto fdisk ci dirà che il settore è già in uso e ci proporrà un valore predefinito che corrisponderà al primo settore libero dopo tutte le partizioni, a questo punto basta solo confermare col tasto INVIO e passare all'operazione successiva, cioè il settore finale, così via per tutte e 4 le partizioni.

Lettera p alla fine di tutto e dovrebbe mostrare le 4 partizioni create. Ora, con la lettera t indicheremo il tipo di partizione... linux, ntfs, linux swap ecc...
Con la lettera L otterremo una lista di tutte quelle accettate, ad esempio 7 per NTFS, 82 per SWAP e 83 per il tipo Linux, poi si formatteranno in fase di installazione dei vari sistemi operativi.

Voglio anche rendere avviabile la prima partizione, su cui risiederà Windows, quindi:

a   e confermo
- ci chiede il numero della partizione da rendere bootable, scrivo 1 e confermo


Per scrivere il tutto definitivamente su disco basta premere w e confermare, il programma apporterà le modifiche al disco ed uscirà.

Per verificare che tutto sia corretto, ridiamo il comando

 sudo fdisk -l /dev/sdx

e non dovremmo ottenere ovviamente risultati del tipo

Partition 1 does not start on physical sector boundary.

 

 

Leggendo il wiki consigliato ad inizio articolo ci sono moltissimi altri suggerimenti su come aumentare ulteriormente la vita di un SSD, ad esempio spostando su dischi magnetici le directory /var e /tmp, oppure non creando una partizione di swap (anche qui con le dovute premesse) o spostando anch'essa in un disco a supporto magnetico e molti altri consigli utili.
Un'azione alquanto indolore potrebbe essere quella di modificare leggermente il comportamento di Firefox se lo si usa molto. Questo browser fa largo uso di file temporanei, quindi aumenterebbe molto la scrittura su disco. Potremmo impostare Firefox affinchè smetta di scrivere su disco e usi la RAM, consigliato per PC con più di 2GB di RAM... ma sul mio ne ho 2 e regge benissimo.

Per fare ciò basta:
- Aprire Firefox
- Digitare l'indirizzo di configurazione about:config (nella barra degli indirizzi ovviamente)
- Cercare la voce browser.cache.disk.enable e cambiarla da true a false
- Cercare la voce browser.cache.memory.enable e impostarla a true: se non esiste crearla con tasto destro > nuovo > stringa
- Cercare la voce browser.cache.memory.capacity ed impostarla ad esempio a 200000 (trattasi dei KByte di memoria massima utilizzabile dalla cache)