Los dispositivos de bloques que representan particiones, por ejemplo /dev/sda1, son creados por el kernel de tal manera que es imposible acceder al almacenamiento adyacente a través de ellos (suponiendo que la tabla de particiones no se modificó después de que el kernel lo leyó la última vez). Si pudieras acceder al almacenamiento adyacente de esa manera, se consideraría un gran error.
David Foerster
Respuestas:
18
Sobrescribir una partición con dd
ddEs una herramienta muy poderosa pero también peligrosa. Hace lo que le dices que haga sin preguntas. Entonces, si le dice que borre las fotos familiares, ... y es un error de escritura menor.
Pero si marca y vuelve a verificar, puede usarlo.
dd if=/dev/zero of=somepartition bs=512
o sugeriría
dd if=/dev/zero of=/dev/sdxn bs=4096
donde xestá la letra de unidad y nel número de partición y el tamaño de bloque 4096 bytes hace que el proceso de escritura sea más rápido
Es importante que escriba en una partición en este caso. Si escribe en toda la unidad (el extremo del cabezal de /dev/sdxla unidad), se sobrescribirá toda la unidad. Pero la escritura en la partición se interrumpirá al final de la partición y las particiones detrás de ella se conservarán. (Lo probé ahora en un pendrive USB en Lubuntu 16.04 LTS, así que sé que funciona así).
Excepción para una partición extendida
Hay una excepción para una partición extendida (que es un contenedor para particiones lógicas, para tener más de cuatro particiones en una tabla de particiones MSDOS). Esto se describe en el siguiente enlace,
Pero también hay otro problema. Probé su comando en un entorno de prueba y solo leí un kibibyte (1024 bytes) cuando quería que creara una imagen de una partición extendida.
También probé esto ahora en un pendrive USB en Lubuntu 16.04 LTS, y esto se aplica a la escritura (así como a la lectura). Solo se sobrescribe el primer kibibyte.
Para resumir, sobrescribir las particiones primarias y las particiones lógicas funciona de acuerdo con la descripción principal en esta respuesta. Pero no use este método para sobrescribir una partición extendida porque solo se sobrescribirá el primer kibibyte. Las particiones lógicas de la partición extendida ya no se encontrarán a través de la tabla de particiones, pero los datos almacenados en ellas todavía están allí.
Ya acepté, pero si es así, esta debería ser la respuesta correcta.
LogicBreaker
3
@LogicBreaker, tal vez puedas mover la aceptación. Pero eso no es importante. Es más importante que comprenda cómo usarlo ddy que sea arriesgado, de modo que tenga mucho cuidado al usarlo. Buena suerte :-) En general, siempre debe tener una copia de seguridad de todos los archivos, que no puede permitirse perder.
sudodus
1
Al escribir en particiones desnudas no tienes muchas alternativas. Me mudé, de lo contrario sería engañoso para los demás.
LogicBreaker
1
Es por eso que los usuarios normalmente no pueden acceder a los "archivos" / dev / *.
Thorbjørn Ravn Andersen
1
Si esta es la única copia de sus fotos familiares sin copia de seguridad, entonces está sujeto a perderlas en cualquier momento por robo, incendio, accidente o simple falla de hardware :-)
user334639
4
Las escrituras en un dispositivo de partición no escribirán fuera de esa partición, con dd o cualquier otra cosa. Debería usar un dispositivo wholedisk para tener algún efecto fuera de una única partición.
(Advertencia: a menos que su disco tenga una tabla de particiones con particiones superpuestas, lo que nunca debería suceder).
Otra advertencia: si está usando algo como LVM, escribir en un volumen físico puede, por supuesto, afectar muchos volúmenes lógicos.
Maxpm
4
Creo que su pregunta se basa en un malentendido fundamental sobre cómo dd(y, de hecho, los sistemas operativos similares a Unix en general) funcionan:
ddno puede sobrescribir particiones adyacentes, simplemente porque ddno puede sobrescribir particiones, punto .
ddsimplemente escribe en archivos . Eso es.
Ahora bien, si se pasa ddun archivo que representa múltiples particiones, a continuación, ddse sobreponen a ese archivo . Pero en ese caso, no está ddescribiendo más allá del final de la partición. ddseguirá escribiendo hasta el final del archivo, y solo hasta el final del archivo.
Pero, si pasa ddun archivo que solo representa una partición, ddno escribirá más allá del final de esta partición. De nuevo, esto no tiene nada que ver dd. ddsimplemente escribe en el archivo en el que le dice que escriba. El hecho de que este archivo represente una única partición está asegurado (en este caso) por el controlador del dispositivo de bloque en el núcleo. ddno tiene nada que ver con eso
En resumen: ddescribe en archivos. Lo que representan esos archivos no ddes asunto de nadie . ddNo sabe nada de particiones.
Mmh ... con dd solo escribiendo en archivos, no podrías usarlo para escribir en particiones sin formato.
LogicBreaker
1
Correcto. No se puede usar ddpara escribir en particiones sin formato. Solo puedes escribir en archivos. Usted puede , por supuesto, escribir en un archivo de dispositivo de bloque que representa una partición (como /dev/sda1), pero no se puede escribir en una partición sin formato. Y dado que solo puede escribir en un archivo que representa una partición, no puede escribir más allá del final de la partición, porque el archivo solo representa la partición y no la partición y un poco más allá del final.
Jörg W Mittag
3
Jorg se refiere a una de las ideas principales de la filosofía de Unix: "todo es un archivo". Como tal, el kernel presenta paticiones, dispositivos, puertos, etc. como archivos. Como resultado, cada programa que puede escribir en un archivo puede usarse para escribir en una partición o dispositivo. Es el trabajo del núcleo imponer el límite de la partición. Puede abrir /dev/sdaen su editor de texto y cambiar los datos, ddno es diferente de cualquier otro programa en términos de poder acceder a las particiones. Muy buena respuesta!
Sergey
1
Existe un escenario especial peligroso, pero raro, en el que esto podría suceder incluso con controladores de dispositivos de bloques sin errores:
La tabla de particiones en el disco se cambia de manera que la partición x se redimensiona para terminar en un límite inferior que antes. O la partición y detrás de ella se redimensiona desde el inicio en un límite inferior, o se agrega una nueva partición y al espacio.
La partición y se llena con datos relevantes por medios que son independientes de la tabla de particiones, por ejemplo, usando dd con opciones de omisión / conteo en el dispositivo de bloqueo de disco completo (por ejemplo, / dev / sda)
El ioctl que le dice al núcleo que vuelva a leer la tabla de particiones no se emite o falla debido a dispositivos ocupados
La partición x es escrita por cualquier proceso que intente escribir hasta que llegue a una condición de error.
Debe tener cuidado con dd, ya que si comete un error, puede sobrescribir más de lo que esperaba y depende de para qué esté usando dd (el OP fue vago en su uso de dd y la sintaxis exacta de dd mando).
Si especifica una partición , escribirá en esa partición hasta que la partición esté llena.
Si comete un error y coloca toda la unidad, por ejemplo de = / dev / sda, dd escribirá en toda la unidad de inicio para terminar de ignorar (y sobrescribir) su tabla de particiones.
También puede usar dd en una partición para sobrescribir los archivos borrados (los archivos borrados pueden permanecer en la partición y ser descubiertos por varias herramientas de recuperación con varios grados de éxito hasta que se sobrescriban. En este caso, puede usar dd para llenar el espacio libre escribiendo en un archivo.
Sin embargo, dependiendo de lo que esté haciendo, es posible que desee utilizar una herramienta alternativa para eliminar archivos de forma segura. Consulte ¿Cómo eliminar archivos de manera segura? para las opciones
Si pudieras escribir en / dev / sdcX y lograr escribir a través de un límite de partición, no sería dd que ignorar la tabla de particiones, sería el controlador de dispositivo de bloque en el núcleo que tiene errores e ignora la tabla de particiones.
rackandboneman
1
@sudodus ddno es tan bajo nivel. De hecho, la mayoría de las cosas que las personas usan ddpodrían haberse hecho de la misma manera cat. De hecho, cates un poco más rápido porque usa bloques más grandes que los ddpredeterminados. Todo el código de bajo nivel está en el núcleo. Y al conductor realmente no le importa si está usando ddo cat.
kasperd
1
@sudodus: perdón por la confusión, no estaba tan claro como pretendía. dd ciertamente puede seguir escribiendo, depende de lo que le digas que haga. dd if=/dev/zero of=/dev/sda bs=512 count=1o dd if=/dev/zero of=/dev/sda bs=512son ejemplos. Con el segundo comando seguirá escribiendo y llenando todo el disco "ignorando" la tabla de particiones. Si especifica una partición dd if=/dev/zero of=/dev/sda1, no irá más allá de la partición. Depende de lo que quieras hacer con dd.
Pantera
1
@Panther La pregunta dice específicamente of=somepartition, por lo que el caso en el que escribe en todo el dispositivo de disco no se aplica. ddno puede sortear las restricciones del controlador del dispositivo.
Barmar
1
@Bamar leyó ya comenté sobre eso. He visto a muchos usuarios confundir $ somepartition para / dev / sda
/dev/sda1
, son creados por el kernel de tal manera que es imposible acceder al almacenamiento adyacente a través de ellos (suponiendo que la tabla de particiones no se modificó después de que el kernel lo leyó la última vez). Si pudieras acceder al almacenamiento adyacente de esa manera, se consideraría un gran error.Respuestas:
Sobrescribir una partición con
dd
dd
Es una herramienta muy poderosa pero también peligrosa. Hace lo que le dices que haga sin preguntas. Entonces, si le dice que borre las fotos familiares, ... y es un error de escritura menor.Pero si marca y vuelve a verificar, puede usarlo.
o sugeriría
donde
x
está la letra de unidad yn
el número de partición y el tamaño de bloque 4096 bytes hace que el proceso de escritura sea más rápidoEs importante que escriba en una partición en este caso. Si escribe en toda la unidad (el extremo del cabezal de
/dev/sdx
la unidad), se sobrescribirá toda la unidad. Pero la escritura en la partición se interrumpirá al final de la partición y las particiones detrás de ella se conservarán. (Lo probé ahora en un pendrive USB en Lubuntu 16.04 LTS, así que sé que funciona así).Excepción para una partición extendida
Hay una excepción para una partición extendida (que es un contenedor para particiones lógicas, para tener más de cuatro particiones en una tabla de particiones MSDOS). Esto se describe en el siguiente enlace,
¿Puedo hacer una imagen de partición 'extendida' usando dd?
También probé esto ahora en un pendrive USB en Lubuntu 16.04 LTS, y esto se aplica a la escritura (así como a la lectura). Solo se sobrescribe el primer kibibyte.
Para resumir, sobrescribir las particiones primarias y las particiones lógicas funciona de acuerdo con la descripción principal en esta respuesta. Pero no use este método para sobrescribir una partición extendida porque solo se sobrescribirá el primer kibibyte. Las particiones lógicas de la partición extendida ya no se encontrarán a través de la tabla de particiones, pero los datos almacenados en ellas todavía están allí.
fuente
dd
y que sea arriesgado, de modo que tenga mucho cuidado al usarlo. Buena suerte :-) En general, siempre debe tener una copia de seguridad de todos los archivos, que no puede permitirse perder.Las escrituras en un dispositivo de partición no escribirán fuera de esa partición, con dd o cualquier otra cosa. Debería usar un dispositivo wholedisk para tener algún efecto fuera de una única partición.
(Advertencia: a menos que su disco tenga una tabla de particiones con particiones superpuestas, lo que nunca debería suceder).
fuente
Creo que su pregunta se basa en un malentendido fundamental sobre cómo
dd
(y, de hecho, los sistemas operativos similares a Unix en general) funcionan:dd
no puede sobrescribir particiones adyacentes, simplemente porquedd
no puede sobrescribir particiones, punto .dd
simplemente escribe en archivos . Eso es.Ahora bien, si se pasa
dd
un archivo que representa múltiples particiones, a continuación,dd
se sobreponen a ese archivo . Pero en ese caso, no estádd
escribiendo más allá del final de la partición.dd
seguirá escribiendo hasta el final del archivo, y solo hasta el final del archivo.Pero, si pasa
dd
un archivo que solo representa una partición,dd
no escribirá más allá del final de esta partición. De nuevo, esto no tiene nada que verdd
.dd
simplemente escribe en el archivo en el que le dice que escriba. El hecho de que este archivo represente una única partición está asegurado (en este caso) por el controlador del dispositivo de bloque en el núcleo.dd
no tiene nada que ver con esoEn resumen:
dd
escribe en archivos. Lo que representan esos archivos nodd
es asunto de nadie .dd
No sabe nada de particiones.fuente
dd
para escribir en particiones sin formato. Solo puedes escribir en archivos. Usted puede , por supuesto, escribir en un archivo de dispositivo de bloque que representa una partición (como/dev/sda1
), pero no se puede escribir en una partición sin formato. Y dado que solo puede escribir en un archivo que representa una partición, no puede escribir más allá del final de la partición, porque el archivo solo representa la partición y no la partición y un poco más allá del final./dev/sda
en su editor de texto y cambiar los datos,dd
no es diferente de cualquier otro programa en términos de poder acceder a las particiones. Muy buena respuesta!Existe un escenario especial peligroso, pero raro, en el que esto podría suceder incluso con controladores de dispositivos de bloques sin errores:
fuente
Debe tener cuidado con dd, ya que si comete un error, puede sobrescribir más de lo que esperaba y depende de para qué esté usando dd (el OP fue vago en su uso de dd y la sintaxis exacta de dd mando).
Si especifica una partición , escribirá en esa partición hasta que la partición esté llena.
Si comete un error y coloca toda la unidad, por ejemplo de = / dev / sda, dd escribirá en toda la unidad de inicio para terminar de ignorar (y sobrescribir) su tabla de particiones.
También puede usar dd en una partición para sobrescribir los archivos borrados (los archivos borrados pueden permanecer en la partición y ser descubiertos por varias herramientas de recuperación con varios grados de éxito hasta que se sobrescriban. En este caso, puede usar dd para llenar el espacio libre escribiendo en un archivo.
Sin embargo, dependiendo de lo que esté haciendo, es posible que desee utilizar una herramienta alternativa para eliminar archivos de forma segura. Consulte ¿Cómo eliminar archivos de manera segura? para las opciones
fuente
dd
no es tan bajo nivel. De hecho, la mayoría de las cosas que las personas usandd
podrían haberse hecho de la misma maneracat
. De hecho,cat
es un poco más rápido porque usa bloques más grandes que losdd
predeterminados. Todo el código de bajo nivel está en el núcleo. Y al conductor realmente no le importa si está usandodd
ocat
.dd if=/dev/zero of=/dev/sda bs=512 count=1
odd if=/dev/zero of=/dev/sda bs=512
son ejemplos. Con el segundo comando seguirá escribiendo y llenando todo el disco "ignorando" la tabla de particiones. Si especifica una particióndd if=/dev/zero of=/dev/sda1
, no irá más allá de la partición. Depende de lo que quieras hacer con dd.of=somepartition
, por lo que el caso en el que escribe en todo el dispositivo de disco no se aplica.dd
no puede sortear las restricciones del controlador del dispositivo.