Tutorial: Usar dd para clonar discos en Mac OS X

Hace tiempo instalé en mi MacBook Pro un disco SSD Crucial m4 de 512GB (con tan sólo 35GB de sobre aprovisionamiento, un 6,9%), y se me estaba quedando pequeño. Afortunadamente, Crucial ha sacado la serie m500 con hasta 960GB de capacidad (lo que incluye la nada despreciable figura de 130GB de sobre aprovisionamiento, un 12,7% de la unidad), y que tiene un rendimiento inmejorable, por un precio más asequible que el pagué en su momento por el m4.

Dispongo también de un Newertech Voyager Q para conectar discos SATA directamente a través del bus Firewire, así que buscaba la forma más rápida posible de copiar mis datos al nuevo SSD, para poder sustituirlo a continuación.

Normalmente, habría actualizado la copia de Time Machine de mi máquina, habría cambiado el disco, y luego habría arrancado desde la Recovery HD de otro disco (o de un USB que tengo para la ocasión), y recuperado esa copia. Pero para un disco de unos 500GB, repleto como estaba, eso habría tardado más de cuatro horas, y luego la copia no es exacta (lo que a veces es una ventaja), y además se pierde la partición Recovery HD, que habría que restablecer de distintas formas.

Pero intentando crear un disco de arranque para actualizar el firmware del m4 (no tuve éxito, lo siento; lo actualicé al final grabando un CD con el archivo .iso que proporciona Crucial) redescubrí el comando dd. Y resulta que la forma más rápida de hacerlo (si no te da alergia ;-)) es mediante el terminal, usando el susodicho comando dd.

Prerequisitos

Para que esto funcione, y tenga sentido (esto es, sea más rápido que recuperar de una copia de seguridad de Time Machine), es necesario:

  1. Tener (al menos) una copia de seguridad de nuestro disco origen; es posible meter la pata cambiando el orden de los discos en el comando dd, y no quiero pensar en la clase de improperios que podrían dirigirse a mi persona, o a cualquier otro integrante de mi familia, si no hay una copia de seguridad disponible.
  2. (O al menos recomendable) que no haya más discos conectados al sistema. Así minimizamos las opciones de error, y es más fácil interpretar las instrucciones y los comandos.
  3. Que el disco destino sea mayor o igual en capacidad que el disco original. El clonado mediante los comandos de la sección siguiente funcionaría para discos ligeramente menores, siempre que la unidad original esté perfectamente desfragmentada, y que el espacio libre sea mayor que la diferencia de tamaño entre las unidades.
  4. Que al usar el comando diskutil list (ver la sección siguiente) se de uno de estos dos casos:
    1. que la última partición sea HFS+; o
    2. que la última partición sea Recovery HD, y la penúltima sea HFS+.
  5. Disponer de un medio para conectar el disco destino (suponiendo que el origen esté interno) que sea lo suficientemente rápido como para aprovechar su velocidad. En mi caso, la tostadora de discos Voyager Q, que conecta de FireWire 800 a SATA. También podría ser un adaptador USB a SATA (Crucial los ofrece como opción al comprar un SSD). Una caja USB 3 en un Mac que soporte USB 3 también podría servir, pero el rendimiento será inferior. Lo ideal, si tu equipo lo soporta, es un adaptador Thunderbolt a SATA.

Clonar los discos SSD

Los pasos para clonar mi SSD son los siguientes:

  1. Conectar el disco SSD mediante el Voyager Q. También valdría utilizar una carcasa para discos de 2.5”, o el adaptador SATA-a-USB que está disponible a través de Crucial.
  2. En terminal, listar las particiones existentes, utilizando diskutil list. El resultado será algo como lo siguiente:
    $ diskutil list
    /dev/disk0
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *512.1 GB   disk0
       1:                        EFI                         209.7 MB   disk0s1
       2:                  Apple_HFS m4ssd                   510.0 GB   disk0s2
       3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:                                                   *960.2 GB   disk1

    Podemos darnos cuenta de que aquí aparece una partición, Recovery HD, que si hubiéramos abierto Utilidad de discos no veríamos. También vemos que es fácil identificar que el disco origen es /dev/disk0, porque es en el que aparece nuestro volumen, mientras que /dev/disk1 aparece completamente vacío: 960.2GB sin tipo de partición, ni nombre.

  3. Teclear con muchísima atención la orden:
    dd if=/dev/rdiskn of=/dev/rdiskm bs=1ms

    if representa el disco origen, por lo que el número n debe representar el disco duro que queremos clonar; of representa el disco destino (ahora mismo sin formato), por lo que m debe representar el disco duro nuevo; y bs es el tamaño de memoria que reservamos para pasar datos de un disco a otro, para mantener el flujo constante (cualquier valor por encima de 1MB —representado como 1m— está bien). Y usamos /dev/rdisk, en lugar de /dev/disk, porque  rdisk representa un interfaz de acceso más rápido a los discos.

    En nuestro caso, y según el listado anterior, n=0, m=1, por lo que el comando queda, finalmente —de nuevo, es crítico que comprobéis que se corresponde a lo que queréis hacer—, como:

    dd if=/dev/rdisk0 of=/dev/rdisk1 bs=1ms

    Eso nos proporciona un clon exacto de nuestra unidad. Como podéis ver en el pantallazo siguiente, la tasa de lectura corresponde a 54 lecturas por segundo de 1MB, por lo que la velocidad es bastante constante, alrededor de 54MB/s (recordemos que el máximo teórico para FireWire 800 seria de unos 100MB/s, pero resulta difícil mantener el ideal). A esa velocidad, debería tardar 2 horas y 27 minutos en realizar la copia1,2.

    Actividad del disco usando dd

  4. Para asegurarnos de que el Mac no entra en reposo durante el tiempo que hacemos la copia, teclearemos en otro terminal la orden:
    caffeinate -s -t time

    donde cambiaremos time por un número en segundos que estimaremos según la velocidad de transferencia que observemos; por ejemplo, en mi caso estaba clonando un disco de 512GB, por lo que el tiempo estimado en segundos es de 512 * 1024 / 54 * 1.2 ≈ 11650 (donde 512*1024 representa el tamaño en GB; 54 es el ancho de banda que observamos en el Monitor de Actividad; y 1.2 representa un 20% más de tiempo, para tener margen).

