Ha habido una serie de preguntas con respecto a las herramientas de clonación de disco y dd
se ha sugerido al menos una vez. Ya he considerado dd
usarme, principalmente porque es fácil de usar, y porque está disponible en casi todas las distribuciones de arranque de Linux.
¿Cuál es la mejor manera de usar dd
para clonar un disco? Hice una búsqueda rápida en Google, y el primer resultado fue un aparente intento fallido . ¿Hay algo que deba hacer después de usar dd
, es decir, hay algo que NO se pueda leer dd
?
disk-image
dd
falstro
fuente
fuente
dd
opciones correctas para omitir bloques defectuosos, lo cual es esencial al clonar discos para la recuperación. Agregué una mejor respuesta, que puede clonar discos que tienen bloques defectuosos:dd if=/dev/sda of=/dev/sdb bs=4096 conv=sync,noerror
Respuestas:
dd es sin duda la mejor herramienta de clonación, creará una réplica 100% simplemente usando el siguiente comando. Nunca he tenido ningún problema con eso.
Tenga en cuenta que al clonar cada byte, no debe usar esto en una unidad o partición que se esté utilizando. Especialmente las aplicaciones como las bases de datos no pueden hacer frente a esto muy bien y puede terminar con datos corruptos.
fuente
dd if=/dev/sda | dd of=/dev/sdb
. En mis pruebas, ejecutar el comando sin la tubería me dio un rendimiento de ~ 112kb / s. Con la tubería, obtuve ~ 235kb / s. Nunca he tenido ningún problema con este método. ¡Buena suerte!Para ahorrar espacio, puede comprimir los datos producidos por dd con gzip, por ejemplo:
Puede restaurar su disco con:
Para ahorrar aún más espacio, desfragmente la unidad / partición que desea clonar de antemano (si corresponde), luego ponga a cero todo el espacio restante sin usar, lo que facilita la compresión de gzip:
Espere un poco, dd eventualmente fallará con un mensaje de "disco lleno", luego:
Además, puede ejecutar un proceso de dd en segundo plano para informar el estado enviándole una señal con el comando kill, por ejemplo:
Verifique su sistema: el comando anterior es para Linux, OSX y BSD. Los comandos dd difieren en las señales que aceptan (OSX usa
SIGINFO
: puede presionar Ctrl+ Tpara informar el estado).fuente
kill -SIGUSR1 %1
, y el comando dd OSX acepta felizmente SIGUSR1 ... super útil, ¡gracias!Kill -SIGUSR1 1234
estaba buscando eso.dd if=/dev/hdb | gzip -c > /image.img.gz
:?PRECAUCIÓN : dd'ing un sistema de archivos en vivo puede dañar los archivos. La razón es simple, no comprende la actividad del sistema de archivos que puede estar sucediendo y no intenta mitigarla. Si una escritura está parcialmente en curso, obtendrá una escritura parcial. Esto generalmente no es bueno para las cosas, y generalmente fatal para las bases de datos. Por otra parte, si la cagas el error tipográfico propensas si y de los parámetros, ¡ay de vosotros. En la mayoría de los casos, rsync es una herramienta igualmente efectiva escrita después del advenimiento de la multitarea , y proporcionará vistas consistentes de archivos individuales.
Sin embargo, DD debe capturar con precisión el estado de bits de una unidad desmontada. Cargadores de arranque, volúmenes llvm, particiones UUID y etiquetas, etc. Solo asegúrese de tener una unidad capaz de reflejar la unidad de destino bit por bit.
fuente
sync
no es la respuesta a los problemas de corrupción de archivos. ¿Qué sucede si un demonio o algo escribe más archivos después desync
, durante ladd
operación?rsync
garantizará que los datos internos en el sistema de archivos de destino sean consistentes. Que no va a asegurar que los datos en los archivos es consistente - de hacer eso, usted tendría que bloquear los archivos y los programas que se escriben en los archivos tendría que respetar estos bloqueos.Cuando use dd para clonar un disco que puede contener sectores defectuosos, use "conv = noerror, sync" para asegurarse de que no se detenga cuando encuentre un error y complete los sectores faltantes con bytes nulos. Este suele ser el primer paso que tomo si intento recuperarme de un disco defectuoso o defectuoso: obtenga una copia antes de realizar cualquier intento de recuperación y luego realice la recuperación en el disco bueno (clonado). Dejo que la herramienta de recuperación se encargue de los sectores en blanco que no se pudieron copiar.
Además, es posible que la velocidad de dd se vea afectada por la configuración de bs (tamaño de bloque). Por lo general, intento bs = 32768, pero es posible que desee probarlo en sus propios sistemas para ver qué funciona más rápido para usted. (Esto supone que no necesita usar un tamaño de bloque específico por otro motivo, por ejemplo, si está escribiendo en una cinta).
fuente
Para clonar un disco, todo lo que realmente necesita hacer es especificar la entrada y salida a dd:
Por supuesto, asegúrese de tener los permisos adecuados para leer directamente desde / dev / hdb (recomiendo que se ejecute como root) y que / dev / hdb no esté montado (no desea copiar mientras el disco está ser cambiado - montaje como solo lectura también es aceptable). Una vez completado, image.img será un clon byte por byte de todo el disco.
Existen algunos inconvenientes para usar dd para clonar discos. Primero, dd copiará todo su disco, incluso el espacio vacío, y si se hace en un disco grande puede resultar en un archivo de imagen extremadamente grande. En segundo lugar, dd no proporciona absolutamente ninguna indicación de progreso, lo que puede ser frustrante porque la copia lleva mucho tiempo. En tercer lugar, si copia esta imagen en otras unidades (nuevamente, usando dd), deben ser tan grandes o más grandes que el disco original, sin embargo, no podrá usar ningún espacio adicional que pueda tener en el disco de destino hasta que Cambiar el tamaño de sus particiones.
También puede hacer una copia directa de disco a disco:
pero aún está sujeto a las limitaciones anteriores con respecto al espacio libre.
En cuanto a los problemas o problemas, dd, en su mayor parte, hace un excelente trabajo. Sin embargo, hace un tiempo tenía un disco duro que estaba a punto de morir, así que usé dd para tratar de copiar la información que pude antes de que muriera por completo. Luego se supo que dd no maneja muy bien los errores de lectura: había varios sectores en el disco que dd no podía leer, lo que hizo que dd se rindiera y detuviera la copia. En ese momento no pude encontrar una manera de decirle a dd que continuara a pesar de encontrar un error de lectura (aunque parece que tiene esa configuración), así que pasé bastante tiempo especificando manualmente omitir y tratar de saltar el secciones ilegibles.
Pasé un tiempo investigando soluciones a este problema (después de haber completado la tarea) y encontré un programa llamado ddrescue , que, según el sitio, funciona como dd pero continúa leyendo incluso si encuentra un error. En realidad nunca he usado el programa, pero vale la pena considerarlo, especialmente si el disco desde el que está copiando es antiguo, lo que puede tener sectores defectuosos incluso si el sistema parece estar bien.
fuente
conv=sync,noerror
ayudaría.conv=sync,noerror
opciones son esenciales, permiten que dd omita los bloques defectuosos y los ponga a cero en la imagen para que las cosas estén alineadas correctamente. Apoyos para las pocas personas que comentaron algo al respecto.ddrescue
proporciona un indicador de progreso sin ninguna opción especial, y puede detener la copia y reanudar donde la dejó.status=progress
Si la unidad de origen se daña en absoluto, usted tendrá más suerte usando
dd_rhelp
condd_rescue
(mi preferencia personal) o GNUddrescue
.La razón detrás de esto es que, en los errores de lectura,
dd
sigue intentando y tratando y probando, potencialmente esperando mucho tiempo para que ocurran los tiempos de espera.dd_rescue
hace cosas inteligentes como leer hasta un error, luego elegir un lugar más adelante en el disco y leer hacia atrás hasta el último error, ydd_rhelp
es básicamente undd_rescue
administrador de sesión: comienza y reanuda lasdd_rescue
ejecuciones de manera inteligente para hacerlo más rápido nuevamente.El resultado final de
dd_rhelp
es el máximo de datos recuperados en un tiempo mínimo. Si deja dedd_rhelp
correr, al final hace exactamente el mismo trabajo quedd
al mismo tiempo. Sin embargo, sidd
encuentra errores de lectura en el byte 100 de su disco de 100 Gb, tendría que esperar mucho tiempo para recuperar los otros 9,999,900 bytes *, mientras quedd_rhelp
+dd_rescue
recuperaría la mayor parte de los datos mucho más rápido.fuente
El disco de origen no debe tener ningún sistema de archivos montado. Como usuario capaz de leer el dispositivo de bloqueo (la raíz funciona), ejecute 'dd if = / dev / sda ...'
Ahora, una de las cosas interesantes aquí es que estás creando una secuencia de bytes ... y puedes hacer mucho con eso: comprimirlo, enviarlo a través de la red, fragmentarlo en bloques más pequeños, etc.
Por ejemplo:
Pero más poderosamente:
Lo anterior copia una imagen comprimida del disco duro de origen en un sistema remoto, donde lo almacena en fragmentos numerados 2G utilizando el nombre del host de origen mientras lo mantiene actualizado sobre el progreso.
Tenga en cuenta que, dependiendo del tamaño del disco, la velocidad de la CPU en la fuente, la velocidad de la CPU en el destino, la velocidad de la red, etc.
fuente
Para clonar un disco, todo lo que realmente necesita hacer es especificar la entrada y la salida para
dd
:Por supuesto, asegúrese de tener los permisos adecuados para leer directamente
/dev/hdb
(recomiendo que se ejecute como root), y que/dev/hdb
no esté montado (no desea copiar mientras se cambia el disco). Una vez completado,hdb.img
será un clon byte por byte de todo el disco.Hay algunos inconvenientes para usar
dd
para clonar discos. Primero,dd
copiará todo su disco, incluso el espacio vacío, y si lo hace en un disco grande puede resultar en un archivo de imagen extremadamente grande. En segundo lugar, nodd
proporciona absolutamente ninguna indicación de progreso, lo que puede ser frustrante porque la copia lleva mucho tiempo. En tercer lugar, si copia esta imagen en otras unidades (nuevamente, usando dd), deben ser tan grandes o más grandes que el disco original, sin embargo, no podrá usar ningún espacio adicional que pueda tener en el disco de destino hasta que Cambiar el tamaño de sus particiones.También puede hacer una copia directa de disco a disco:
pero aún está sujeto a las limitaciones anteriores con respecto al espacio libre.
El primer inconveniente puede resolverse comprimiendo los datos mientras realiza la copia. Por ejemplo:
El segundo inconveniente se puede resolver utilizando la
pv
herramienta pipeview ( ). Por ejemplo:No conozco ninguna forma de superar el tercer inconveniente.
Además, puede acelerar el tiempo de copia diciéndole
dd
que trabaje con grandes cantidades de datos. Por ejemplo:fuente
dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon
(Inteligencia de módulo adicional en la capa de sistema de archivos.)Otra cosa buena que puede hacer con dd y los discos de rescate es copiar datos a través de la red:
Puede pegar gzip en ambas canalizaciones si la red no es local. Para el progreso, use
pv
. Para hacer que netcat de local_machine salga después de que haya terminado de copiar, puede agregar-w 5
o algo.fuente
> disk_backup.img
o|dd of=/dev/sdb
, o algo más, dependiendo de lo que quiere hacer. Supongo que no quieres volcar una imagen de disco en stdout.Tenga en cuenta que dd realiza una copia exacta , incluido todo el espacio en blanco.
Eso significa:
Espero que sea útil
fuente
Para futuras referencias, puede ser interesante consultar ddrescue . Me ha salvado el día un par de veces.
fuente
Otra gran característica es copiar MBR, tablas de particiones y registros de arranque.
Sólo
y la otra dirección cuando lo estás escribiendo. Pulir con
fdisk
después.Te sientes mucho más seguro cuando tienes una copia de seguridad de tu tabla de particiones.
Además, hace que la migración a otro disco duro (mientras cambia la estructura de la partición) sea una alegría.
fuente
Este es un truco barato, pero es una forma rápida y sucia de monitorear su proceso DD.
Ejecute su comando dd. Abra un nuevo shell y haga un ps awx para encontrar el PID de su proceso dd. Ahora en el nuevo tipo de shell watch -n 10 kill -USR1 {pid de tu proceso DD}
Esto no hará nada en la ventana de salida del reloj, pero de nuevo en el shell DD original, DD comenzará a generar informes de estado cada 10 segundos. Puede cambiar el -n 10 en el comando de vigilancia a cualquier otro marco de tiempo, por supuesto.
Taquión
fuente
watch
disponible y-USR1
mata a dd. Sin embargo, el siguiente comando funciona:while [ true ]; do killall -INFO dd; sleep 30; done
pv
comando.Esto copiará el disco y saltará bloques con errores, lo cual es muy importante.
Estas son las opciones básicas y esenciales para usar dd para clonar o rescatar un disco.
No quería publicar otra respuesta, pero no había buenas respuestas con las opciones esenciales "conv = sync, noerror" entre las 25 ya publicadas.
fuente
conv=sync,noerror
ya que omitirá demasiados datos para cada bloque defectuoso. Estas opciones son esenciales para la "clonación de recuperación", y no es bueno tener que buscar los comentarios. La respuesta más popular es adecuada si los discos no tienen bloques defectuosos, por ejemplo, para clonar un disco prístino, pero no para la recuperación.dd
ejemplo aquí, a la vez que es adecuado para clonar un disco libre de errores. Por lo tanto, considero que mi respuesta es la mejor aquí sobre cómo "usar DD para la clonación de disco". No agregué información sobre el monitoreo del progreso, la compresión, etc., porque quería mantenerlo simple y centrarme en proporcionar una respuesta breve que comprenda los conceptos básicos.Podrías probar algo como esto
para omitir todos los errores y tener un clon exacto de una partición o disco duro
fuente
dd proporciona información de progreso, bueno, la mayoría de las versiones en Linux. He visto algunos que no pero no recuerdan el sabor de Unix.
La página de manual dice: Enviar una señal USR1 a un proceso 'dd' en ejecución hace que imprima las estadísticas de E / S a un error estándar y luego reanude la copia.
Yo uso esta característica regularmente.
fuente
Alguien tuvo que decir esto: pruebe Clonezilla (http: // clonezilla.org/)
¿Qué sacas? Para copiar solo partes usadas del sistema de archivos. Clonezilla utiliza dd, grub, sfdisk, parted, partimage, ntfsclone y / o partclone. Dependiendo de las opciones que elija.
Se puede encontrar documentación decente en: http: // clonezilla.org/clonezilla-live/doc/
fuente
Cómo copiar usando dd (en este caso a una máquina remota, pero el mismo principio se aplica a una copia local) que muestra el progreso.
Funciona almacenando el pid a través del descriptor de archivo 3 en / tmp / pid, que luego se utiliza para los asesinatos posteriores con la señal USR1. Una arruga fue filtrar la salida del progreso en stderr a solo una línea mediante el filtrado de stderr a través de una subshell.
fuente
La mayor parte de la información se describió en recetas insertadas anteriores, pero no se describió toda.
En Linux, puede clonar el disco duro o la partición mediante el comando dd. Atención, cuando cometas un error, perderás todos tus datos.
Al principio, el destino no debe estar en uso, en segundo lugar, la fuente no debe usarse o volverse a montar en modo de solo lectura. De lo contrario, la copia se dañará. Si es imposible volver a montar, haga una unidad de arranque (hdd / ssd / pendrive) en cualquier distribución en vivo de linux. Preprecio knoppix, pero esta es tu elección. Si es posible, puede iniciar o cambiar el nivel del sistema a 1, para el modo de usuario único, o puede reiniciar directamente el sistema en modo de usuario único, depende de la distribución. Si clona solo una partición, esta partición debe desmontarse o volverse a montar en RO:
o
Si desea clonar todo el disco duro, debe desmontar o volver a montar todas las particiones.
Debe identificar el dispositivo de origen y el de destino. mire el dmesg, aquí se almacena toda la información necesaria sobre el dispositivo, con el proveedor, etc. Alternativamente, la identificación puede basarse en el tamaño del dispositivo, si es diferente. A continuación, el destino debe ser igual o mayor que la fuente. debe calcular la fuente, por ejemplo: fdisk -l / dev / sda, excepto la geometría de partición (puede haber GPT), obtendrá: 1. tamaño total del disco wigh GB y bytes 2. geometría histórica y número de sector total, información muy importante 3. tamaño de bloque en bytes, generalmente es 512.
por ejemplo:
a continuación, intentemos un divisor mayor que 512, tenemos 41943040 sectores físicos:
41943040/256 = 163840, muy bien, podemos hacer copias masivas de 256 sectores. podemos más? intentemos: 41943040/1024 = 40960, creo que esto es suficiente, seleccionaremos este. Vamos a contar el tamaño del grupo de sectores: 512 (tamaño de sector) * 1024 = 524288 bytes eq 512K. Entonces podemos usar el parámetro bs = 512K o menos, pero dividir esto entre 2 ^ x. Para los discos duros modernos con gran caché interna, esto es bastante práctico. para unidades más antiguas con caché mucho más pequeña, un valor de 32K o menos es suficiente.
Luego, después de la preparación, podemos hacer una copia: dd if = / dev / source_devide of = / dev / destination_device bs = 32K y se realizará la copia. Preste atención, cualquier error sobrescribirá sus datos importantes. En el destino, todo se sobrescribirá.
Si intenta rescatar datos en un disco de origen dañado, utilice mejor el tamaño del sector nativo, generalmente esto es 512 bytes, y agregue la opción conv = notrunc. de lo contrario, los huecos en la fuente que caen los sectores defectuosos se unirán al cambio de sector en el destino. Esto dañará la copia con pocas posibilidades de reparación. entonces el comando será:
y espere mucho tiempo cuando la unidad y el sistema se den por vencidos y caminen sector por sector hasta el final.
dd es una herramienta útil para mover la partición a un nuevo lugar. Simplemente cree una partición, haga dd a una nueva partición (esto puede ser más grande, mucho más grande), y si es posible, expanda el sistema de archivos copiados para llenar toda la nueva partición, ext3 / ext4 / xfs / zfs / btrfs tienen esta facilidad. Finalmente debe cambiar / etc / fstab, luego desmontar / montar si es posible, o reiniciar el sistema.
Por supuesto, puedes clonar cualquier tipo de partición. El comando dd no analiza el tipo de sistema de archivos, no hace nada con su estructura. entonces este comando puede usarse para clonar NTFS u otros tipos de partición.
Hay algún truco. Cuando no configuró el parámetro, dd pondrá la salida en su stdout. entonces puede hacer una copia sin procesar comprimida del disco o partición, por ejemplo:
Por supuesto, esto debe hacerse sin conexión. puedes restaurar esto:
, esta copia de seguridad sobrescribirá todo el disco duro sda y se perderán todos los datos actuales. También puede hacer esto con la partición de Windows NTFS y el disco duro utilizado por este. Por supuesto, puede usar otro comando de compresión, según su elección.
fuente
Puede crear un archivo de imagen comprimido de la partición (o disco) sobre la marcha usando
bzip2
o engzip
lugar dedd
. Esto es bueno para almacenar imágenes en medios extraíbles:Si el disco se ha usado mucho antes, puede mejorar la compresión al llenar todo el espacio no utilizado con ceros antes de la imagen:
Para restaurar la imagen en otro disco, todo lo que tiene que hacer es:
fuente
Por alguna razón, dd falla al crear imágenes de CD con pistas de audio. Necesita usar cdrdao o algo similar para obtener un archivo de imagen + TOC.
fuente
Una nota sobre la velocidad: en mi experiencia, dd es el doble de rápido si especifica bs = 1024 en lugar del valor predeterminado bs = 512. El uso de un tamaño de bloque aún mayor no proporciona una aceleración notable sobre bs = 1024.
fuente
Una cosa que debe tener en cuenta al hacer un disco lleno es que al hacerlo sobrescribirá el registro de arranque maestro del disco receptor. Contiene la tabla de particiones y otra información vital. Si el nuevo disco no es el mismo que el anterior, esto puede crear todo tipo de tablas. Copiar sobre particiones es generalmente más seguro (y las particiones de intercambio no tienen que copiarse)
fuente
He estado fuera de la función de administrador durante muchos años, pero sé que 'dd' está a la altura. Usé esta técnica regularmente a finales de los 80 en computadoras Sun Sparc y 386i. Tuve un pedido de un cliente en más de 30 sistemas 386i con software CAD que se distribuyó en múltiples cintas QIC.
Instalamos en la primera computadora, configuramos la aplicación, ejecutamos sys-unconfig de SunOS, colocamos la unidad en una caja de zapatos con una dirección SCSI diferente y luego procedimos a 'dd' a las otras 30 unidades.
fuente
Como otros han mencionado anteriormente, una de las trampas con la clonación de un sistema de archivos montado es la corrupción potencial de datos. Obviamente, esto no se aplicará a los clones de la unidad completa, pero si está utilizando LVM puede tomar una instantánea del volumen lógico y dd de la instantánea para obtener una imagen consistente.
fuente
Para volúmenes NTFS, prefiero usar ntfsclone . Es parte del paquete ntfsprogs .
fuente
Solo una advertencia para los principiantes que debe decirse: al menos con algunas versiones, bs = X significa que la memoria al tamaño de X se asignará literalmente. bs = 2 GB en un sistema con 1 GB de RAM y un intercambio insuficiente CAUSARÁ que sucedan cosas malas.
fuente