Differences between revisions 2 and 3
Revision 2 as of 2022-09-26 09:34:49
Size: 5553
Editor: Kurgan
Comment:
Revision 3 as of 2022-09-26 09:49:52
Size: 7916
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 144: Line 144:


= HPA e DCO =

I dischi moderni hanno un meccanismo di remapping dei settori tale per cui ci sono aree del disco che sono "nascoste", che noi utenti non vediamo e che non possono essere accedute normalmente semplicemente usando "dd" o qualsiasi altro mezzo che legga o scriva settori del disco. Queste aree sono usate come "scorta" per rimappare i settori danneggiati, per esempio. Durante l'uso può succedere che dei dati utente vengano rimappati in queste aree e che alcuni dati utente rimangano in queste aree. In teoria un secure erase (meglio di un DD if=/dev/zero, il quale non le vede) dovrebbe cancellare TUTTO, anche queste aree. Tuttavia la realtà dipende dal firmware del disco e non abbiamo alcun modo per esserne sicuri.

Un disco con HPA attivo ci dovrebbe dire quanti settori sono "riservati" per la HPA, o meglio quanti settori ci sono sul disco e quanti ne possiamo vedere, la differenza sono quelli riservati:
 {{{
hdparm -N /dev/sdx

/dev/sdx:
max sectors = 78125000/78165360, HPA is enabled
}}}

Disattivando la HPA possiamo vedere in teoria tutti i settori, e a questo punto un "dd" dovrebbe in effetti agire su tutti i settori. Vale la pena di notare che se ci sono settori difettosi che erano stati nascosti dal firmware del disco ora dovremmo vederli tutti e quindi incappare in potenziali errori di I/O su detti settori. (nel comando che segue, il numero è il numero dei settori TOTALI del disco, letto prima)

 {{{
hdparm -N p78165360 /dev/sdx

/dev/sdx:
setting max visible sectors to 78165360 (permanent)
max sectors = 78165360/78165360, HPA is disabled
}}}

Non ho provato, ma immagino che dando lo stesso comando con il numero di settori ridotto (lo stesso che abbiamo visto all'inizio) si riattivi l' HPA con le stesse impostazioni. Va da sè che è probabile che dando questi comandi possiamo in qualche modo danneggiare la mappatura logica dei settori e quindi corrompere i dati contenuti nel disco. Ma se li vogliamo cancellare non vedo problemi.


A riguardo del DCO, si tratta di un'area dove sono tenute configurazioni del controller stesso, e non dovrebbe contenere dati utente. Resettare il DCO è potenzialmente distruttivo ed è super-sconsigliato. Se volete farlo, comunque...

 {{{
hdparm --dco-identify /dev/sdX

hdparm --yes-i-know-what-i-am-doing --dco-restore /dev/sdX
}}}

HDPARM

Hdparm serve a interagire con i dischi, e permette di fare anche cose distruttive. Attenzione, quindi.

Questi che seguono sono esempi pratici di funzioni che mi e` capitato di usare. Consiglio di leggere la man page di hdparm relativamente alle funzioni che intendete usare.

Power management

I dischi SATA (e non solo) possono essere configurati per gestire l'alimentazione spegnendosi in caso di inattivita`. Questo puo` essere un bene o un male a seconda dei punti di vista.

Con hdparm e` possibile agire (sempre se il disco accetta i comandi) sulle regole di gestione della alimentazione.

Per vedere lo stato attuale di un disco SATA, si usa

hdparm -C  /dev/sdX

Per alterare il timer interno al disco che determina il passare in stato di basso consumo, si puo` usare

hdparm  -S NN /dev/sdX

dove "NN" e` un numero da 0 a 255, nel quale ogni unita` rappresenta 5 secondi di tempo (12 = un minuto).

Volendo impostare al boot alcuni parametri del disco, fra i quali per esempio il power mangement, e` possibile (in Debian, almeno) inserire delle righe dentro a /etc/hdparm.conf. Un esempio che fa la stessa cosa del comando "-S" indicato prima e` questo:

/dev/disk/by-label/Secondario {
        spindown_time=12
}

Uso "/dev/disk/by-label/Secondario" anziche` "/dev/sdb" cosi` questo comando agisce solo se e` installato un disco con quel nome, e non genericamente su qualsiasi disco si trovi nella posizione "/dev/sdb".

Secure Erase

La procedura di secure erase dovrebbe distruggere tutti i dati nel disco. A seconda del modello di disco potrebbe fisicamente sovrascrivere con zero, sovrascrivere con un pattern particolare, o semplicemente cancellare e ricreare una chiave crittografica dentro al disco che invalida tutti i dati, senza tuttavia sovrascrivere nulla.

Il secure erase funziona tipicamente solo da interfaccia SATA o SAS e non tramite USB. In realtà esistono alcuni modelli di chipset USB che supportano correttamente sia tutti i comandi possibili dello SMART che quelli del secure erase.

Per eseguire il secure erase la procedura è questa:

  • Verificare se è possibile fare il secure erase. In questo esempio è supportato e il disco si trova in uno stato di normale funzionamento.
    hdparm -I /dev/sdx
    ...
    Security: 
            Master password revision code = 65534
                    supported
            not     enabled
            not     locked
            not     frozen
            not     expired: security count
                    supported: enhanced erase
            98min for SECURITY ERASE UNIT. 98min for ENHANCED SECURITY ERASE UNIT.
    ...
  • Impostare una password di sicurezza (è necessario, poi la toglieremo). In questo esempio diamo la password "p" all'utente "u".
    hdparm --user-master u --security-set-pass p /dev/sdX security_password="p"
    
    /dev/sdx:
     Issuing SECURITY_SET_PASS command, password="p", user=user, mode=high
  • Verifichiamo se ha preso la password
    hdparm -I /dev/sdx
    ...
    Security:
            Master password revision code = 65534
                    supported
                    enabled
            not     locked
            not     frozen
            not     expired: security count
                    supported: enhanced erase
            Security level high
    ...
  • Eseguire il secure erase (ora hdparm si appenderà e rimarrà appeso fino alla fine del secure erase)
    hdparm --user-master u --security-erase p /dev/sdX security_password="p"
    
    /dev/sdx:
     Issuing SECURITY_ERASE command, password="p", user=user
  • Verificare se alla fine il disco è ancora lockato. Non dovrebbe esserlo, ma se lo è lo sbloccheremo.
    • Verifica del lock: se riporta enabled e locked come sotto, dobbiamo sbloccarlo

      hdparm -I /dev/sdx
      ...
      Security:
              Master password revision code = 65534
                      supported
                      enabled
                      locked
              not     frozen
              not     expired: security count
                      supported: enhanced erase
              Security level high
      ...
    • Sblocco e disattivazione della sicurezza:
      hdparm --user-master u --security-unlock p /dev/sdX security_password="p"
      
      /dev/sdx:
       Issuing SECURITY_UNLOCK command, password="p", user=user
      
      
      hdparm --user-master u --security-disable p /dev/sdX security_password="p"
      
      /dev/sdx:
       Issuing SECURITY_DISABLE command, password="p", user=user
    • Verifichiamo se è sbloccato come dovrebbe:
       hdparm -I /dev/sdx
      ...
      Security:
              Master password revision code = 65534
                      supported
              not     enabled
              not     locked
              not     frozen
      ...
  • Verifichiamo, se vogliamo, se è pulito. Se e solo se il secure erase consiste nello scrivere zeri su tutto il disco, possiamo usare questo comando per verificare se è vero che ci sono solo zeri. Alcuni SSD potrebbero portarsi a leggere solo "FF" invece di solo zeri, in quel caso il concetto non cambia. Usando hexdump possiamo verificare che il disco sia pieno di byte tutti uguali in quanto hexdump mostra la prima riga e poi smette di mostrare output se tutto cio` che legge è sempre uguale.
    dd if=/dev/sdX bs=8192 status=progress | hexdump
    
    0000000 0000 0000 0000 0000 0000 0000 0000 0000
    *
    1000157208576 bytes (1.0 TB, 931 GiB) copied, 5708 s, 175 MB/s  
    122095323+0 records in
    122095323+0 records out
    1000204886016 bytes (1.0 TB, 932 GiB) copied, 5710.29 s, 175 MB/s
    e8e0db6000

Notare che durante il secure erase il processo di hdparm resta "appeso" ma io ho piu` volte disconnesso il disco (lasciandolo alimentato) e il secure erase e` continuato in autonomia senza tenere bloccato il PC e l'interfaccia. Una volta avviato il secure erase il disco rimane acceso e non va in stand-by fino alla fine dell'erase.

HPA e DCO

I dischi moderni hanno un meccanismo di remapping dei settori tale per cui ci sono aree del disco che sono "nascoste", che noi utenti non vediamo e che non possono essere accedute normalmente semplicemente usando "dd" o qualsiasi altro mezzo che legga o scriva settori del disco. Queste aree sono usate come "scorta" per rimappare i settori danneggiati, per esempio. Durante l'uso può succedere che dei dati utente vengano rimappati in queste aree e che alcuni dati utente rimangano in queste aree. In teoria un secure erase (meglio di un DD if=/dev/zero, il quale non le vede) dovrebbe cancellare TUTTO, anche queste aree. Tuttavia la realtà dipende dal firmware del disco e non abbiamo alcun modo per esserne sicuri.

Un disco con HPA attivo ci dovrebbe dire quanti settori sono "riservati" per la HPA, o meglio quanti settori ci sono sul disco e quanti ne possiamo vedere, la differenza sono quelli riservati:

  • hdparm -N /dev/sdx
    
    /dev/sdx:
    max sectors   = 78125000/78165360, HPA is enabled

Disattivando la HPA possiamo vedere in teoria tutti i settori, e a questo punto un "dd" dovrebbe in effetti agire su tutti i settori. Vale la pena di notare che se ci sono settori difettosi che erano stati nascosti dal firmware del disco ora dovremmo vederli tutti e quindi incappare in potenziali errori di I/O su detti settori. (nel comando che segue, il numero è il numero dei settori TOTALI del disco, letto prima)

  • hdparm -N p78165360 /dev/sdx
    
    /dev/sdx:
    setting max visible sectors to 78165360 (permanent)
    max sectors   = 78165360/78165360, HPA is disabled

Non ho provato, ma immagino che dando lo stesso comando con il numero di settori ridotto (lo stesso che abbiamo visto all'inizio) si riattivi l' HPA con le stesse impostazioni. Va da sè che è probabile che dando questi comandi possiamo in qualche modo danneggiare la mappatura logica dei settori e quindi corrompere i dati contenuti nel disco. Ma se li vogliamo cancellare non vedo problemi.

A riguardo del DCO, si tratta di un'area dove sono tenute configurazioni del controller stesso, e non dovrebbe contenere dati utente. Resettare il DCO è potenzialmente distruttivo ed è super-sconsigliato. Se volete farlo, comunque...

  • hdparm --dco-identify /dev/sdX
    
    hdparm --yes-i-know-what-i-am-doing --dco-restore /dev/sdX

LinuxDebian/HdParm (last edited 2022-09-26 09:49:52 by Kurgan)