Necesito copiar un disco a otro. Intenté con el comando a continuación y me lleva casi un día copiar 1 TB de disco en federo.
dd if=/dev/sda of=/dev/sdb
He intentado lo mismo en un sistema Unix (HP-UX) con el siguiente comando y se completa en unas pocas horas
dd if=/dev/sda of=/dev/rdsk
¿Cuál es la alternativa que podría usar para copiar de disco a disco tan rápido?

cp /dev/sda /dev/sdbo (pv /dev/sda > /dev/sdbpara obtener una barra de progreso) sería mucho más rápido. ¿Por qué usaríasddaquí?ddsolo sería útil con cosas comoconv=sync,noerrormanejar discos con errores, pero incluso entonces tendría más sentido usar cosas comoddrescue(ver tambiénpvla-Eopción).catpuede ser aún más rápido, pero la diferencia no es tan dramática (tal vez más grande para dispositivo a dispositivo que archivo a archivo como en mi experimento).ddtrampa # 1Respuestas:
ddtiene muchas opciones (extrañas), vea dd (1) .Debe indicar explícitamente el tamaño del búfer, así que intente
IIRC, el tamaño predeterminado del búfer es de solo 512 bytes. El comando anterior lo establece en 16 megabytes. Podría probar algo más pequeño (p
bs=1M. Ej. ), Pero debería usar más que el predeterminado (especialmente en hardware de disco reciente con sectores de 4Kbytes, es decir, Formato avanzado ). Ingenuamente recomiendo una potencia de dos, que es al menos un megabyte.Con el tamaño predeterminado del búfer de 512 bytes, supongo (pero podría estar muy equivocado) que el hardware requiere que el núcleo transfiera 4K por cada bloque de 512 bytes.
Al respecto
rdsk, las páginas de manual de sd (4) dicen:El aumento del tamaño del búfer de dd le dará más rendimiento para las operaciones de lectura y escritura. Ahora todos los discos tienen memoria intermedia de lectura / escritura de hardware. Pero si aumenta el tamaño del búfer de dd más que el búfer de hardware, su rendimiento disminuirá porque dd leerá desde el primer disco al búfer cuando el segundo disco haya escrito todo desde su propio búfer de hardware. Necesita establecer la
bsopción del comando dd cada vez que un valor diferente para diferentes dispositivos.fuente
catigual de bien (para la transferencia de sistema de archivos a sistema de archivos, el bloqueo directo a bloque puede tener diferentes características de rendimiento). Sin embargo, la diferencia no fue dramática en ningún caso./dev/rdiskXcomo objetivo cuando se realizadd.status=progresseso imprimirá todo el progreso de la operación.Años atrás en Unix-land
ddera la forma requerida de copiar un dispositivo de bloque. Eso se ha llevado a cabo como conocimiento de culto de carga, aunque (al menos en sistemas basados en Linux)cates casi siempre más rápido quedd.Sin embargo, incluso en la historia, un tamaño de bloque decente ayudó a reducir la cantidad de llamadas (lentas) del sistema, dado que cada llamada del sistema activaba una operación de E / S. El tamaño de bloque predeterminado es 512 bytes (un sector de disco). Recolectar múltiples bloques de disco juntos en una sola lectura fue, y es, también aceptable. Este ejemplo utiliza un tamaño de bloque de 32 MB:
Sin embargo, en los sistemas actuales basados en Linux, los discos se pueden copiar de manera más eficiente con un simple
cat(Como se señaló en los comentarios sobre su pregunta,
pvpuede sustituirsecaty le dará una indicación del progreso y el rendimiento).fuente
En general,
ddse puede evitar a favor de algunas alternativas. Hay varias buenas razones para usar GNU en suddrescuelugar. En Ubuntu, puedes instalarlo con:y simplemente fácil
ddrescuede usar. Tenga en cuenta que a diferencia del nombre del paquete, el ejecutable no tiene la inicialg.Usarlo es tan simple como:
El archivo de registro (llamado lo que elija) le permite pausar / detener y reiniciar, sin rehacer el trabajo anterior, lo cual es útil cuando se realizan clones grandes o la recuperación de discos. Por defecto, muestra el progreso, la velocidad de copia actual, la velocidad de copia promedio y el número de bloques defectuosos encontrados.
Utiliza valores predeterminados razonables para el tamaño de bloque, por lo que la velocidad de copia siempre es tan rápida como el dispositivo puede manejar, al menos en mi experiencia (he clonado muchos cientos de unidades con él, todos los tamaños y tipos).
Muchas veces, las unidades que comienzan a fallar tienen problemas de velocidad, como parches ocasionales de lentitud, baja velocidad promedio, pausas largas repentinas (sectores defectuosos) o reinicios completos (errores graves de la superficie).
ddrescuepuede ayudarlo a identificar todo lo anterior y reiniciar su clon (siempre que haya especificado un archivo de registro) incluso si su unidad se está reiniciando.fuente
Muy buena pregunta. La interfaz en bruto se implementa en algunos sistemas Unix (tru64, hpux, solaris) pero no en Linux. La interfaz sin formato hace que la transferencia sea más rápida porque se omite la E / S de Unix. La interfaz de bloque (
/dev/dsko/dev/disk) es más lenta porque usa el sistema de E / S de Unix. Para acelerardd(gnu dd can) usebs=30Mobs=20Mdependiendo de su hw. La respuesta corta es: NO, no está implementado, al menos hasta donde yo sé. Estoy usando Linux desde los viejos tiempos de la versión 2.2 del kernel y nunca lo he vistordskusado en Unix.fuente