Può sovrascrivere partizioni adiacenti


15

Voluto

dd if=/dev/zero of=somepartition bs=512

cancellare anche le partizioni dopo somepartitiono interrompere alla fine di somepartition?


5
I dispositivi a blocchi che rappresentano le partizioni, ad esempio /dev/sda1, sono creati dal kernel in modo tale che sia impossibile accedere allo storage adiacente attraverso di essi (supponendo che la tabella delle partizioni non sia stata modificata dopo che il kernel l'ha letto l'ultima volta). Se potessi accedere allo storage adiacente in quel modo, sarebbe considerato un enorme bug.
David Foerster,

Risposte:


18

Sovrascrivi una partizione con dd

ddè uno strumento molto potente ma anche pericoloso. Fa quello che gli dici di fare senza domande. Quindi, se gli dici di cancellare le foto di famiglia, ... ed è un piccolo errore di battitura.

Ma se controlli e ricontrolli, puoi usarlo.

dd if=/dev/zero of=somepartition bs=512

o vorrei suggerire

dd if=/dev/zero of=/dev/sdxn bs=4096

dove si xtrova la lettera dell'unità ed nè il numero di partizione e la dimensione del blocco 4096 byte rende più veloce il processo di scrittura.

In questo caso è importante scrivere su una partizione . Se si scrive sull'intera unità (l'estremità della testina dell'unità) /dev/sdxl'intera unità verrà sovrascritta. Ma la scrittura sulla partizione verrà interrotta alla fine della partizione e le partizioni sottostanti verranno preservate. (Ho testato ora su un pendrive USB in Lubuntu 16.04 LTS, quindi so che funziona così.)

Eccezione per una partizione estesa

Esiste un'eccezione per una partizione estesa (che è un contenitore per partizioni logiche, al fine di avere più di quattro partizioni in una tabella delle partizioni MSDOS). Questo è descritto nel seguente link,

Posso creare un'immagine della partizione 'estesa' usando dd?

Ma c'è anche un altro problema. Ho testato il tuo comando in un ambiente di test e ho letto solo un kibibyte (1024 byte) quando volevo che facesse un'immagine di una partizione estesa.

Ho provato anche questo ora su un pendrive USB in Lubuntu 16.04 LTS, e questo vale per la scrittura (così come per la lettura). Solo il primo kibibyte viene sovrascritto.

Quindi per riassumere, sovrascrivere le partizioni primarie e le partizioni logiche funziona secondo la descrizione principale in questa risposta. Ma non utilizzare questo metodo per sovrascrivere una partizione estesa perché verrà sovrascritto solo il primo kibibyte. Le partizioni logiche della partizione estesa non saranno più trovate tramite la tabella delle partizioni, ma i dati in esse memorizzati sono ancora presenti.


Ho già accettato, ma se è così dovrebbe essere la risposta corretta.
LogicBreaker,

3
@LogicBreaker, forse puoi spostare l'accettazione. Ma questo non è importante. È più importante che tu capisca come usare dde che sia rischioso, quindi stai molto attento quando lo usi. Buona fortuna :-) In generale, dovresti sempre avere un backup di tutti i file, che non puoi permetterti di perdere.
sudodus,

1
Quando scrivi su partizioni nude non hai molte alternative. Mi sono trasferito, altrimenti sarebbe fuorviante per gli altri.
LogicBreaker,

1
Questo è il motivo per cui gli utenti normalmente non possono accedere ai "file" / dev / *.
Thorbjørn Ravn Andersen,

1
Se questa è l' unica copia delle tue foto di famiglia senza backup, sei soggetto a perderle in qualsiasi momento a causa di furto, incendio, incidente o semplice guasto hardware :-)
user334639

4

Le scritture su un dispositivo di partizione non scriveranno al di fuori di quella partizione, con dd o qualsiasi altra cosa. Dovresti usare un dispositivo a disco intero per avere effetti al di fuori di una singola partizione.

(Avvertenza: a meno che il disco non abbia una tabella delle partizioni con partizioni sovrapposte, cosa che non dovrebbe mai accadere.)


3
Un altro avvertimento: se stai usando qualcosa come LVM, la scrittura su un volume fisico può ovviamente influenzare molti volumi logici.
Maxpm

4

Penso che la tua domanda si basi su un malinteso fondamentale su come dd (e in effetti sistemi operativi simili a Unix in generale):

ddpuò partizioni adiacenti non sovrascrittura, semplicemente perché ddCAN partizioni non di sovrascrittura, periodo .

ddscrive semplicemente nei file . Questo è tutto.

Ora, se si passa ddun file che rappresenta molteplici partizioni, quindi ddsovrascrive il file . Ma in quel caso, non sta ddscrivendo oltre la fine della partizione. ddscriverà ancora fino alla fine del file e solo fino alla fine del file.

Ma, se passi ddun file che rappresenta solo una partizione, ddnon scriverà oltre la fine di questa partizione. Ancora una volta, questo non ha nulla a che fare con dd. ddscrive semplicemente nel file in cui gli dici di scrivere. Il fatto che questo file rappresenti una singola partizione è (in questo caso) garantito dal driver del dispositivo a blocchi nel kernel. ddnon c'entra niente.

