Sabato, 19 Dicembre 2015 18:31

Usare dd per cancellare per bene un Hard Disk

Rate this item
(1 Vote)

Con l'arrivo del nuovo HP il vecchio acer travelmate è di troppo oramai, e quindi mi appresto a venderlo, sperando di tirarci su un'ottantina di euro. Per venderlo però è il caso che l'hard disk venga formattato per bene, in modo da non lasciare alcuna traccia recuperabile di sè... non che abbia 'sti segreti, ma non si sa mai.

L'operazione si esegue scrivendo tutti zeri in ogni blocco del disco, o anche dei numeri totalmente casuali, cosicché non sia possibile estrarre alcuna informazione precedentemente immagazzinata al loro interno. In teoria nemmeno questo è un metodo sicuro, e dicono che ci vogliono almeno 7 passaggi, e che comunque la traccia magnetica è leggibile....ma se devo solo formattarlo per bene, per poi rimetterci il software di fabbrica, va bene così.

Linux offre il potentissimo e potenzialmente pericoloso comando dd per fare questo tipo di operazioni, e di guide ce ne sono tante, tra cui questa, da cui ho preso spunto per iniziare. Tuttavia ho incontrato un problemino che mi va di scrivere, ed eccomi qui.

Si parte da una usb avviabile con Linux... una qualsiasi va bene.

Anzitutto spaventato dal fatto che il comando dd non dia un indicazione di avanzamento ho usato un suo "derivato": dcfldd. Ho quindi fatto in modo di avere l'hard disk in questione già bello e vuoto, poi ho dato il comando

 ~ $ sudo apt-get install dcfldd
~ $ sudo dcfldd if=/dev/urandom of=/dev/sda bs=512

considerato che sda era L'UNICO hard disk. OCCHIO che se fate questa cosa da un sistema Linux funzionante o da live su un pc che ha già un suo HD, se mettete /dev/sda distruggete quello, quindi OCCHIO!

Vabene, è partito...e mi da come indicazione di avanzamento il blocco in cui sta scrivendo ed il corrispondente in MB.

Ad un certo punto però mi ha restituito un errore:

7425256 written. dcfldd:: Input/output error

evidentemente l'HD ha un problema in qualche settore. Dopo varie ricerche ho trovato che posso usare l'opzione seek=n che fa in modo di saltare i primi n blocchi e proseguire da lì in poi. Tentando di usare come n il numerello derivante dall'errore, continuava a ripetere lo stesso messaggio, quindi sono andato avanti finchè non ho trovato il primo blocco da cui è riuscito a ripartire:7428512, esattamente 256 settori dopo. Pertanto con il comando

 ~ $ sudo dcfldd if=/dev/urandom of=/dev/sda bs=512 seek=7428512

è ripartito ed ha terminato la scrittura fino a che non ha dato il messaggio "no space left in device".

La cosa strana è che non ho mai avuto problemi con l'hard disk... boh!

Comunque ho cercato un pò come fare per riallocare i settori daneggiati usado alcuni settori liberi che vengono messi in più nei dischi apposta per questo. Per prima cosa ho controllato che non ci fossero settori già riallocati, quindi se ce ne sono di disponibili:

 sudo smartctl -a /dev/sda |grep -i reallocated

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0

questo ci dice che non ci sono dei settori che sono stati utilizzati per essere riallocati (gli zeri nel'ultima colonna - raw_value). Nel caso si stia utilizzando una distribuzione che non ha smartctl occorrerà installare smartmontools.

Il programma che permette di poter eseguire la riallocazione è hdparm. Questo programma è infatti in grado di leggere e scrivere un singolo settore del disco. I moderni dischi sono fatti in modo che un settore si riallochi da solo quando una operazione di scrittura su di esso fallisce. Invece se fallisce una operazione di lettura si ha solo un errore di I/O. Pertanto si può provare a forzare una riallocazione eseguendo un comando di scrittura sul settore danneggiato, proprio con hdparm.

Per sicurezza, controlliamo che il settore sia effettivamente danneggiato:

 ~$ sudo hdparm --read-sector 74528256 /dev/sda

/dev/sda: Input/output error

dovendone controlalre 256 uno scriptino può essere utile. Creo un file con il seguente testo


#!/bin/bash
sector=74528256
while [ $sector -le 74528512 ]; do
sudo hdparm --read-sector $sector /dev/sda |grep succeded > /dev/null
status=$?
echo $sector $status
let sector=sector+1
done

gli do i permessi di esecuzione e lo eseguo

~ $ sudo chmod +X script
~ $ ./script

In pratica eseguo il comando per tutti i settori che credo danneggiati e scrivo a video il settore controllato con il corrispondente status, ovvero 1 se ho avuto successo, 0 altrimenti così posso vedere chi mi da il problema. Se effettivamente ottengo un errore in uno o più di quei settori allora procedo con lo script (analogo) per la riallocazione 


#!/bin/bash
sector=74528256
while [ $sector -le 74528512 ]; do
sudo hdparm --write-sector $sector --yes-i-know-what-i-am-doing /dev/sda
echo $sector written
let sector=sector+1
done

a questo punto provando di nuovo il comando

 ~ $ sudo dcfldd if=/dev/urandom of=/dev/sda bs=512 seek=7428256

non ho più l'errore e va avanti tranquillo, nonostante, e devo ancora capire il perchè, non risultino settori riallocati se eseguo di nuovo il controllo

~ $ sudo smartctl -a /dev/sda |grep -i reallocated

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0

mah! comunque il disco è in salute e bello cancellato e queso mi basta. Tanto per verificare l'avvenuto ripristino ho anche provato a riazzerarlo partendo dal principio

 ~ $ sudo dcfldd if=/dev/zero of=/dev/sda bs=512

ed è filato tutto liscio.

Read 3483 times Last modified on Giovedì, 02 Marzo 2017 13:47

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.

Annuncio pubblicitario by google

Questo sito utilizza cookies per amministrare autenticazioni, navigazione, statistiche di accesso e/o altre funzioni. Continuando la navigazione nel sito acconsentite che questi tipi di cookie vengano memorizzati nel vostro dispositivo.

Visualizzare la Politica sui Cookies

Visualizzare il Documento della Direttiva sulla e-Privacy

Avete Rifiutato i cookies. Questa decisione puo'essere modificata.

Avete acconsentito all'uso dei cookies. Questa decisione puo' essere modificata.