verificare indipendentemente che TRIM funzioni effettivamente su SSD


13

Ho una LUKSpartizione /dev/sda1che apro con --allow-discards:

cryptsetup --allow-discards luksOpen /dev/sda1 root

Quindi monto il ext4filesystem con l' discardopzione:

grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0

Quindi taglio lo spazio libero sulla partizione montata:

fstrim -v /

con df, vedo /ha l'80% di spazio libero. Ciò significa che /dev/sda1, l'80% del disco è costituito da zero binari.

Se clonassi l'immagine con cat

cat /dev/sda1 > sda1.img

e comprimere l'immagine con xz, mi aspetterei che tutti gli zeri sul disco fossero compressi. Poiché il 20% dei dati sul disco è crittografato, dovrebbe apparire casuale e non comprimibile. Pertanto, l'immagine compressa da xz dovrebbe essere aprox. 20% della dimensione grezza.

Tuttavia, l'immagine risultante compressa con xz ha approssimativamente le stesse dimensioni dell'originale grezzo.

Il mio ragionamento è corretto?

Perché la mia teoria non si traduce in pratica?


2
unix.stackexchange.com/a/85880/30851 e anchedmsetup table | grep allow_discards
frostschutz

Risposte:


8

La tua logica non è errata. Ma è valido solo se alcune condizioni sono soddisfatte.

Il comando TRIM , come specificato nel set di comandi ATA , può azzerare o meno i settori nei quali viene emesso.
In realtà, lo standard si concentra su quali dati devono essere restituiti dopo l'emissione di TRIM 1 :

I seguenti comportamenti sono specificati da questo standard per i settori che il dispositivo taglia (vedi 7.5.3.3):

a) non deterministico: i dati in risposta a una lettura di un settore tagliato possono cambiare per ogni lettura fino a quando il settore non viene scritto dall'host;
b) Deterministic Read After Trim (DRAT): i dati restituiti in risposta a una lettura di un settore tagliato non cambiano, ma possono essere diversi dai dati precedentemente restituiti; e
c) Leggi zero dopo il trim (RZAT): i dati restituiti in risposta a una lettura del settore tagliato sono zero.

[...] Per entrambi i dispositivi di archiviazione DRAT e non deterministici, i dati restituiti in risposta a un comando di lettura a un LBA che è stato tagliato con successo:

a) possono essere i dati precedentemente restituiti per l'LBA specificato;
b) può essere un modello generato dal dispositivo di memorizzazione; e
c) non sono dati precedentemente scritti in un diverso LBA dall'host.

Pertanto, ciò che il dispositivo restituisce dopo fstrimdipende dalle funzionalità implementate. A meno che non supporti RZAT, il presupposto che i dati letti da un dispositivo tagliato siano solo zeri non è valido.

Puoi usare hdparmper verificare questo:

sudo hdparm -I /dev/sdX | grep -i trim

Ho eseguito alcuni test usando due SSD sdae sdb. Stesso produttore, diversi modelli, con diversa conformità ATA:

$ sudo hdparm -i /dev/sdb
 ...
 Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7
 ...

$ sudo hdparm -i /dev/sda
 ...
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7
 ...

I due SSD hanno un supporto diverso per TRIM:

$ sudo hdparm -I /dev/sda | grep -i trim
           *    Data Set Management TRIM supported (limit 1 block)

$ sudo hdparm -I /dev/sdb | grep -i trim
           *    Data Set Management TRIM supported (limit 8 blocks)
           *    Deterministic read ZEROs after TRIM

Posso confermare che, dopo l'emissione fstrim, l'unità che supporta "Lettura deterministica ZERO dopo TRIM" (RZAT) sembra aver effettivamente azzerato quasi interamente la partizione interessata. Al contrario, l'altra unità sembra aver azzerato (o altrimenti sostituito con qualche modello altamente comprimibile) solo una parte minore dello spazio liberato.

1 Fonte online: INCITS 529: Tecnologia dell'informazione - Set di comandi ATA / ATAPI - 4 (ACS-4)


Nota sui test:

Come sottolineato da frostschutz nei commenti, un read read fstrimpuò restituire dati dalla cache del sistema operativo e non dal dispositivo tagliato. È, ad esempio, ciò che è accaduto in questa domanda .
(Vorrei anche indicare questa risposta alla stessa domanda per un metodo alternativo per testare TRIM).

Tra fstrimuna lettura successiva e la successiva potrebbe essere necessario eliminare la cache, ad esempio con:

echo 3 | sudo tee /proc/sys/vm/drop_caches

A seconda delle dimensioni della partizione con cui stai giocando, non far cadere la cache potrebbe essere sufficiente per il fallimento dei test.


Nota sulla configurazione:

L' discardopzione mount abilita il TRIM continuo, ovvero ogni volta che i file vengono eliminati. Non è richiesto da fstrim. In effetti, TRIM su richiesta e TRIM continuo sono due modi distinti per gestire le operazioni TRIM. Per ulteriori informazioni vorrei indicare l'unità a stato solido sul Wiki di Arch Linux, che ha una copertura dettagliata di questa questione.


Linux potrebbe anche restituire dati diversi da zero dalla sua cache dopo TRIM, anche se l'SSD li rileggerebbe come zero. Questo era un problema con il mio yes-trim-test laggiù unix.stackexchange.com/a/85880/30851 ma potrebbe anche essere correlato alla lettura dei dati grezzi prima e dopo TRIM. Quindi, se non ottieni zero quando ti aspetti, rilascia cache per ogni evenienza.
frostschutz,

@frostschutz Un buon punto! In qualche modo supponevo che, dal momento che l'OP menzionava un volume "root", sarebbe stato troppo grande perché una parte significativa di esso potesse rientrare nella memoria. Ma sicuramente la cache è stata sulla mia strada durante i miei test - che ha fallito miseramente fino a quando non ho iniziato a lasciarlo cadere. Aggiornerò la mia risposta.
fra-san,

2

L'SSD ha un livello di crittografia hardware integrato? Se ne ha uno, i blocchi TRIMmed possono essere tutti zero (o possibilmente tutti) a livello di hardware non elaborato, ma poiché il computer li vede attraverso il livello di crittografia, dopo aver superato il tutto appariranno come incomprensibili pseudo-casuali -zeroe blocco grezzo durante il processo di decrittazione.

Un tale livello di crittografia hardware avrebbe alcuni vantaggi:

  • Consentirebbe una funzionalità di cancellazione della sicurezza molto veloce: basta che l'unità distrugga la chiave originale utilizzata nel livello di crittografia hardware e la sostituisca con una nuova e tutti i dati saranno immediatamente recuperabili per la maggior parte degli scopi pratici.
  • Dato che tutti i dati che colpiscono il livello hardware grezzo verrebbero crittografati, sarebbe garantito un aspetto pseudo-casuale e quindi in gran parte omogeneo. Ciò potrebbe aiutare ad evitare i punti caldi / freddi e semplificare molto la stima dell'usura.


0

df la segnalazione di spazio libero non implica spazio azzerato.

trimindica al dispositivo di archiviazione che i blocchi non sono utilizzati. Non penso che questo li azzeri.

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.