Quindi, in breve: ddscrive su file. Ciò che questi file rappresentano non è motivo di ddpreoccupazione. ddnon sa nulla delle partizioni.


Mmh ... con dd che scrive solo su file, non puoi usarlo per scrivere su partizioni non elaborate.
LogicBreaker,

1
Corretta. Non è possibile utilizzare ddper scrivere su partizioni non elaborate. Puoi solo scrivere su file. È possibile , naturalmente, scrittura a un file dispositivo a blocchi che rappresenta una partizione (ad esempio /dev/sda1), ma non si può scrivere su una partizione raw. E poiché puoi scrivere solo su un file che rappresenta una partizione, non puoi scrivere oltre la fine della partizione, perché il file rappresenta solo la partizione e non la partizione e un po 'oltre la fine.
Jörg W Mittag,

3
Jorg fa riferimento a una delle idee principali della filosofia Unix: "tutto è un file". Come tale, il kernel presenta brevetti, dispositivi, porte ecc. Come file. Di conseguenza, ogni programma in grado di scrivere su un file può essere utilizzato per scrivere su una partizione o un dispositivo. È compito del kernel imporre il limite della partizione. Puoi aprire il /dev/sdatuo editor di testo e modificare i dati, ddnon è diverso da qualsiasi altro programma in termini di accesso alle partizioni. Ottima risposta!
Sergey,

1

Esiste uno scenario speciale pericoloso, ma raro in cui ciò può accadere anche con driver di dispositivo a blocchi non buggy:

  • La tabella delle partizioni su disco viene modificata in modo che la partizione x venga ridimensionata per terminare con un limite inferiore rispetto a prima. La partizione y dietro di essa viene ridimensionata inizio superiore su un limite inferiore o una nuova partizione y viene aggiunta nello spazio.
  • La partizione y viene riempita con i dati rilevanti mediante metodi indipendenti dalla tabella delle partizioni, ad es. Utilizzando dd con le opzioni skip / count sul dispositivo a blocchi dell'intero disco (ad es.
  • Lo ioctl che dice al kernel di rileggere la tabella delle partizioni non viene emesso o non riesce a causa di dispositivi occupati
  • La partizione x viene scritta da qualsiasi processo che tenta di scrivere su di essa fino a quando non raggiunge una condizione di errore.

0

Devi fare attenzione con dd come se commettessi un errore, puoi sovrascrivere più di quanto ti aspettassi e dipende da cosa stai usando dd per (l'OP era vago nel suo uso di dd e l'esatta sintassi del dd comando).

Se si specifica una partizione, questa verrà scritta su quella partizione fino a quando la partizione non è piena.

Se si commette un errore e si inserisce l'intera unità, ad esempio = / dev / sda, dd scriverà sull'intera unità per terminare ignorando (e sovrascrivendo) la tabella delle partizioni.

Puoi anche dd su una partizione per sovrascrivere i file eliminati (i file eliminati possono rimanere sulla partizione e scoperti da vari strumenti di recupero con vari gradi di successo fino a quando non vengono sovrascritti. In questo caso puoi usare dd per riempire lo spazio libero scrivendo su un file.

dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file

A seconda di ciò che stai facendo, tuttavia, potresti voler utilizzare uno strumento alternativo per eliminare in modo sicuro i file. Vedi Come eliminare i file in modo sicuro? per opzioni.


6
Se potessi scrivere su / dev / sdcX e riuscire a scrivere oltre un limite di partizione, non sarebbe che ignorare la tabella delle partizioni - sarebbe il driver del dispositivo a blocchi nel kernel che viene buggy e ignora la tabella delle partizioni.
Rackandboneman,

1
@sudodus ddnon è così basso livello. In effetti, la maggior parte delle cose che le persone usano ddpotrebbero essere state fatte allo stesso modo cat. In effetti catè leggermente più veloce perché utilizza blocchi più grandi di quelli ddpredefiniti. Tutto il codice di basso livello è nel kernel. E al conducente non importa davvero se si sta utilizzando ddo cat.
Kasperd,

1
@sudodus - scusami per la confusione, non ero chiaro come volevo. sicuramente posso continuare a scrivere, dipende da cosa dici di fare. dd if=/dev/zero of=/dev/sda bs=512 count=1o dd if=/dev/zero of=/dev/sda bs=512sono esempi. Con il secondo comando continuerà a scrivere e riempirà l'intero disco "ignorando" la tabella delle partizioni. Se si specifica una partizione, dd if=/dev/zero of=/dev/sda1questa non andrà oltre la partizione. Un po 'dipende da cosa vuoi fare con dd.
Pantera,

1
@Panther La domanda dice specificamente of=somepartition, quindi non si applica il caso in cui si scrive sull'intero dispositivo disco. ddimpossibile aggirare le restrizioni del driver del dispositivo.
Barmar,

1
@Bamar leggi che ho già commentato. Ho visto molti utenti confondere $ somepartition per / dev / sda
Panther il
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.