Después del tiempo necesario, tendremos nuestro disco totalmente clonado.

Aprovechar todo el espacio del disco

Ahora tenemos un pequeño problema: tenemos nuestro disco clonado, pero sólo 3 particiones3 (EFI, para el arranque; el clon de la partición original, ocupando sólo 510GB; y la partición Recovery HD): en total, tenemos 512GB ocupados… y el resto está libre.

Supongo que existe un encantamiento de terminal (utilizando diskutil repartitionDisk) que permitiría hacerlo, pero lo más rápido es seguir los siguientes pasos:

  1. Abrir Utilidad de Discos
  2. Seleccionar nuestro disco recién clonado. Podremos identificarlo porque, al seleccionarlo, aparecerá su identificador (por ejemplo, disk1; este número depende de cada arranque; suponemos que sigue siendo disk1 porque estamos realizando esta operación justo a continuación de la anterior) en el panel derecho de la ventana.
  3. Pulsar sobre la pestaña Partición (si no aparece, es que has seleccionado el volumen —una de las particiones; por ejemplo, disk1s2—, no el disco). Veremos un dibujo en el que el volumen que hemos copiado aparece en blanco, y una gran parte de la unidad aparece en gris.
  4. Arrastrar la esquina inferior derecha de la partición hasta rellenar el espacio gris completamente. Con eso, estamos indicando a Utilidad de discos que queremos redimensionar la partición, y como el formato HFS+ lo permite, hará que crezca sin perder los datos. Lo mejor es que, además, y tal y como nos indicará en uno de los últimos pasos, Utilidad de discos va a mover la partición Recovery HD justo al final del disco, por lo que habremos conseguido lo que queríamos: clonar nuestra unidad de la forma más rápida posible, y no necesitar ninguna utilidad adicional para aprovechar todo el tamaño de la unidad, y manteniendo la partición Recovery HD. Este proceso, en mi caso, duró menos de cinco minutos.

Conclusiones

Usando dd es posible reducir el tiempo de copia de un disco a otro nuevo, especialmente en el caso de discos SSD, pero también funciona para otros discos. Utilizando después Utilidad de discos para redimensionar la partición, y que mueva automáticamente la partición oculta Recovery HD, aprovechamos todo el tamaño del disco destino, y mantendremos la útil Recovery HD, en un tiempo récord.

Notas

  1. Finalmente, tardó 10702 segundos, o lo que es lo mismo, 2h y 58 minutos, a 49MB/s; sigue siendo más rápido —casi el doble— que lo que habría tardado en hacerlo con SuperDuper! o Carbon Copy Cloner. ⏎
  2. Se puede intentar jugar con el contenido del parámetro bs, porque ése parámetro indica cuántos datos se van a usar de memoria intermedia para suavizar los promedios, pero he hecho intentos con otros valores, y el mejor resulta ser el de 1MB. Además, de esa forma coinciden el número de lecturas/escrituras por segundo con el ancho de banda en MB/s. ⏎
  3. O el número de particiones que correspondan en vuestro caso, siempre que se cumplan los pre-requisitos que mencionamos. ⏎

Comentarios

2 respuestas a «Tutorial: Usar dd para clonar discos en Mac OS X»

  1. dd: /dev/rdisk1: Permission denied

    1. Necesitas usarlo con sudo, o hacer sudo bash al principio.

To respond on your own website, enter the URL of your response which should contain a link to this post’s permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post’s URL again. (Find out more about Webmentions.)

Descubre más desde Memoria de Acceso Aleatorio

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo