Cancellare un disco con i comandi ATA

Avevamo già trattato l’argomento della cancellazione di un disco, questa volta vediamo come farlo utilizzando i comandi ATA, che operano ad un livello inferiore rispetto a quello che avevamo trattato la scorsa volta.

Lo scopo delle istruzioni che seguono è di inviare al disco da cancellare il comando Secure Erase (SE). Questo comando è disponibile anche su molti dischi SCSI e su alcuni dischi FC.

SE dice al firmware del hard disk di sovrascrivere tutte le aree dati del disco, indipendentemente dal fatto che siano raggiungibili dal sistema operativo, quindi anche quelle non partizionate. Nel caso in cui un disco sia scollegato dall’alimentazione durante il processo di cancellazione, appena questo viene alimentato riprende la cancellazione. Per evitare che qualcuno spenga il disco e lo connetta ad un altro firmware prima del termine della cancellazione, SE cambia la chiave con cui i dati vengono scritti sul disco, rendendo impossibile il recupero dei dati in tempi ragionevoli.

Secondo alcune fonti, questa procedura potrebbe migliorare le performance dei dischi allo stato solido (SSD).

HIC SUNT LEONES!

Queste operazioni devono essere eseguite su hardware sacrificabile, non utilizzate il vostro computer di lavoro o l’unico computer che avete per compiere le operazioni descritte di seguito. C’è il rischio concreto che il testo che segue contenga indicazioni che portino a danneggiare irreparabilmente l’hardware e comportino la perdita definitiva di dati. Questo tipo di attività va eseguito con coscienza di causa e ogni tipo di responsabilità è a carico di chi esegue queste operazioni.

HIC SUNT LEONES!

Innanzi tutto gli strumenti per operare:

  • un PC che possa partire da un dispositivo removibile (CD o chiavetta USB)
  • l’hard disk da cancellare
  • un dispositivo bootable con una distribuzione Linux che contenga hdparm.

Per questo esempio ho utilizzato Ubuntu 10.10 caricata su una chiavetta USB, un Dell Dimension 9200 e un disco SATA Western Digital WDC WD6400AAKS-75A7B0 con firmware versione 01.03B01.

Il disco deve essere per forza collegato al bus SATA/eSATA/PATA; se è collegato via USB o FireWire, hdparm non può funzionare perché ha bisogno di inviare comandi ATA. Esistono alcune emulazioni ATA-USB che supportano alcuni comandi ATA, ma il tempo richiesto da SE per completare la cancellazione potrebbe venire interpretato dall’emulatore come un timeout del disco e potrebbe rendere definitivamente inutilizzabile il disco.

La teoria è di avviare Ubuntu, dare il comando di cancellazione, attendere e vedere il risultato. La pratica potrebbe richiedere qualche operazione aggiuntiva.

Una volta avviato il sistema operativo, verifichiamo il contenuto del disco, nel mio caso /dev/sda:

Disk /dev/sda: 640.1 GB, 640135028736 bytes
255 heads, 63 sectors/track, 77825 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xacdd9b22

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       77825   625129281   83  Linux

Come verifica, ho provato a montare la partizione e ho trovato quello che c’era, ovvero un vecchio backup con dei dati che sono riuscito a leggere senza problemi.

Vediamo innanzi tutto le caratteristiche del disco con il comando

# hdparm -I /dev/sda

il cui output è

ATA device, with non-removable media
	Model Number:       WDC WD6400AAKS-75A7B0
	Serial Number:      WD-WCASY0365223
	Firmware Revision:  01.03B01
	Transport:          Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5
[...]
Security:
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
		frozen
	not	expired: security count
		supported: enhanced erase
	118min for SECURITY ERASE UNIT. 118min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50014ee201915086
	NAA		: 5
	IEEE OUI	: 0014ee
	Unique ID	: 201915086
Checksum: correct

Notare la parola frozen. Se prima c’è un not siamo a cavallo, altrimenti bisogna disabilitare lo stato di frozen.

In alcuni PC basta spegnere il computer, scollegare il cavo per qualche decina di secondi o sconnettere l’alimentazione del disco e riavviare. Molti BIOS, incluso quello Dell, mandano il comando freeze ai dischi in fase di boot per impedire che qualche malware faccia esattamente quello che noi vogliamo fare.

In questo caso l’unica soluzione è sconnettere l’alimentazione del disco e riconnetterla dopo una decina di secondi a PC acceso. Roba da brivido per qualcuno, ma non ci sono alternative. Ubuntu non ha problemi se gli spegnete e riaccendete un disco sotto al naso.

In un modo o nell’altro, dobbiamo arrivare ad un disco not frozen:

Security:
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	118min for SECURITY ERASE UNIT. 118min for ENHANCED SECURITY ERASE UNIT.

Notiamo anche che hdparm ci dice quanto potrebbe durare l’operazione di cancellazione che stiamo per fare. Nel mio caso l’operazione è durata quasi tre ore anziché 118 minuti, ma ho utilizzato un disco con dei settori danneggiati, la qual cosa potrebbe aver allungato la durata della cancellazione.

Ora dobbiamo impostare una password, nel nostro caso pippo, per bloccare il disco e predisporre la cancellazione sicura:

# hdparm --user-master u --security-set-pass pippo /dev/sda
security_password="pippo"

/dev/sda:
 Issuing SECURITY_SET_PASS command, password="pippo", user=user, mode=high

Una volta impostata la password verifichiamo con il solito comando hdparm -I /dev/sda che il disco sia pronto:

Security:
	Master password revision code = 65534
		supported
		enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	Security level high

Capiamo che il disco è pronto a ricevere il comando di cancellazione perché è sparito il not prima di enabled. A questo punto il comando di distruzione dei dati:

# hdparm --user-master u --security-erase pippo /dev/sda
security_password="pippo"

/dev/sda:
 Issuing SECURITY_ERASE command, password="pippo", user=user

Il comando dura un bel po’, nel nostro caso un paio d’ore. Se l’operazione viene interrotta dallo spegnimento del disco, questa riprenderà appena il disco viene alimentato. Non c’è modo di interrompere l’operazione e il disco non è disponibile finché l’operazione non è terminata.

Terminata la cancellazione, hdparm -I /dev/sda deve ritornare lo status di not enabled:

Security:
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	118min for SECURITY ERASE UNIT. 118min for ENHANCED SECURITY ERASE UNIT.

Eseguendo fdisk non viene rilevata alcuna partizione e dd rivela che ogni byte del disco è stato azzerato. Il disco è di nuovo utilizzabile. Missione compiuta.

Riferimenti e link utili:

Aggiornamento 4/4/2011 – Ho provato a spegnere il computer durante la procedura di SE di un disco Western Digital WD20EADS da 2 Tb. Alla riaccensione il disco accettava solamente il comando di secure erase. Per uscire da questo stallo l’unica soluzione è stata il comando security unlock:

# hdparm --user-master u --security-unlock pippo /dev/sda
security_password="pippo"

/dev/sda:
 Issuing SECURITY_UNLOCK command, password="pippo", user=user

Una volta eseguito questo comando, il disco è tornato disponibile per le normali operazioni. La lezione imparata è stata quella di annotare scrupolosamente la password utilizzata, se non si usa una password… standard.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

5 pensieri riguardo “Cancellare un disco con i comandi ATA”

  1. Mi hai fatto venire voglia di leggere il manuale di hdparm finora usato solo per test grossolani sulle performance del disco.

    Ho scoperto che offre oltre 700 righe di opzioni interessanti (anche se marcate come EXTREMELY DANGEROUS….)

    Mi associo a Kurgan: veramente molto interessante.

  2. Grazie, ma siamo fatti per lavorare ogni giorno con le cose “EXTREMELY DANGEROUS”, nevvero? 🙂

    Vi diro’, sebbene il disco che ho usato per fare questo test fosse gia’ decommissionato perche’ difettoso, mi e’ corso un brividino quando i 118 minuti son diventati 120, 150, 160 e 180. Ci ha impiegato TRE ORE a fare il dannato Secure Erase (forse per colpa dei bad blocck), credevo di aver brickato il disco e di dover ricominciare tutto dall’inizio con un altro disco.

Spazio per un commento