badblocks è uno di quegli strumenti a cui si ricorre quando un disco inizia a comportarsi in modo strano. È presente su quasi ogni sistema Linux, sembra esattamente quello che serve, e una delle sue opzioni cancella il disco che stavi cercando di diagnosticare. Il manuale è insolitamente diretto su tutto questo, quindi ecco cosa dice davvero.
Cosa fa, e cosa non fa
La descrizione è una riga sola: badblocks analizza un dispositivo alla ricerca di blocchi danneggiati. Produce un elenco.
Il suo compito finisce qui. Non ripara nulla. La riallocazione dei settori è gestita dal firmware del disco secondo i suoi tempi, non da uno scanner in user space. L'elenco esiste per essere passato a e2fsck o mke2fs, in modo che il file system sappia quali blocchi lasciare stare.
Questo lo colloca nella stessa categoria di smartctl, che riporta gli attributi SMART senza ripararli a sua volta. Entrambi ti dicono qualcosa. Nessuno dei due sistema niente.
L'opzione che cancella il disco
Di tutto quello che segue, questa è la parte da ricordare.
L'opzione -w esegue un test in modalità scrittura. Scrive i pattern 0xaa, 0x55, 0xff e 0x00 su ogni blocco del dispositivo, li rilegge uno per uno e li confronta. È un test accurato proprio perché usa l'intera superficie.
Il manuale riporta un avvertimento esplicito:
Non usare mai l'opzione -w su un dispositivo che contiene un file system esistente. Questa opzione cancella i dati! (nel testo originale: «Never use the -w option on a device containing an existing file system. This option erases data!»)
Non c'è modo di annullare, non c'è alcuna preservazione parziale, non esiste il "sovrascrive solo le parti danneggiate". Ogni blocco viene scritto.

Le modalità sicure
Per impostazione predefinita, badblocks esegue un test non distruttivo in sola lettura. Lanciandolo senza alcuna opzione di modalità, legge il dispositivo e segnala ciò che non riesce a leggere. Non viene scritto nulla.
L'opzione -n aggiunge un test non distruttivo in lettura e scrittura: scrive dei pattern ma ripristina il contenuto originale man mano che procede. Il manuale la raccomanda come sostituto di -w quando è presente un file system, ed è onesto sul compromesso: è più lenta, ma preserva i tuoi dati.
-n e -w si escludono a vicenda, il che è una piccola fortuna.
La raccomandazione che quasi nessuno segue
Ecco la parte che sorprende chi usa questo strumento da anni. Il manuale dice, già nella descrizione:
si raccomanda vivamente agli utenti di non eseguire badblocks direttamente, ma di usare piuttosto l'opzione -c dei programmi e2fsck e mke2fs (nel testo originale: «it is strongly recommended that users not run badblocks directly, but rather use the -c option of the e2fsck and mke2fs programs»)
Il motivo è la dimensione dei blocchi. I numeri di blocco prodotti da badblocks dipendono dalla dimensione dei blocchi usata dal file system, e il valore predefinito è 1024 byte. Se il tuo file system ne usa un'altra e non hai passato -b, i numeri nell'output non si riferiscono ai blocchi che pensi. Eseguire la scansione tramite e2fsck -c o mke2fs -c fa sì che la dimensione dei blocchi sia corretta per costruzione.
Quindi l'inquadramento onesto è questo: badblocks è un componente, e gli strumenti che lo richiamano di solito sanno richiamarlo meglio di te.
Perché si rifiuta di toccare un dispositivo montato
Normalmente badblocks rifiuta un test in lettura e scrittura o non distruttivo su un dispositivo montato, perché entrambi possono mandare in crash il sistema o danneggiare il file system, anche se è montato in sola lettura.
Esiste un'opzione -f per scavalcare quel rifiuto, e il commento del manuale al riguardo è una delle righe più memorabili di una man page Linux:
Questo comportamento può essere scavalcato usando l'opzione -f, ma non dovrebbe quasi mai essere usata: se pensi di essere più intelligente del programma badblocks, quasi certamente non lo sei. (nel testo originale: «This can be overridden using the -f flag, but should almost never be used --- if you think you're smarter than the badblocks program, you almost certainly aren't.»)
La mossa corretta è smontare il dispositivo. Il manuale ammette esattamente un'eccezione: un /etc/mtab che sostiene erroneamente che un dispositivo sia montato.
Le opzioni che vale la pena conoscere
Alcune opzioni cambiano la forma di un'esecuzione:
-bimposta la dimensione dei blocchi. Predefinita 1024. È quella che rende l'output significativo oppure privo di senso.-cimposta quanti blocchi vengono testati alla volta. Predefinito 64.-pripete la scansione finché non compaiono nuovi blocchi danneggiati per quel numero di passaggi consecutivi. Predefinito 0, cioè un passaggio singolo.-einterrompe dopo un dato numero di blocchi danneggiati. Utile per rispondere alla domanda "ce ne sono in generale", e il manuale nota che produce un elenco possibilmente incompleto, quindi non usarla quando vuoi il quadro completo.-oscrive l'elenco su un file nel formato chee2fsck -lemke2fs -lsi aspettano.-smostra l'avanzamento, cosa che conta perché un passaggio completo su un disco grande si misura in ore.
Quando testare è la mossa sbagliata
Questa è la valutazione che il manuale non può fare al posto tuo.
Un passaggio completo di badblocks legge, o legge e scrive, ogni blocco del dispositivo. Su un disco in salute è un esercizio lungo ma innocuo. Su un disco che sta già cedendo, sono ore di carico aggiuntivo su un hardware in difficoltà, e ore durante le quali non stai recuperando nulla.
Se i dati contano ancora, l'ordine è: prima l'immagine, poi l'indagine. Clonare con uno strumento progettato per i supporti danneggiati, che riprova e salta in modo intelligente invece di accanirsi sullo stesso settore illeggibile, porta via i tuoi byte dal disco mentre il disco gira ancora. Ne parliamo nella guida su come clonare un disco difettoso con ddrescue. I test falli poi sull'immagine, tutte le volte che vuoi, senza più nulla da perdere.
Quando la scansione conferma che il disco sta cedendo
In breve
badblocks cerca i blocchi danneggiati e annota quello che trova. Non ripara nulla.
La modalità predefinita è in sola lettura ed è sicura. -n scrive e ripristina. -w cancella l'intero dispositivo, e il manuale dice di non usarla mai dove esiste un file system. Il manuale raccomanda anche di non richiamare badblocks direttamente, ma tramite e2fsck -c o mke2fs -c, così la dimensione dei blocchi è corretta. Se si rifiuta di partire perché il dispositivo è montato, smontalo invece di ricorrere a -f.
E se il disco sta morendo invece di essere semplicemente sospetto, non spendere le sue ore residue a testarlo. Copialo prima.
Il comportamento descritto qui, compresi i pattern della modalità scrittura, l'avvertimento contro -w, la raccomandazione di usare e2fsck e mke2fs invece di badblocks direttamente, il rifiuto sui dispositivi montati e i valori predefiniti, è tratto dalla pagina di manuale badblocks(8) distribuita con e2fsprogs 1.47.0. Opzioni e valori predefiniti possono variare tra le versioni; consulta il manuale sul sistema che stai realmente usando. I link commerciali riportano l'attributo rel="sponsored nofollow"; può essere applicata una commissione di affiliazione senza costi aggiuntivi per te.
Recupera i dati del tuo disco fisso → EaseUS
Scansione gratuita · file cancellati, formattati, persi · Windows & Mac



