¿Cómo puedo redimensionar una imagen creada con dd que contiene una copia bloque por bloque de mi unidad Mac?

0

Creé una copia de una unidad de disco giratoria de 1TB en funcionamiento (pero obteniendo algunos errores de disco) usando dd . Puedo montar la imagen ( hdiutil attach o simplemente hacer doble clic en Finder) sin problemas y ver los archivos en el volumen principal de HFS +. Sin embargo, no veo las otras particiones que sé que están ahí (EFI, Recovery HD). Sé que están ahí porque si restauro la imagen directamente en una unidad física, están ahí.

Sin embargo, me gustaría restaurar esta imagen a un SSD de 480GB (más pequeño), así que necesito reducir la partición HFS + principal / grande de la imagen. Hay un montón de espacio libre en la partición (700 GB), por lo que debería ser factible.

He intentado convertir la imagen en una imagen de lectura-escritura ( hdiutil convert -format UDRW ) o en un paquete disperso ( hdiutil convert -format UDSB - da como resultado un archivo de 200GB).

La imagen de lectura-escritura no cambiará de tamaño:
hdiutil: resize request is below minimum size allowed.

La ejecución de hdiutil compact en el paquete disperso no lo reducirá:
Reclaimed 0 bytes out of 796.9 GB possible.

¿Cuál es la forma correcta de redimensionar la partición HFS + principal / grande en la imagen de disco completa?

    
pregunta Nate Pinchot 04.08.2016 - 22:33

1 respuesta

1

En mi opinión, esto puede ser posible pero no es efectivo porque para lograrlo, tendría que extraer y contraer una parte de la imagen en bruto de dd y luego volver a ensamblar las tres partes. Además, tiene que manipular la tabla de particiones gpt dentro de la imagen dd en bruto reensamblada editándola en hexadecimal. Luego tienes que dd de nuevo la imagen.

En su lugar, haga lo siguiente, lo que requiere un tiempo significativamente menor y probablemente menos propenso a errores:

  • Particione su nuevo disco con 3 particiones: EFI, volumen principal del sistema y una partición de recuperación en HD
  • Dado que EFI y la partición de recuperación tienen tamaños fijos y bloques de inicio definidos, puede simplemente dd el EFI y el Recovery HD en su imagen en bruto de dd a las particiones respectivas de su nuevo SSD
  • Para copiar el contenido del volumen principal anterior, monte la imagen raw dd y rsync el contenido en el volumen principal nuevo.

Aquí asumo que tiene un disco externo con un OS X (El Capitán) completo para preparar el SSD. Todos los nombres / identificadores o tamaños de dispositivos son solo ejemplos y pueden diferir de su entorno / resultados reales.

Preparando su nuevo SSD:

  • Abra la Utilidad de Discos y borre el nuevo disco (Nombre: SSD / Formato: OS X Extended (Journaled) / Scheme: tabla de partición GUID)
  • Abre la Terminal e ingresa diskutil list . El resultado debe ser (los tamaños pueden diferir ligeramente del tuyo):

    /dev/disk0 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *480.0 GB   disk0
       1:                        EFI EFI                     209.7 MB   disk0s1
       2:                  Apple_HFS SSD                     479.6 GB   disk0s2
    /dev/disk1...
    
  • En la Terminal ingrese sudo gpt -r show disk0 . El resultado debe ser (los tamaños pueden diferir ligeramente del tuyo):

          start       size  index  contents
              0          1         PMBR
              1          1         Pri GPT header
              2         32         Pri GPT table
             34          6         
             40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
         409640  936755120      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
      937164760     262151         
      937426911         32         Sec GPT table
      937426943          1         Sec GPT header
    
  • Ahora desmonte el disco0 y elimine la segunda partición:

    diskutil umountDisk disk0
    sudo gpt remove -i 2 disk0
    
  • Agrega la partición de recuperación. La partición de recuperación siempre tiene el tamaño de bloques 1269536 y comienza con el tamaño total del disco en bloques: 1269576 bloques (en mi ejemplo, eso es: 937426944 - 1269576 = 936157368)

    sudo gpt add -i 3 -b 936157368 -s 1269536 -t 426F6F74-0000-11AA-AA11-00306543ECAC disk0
    
  • Ingrese sudo gpt -r show disk0 nuevamente para mostrar la nueva partición:

          start       size  index  contents
              0          1         PMBR
              1          1         Pri GPT header
              2         32         Pri GPT table
             34          6         
             40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
         409640  935747728         
      936157368    1269536      3  GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
      937426904          7         
      937426911         32         Sec GPT table
      937426943          1         Sec GPT header
    
  • En el espacio vacío entre la partición i = 1 y i = 3 agregue una nueva partición. El bloque de inicio y el tamaño vienen dados por los datos encontrados arriba:

    sudo gpt add -i 2 -b 409640 -s 935747728 -t 48465300-0000-11AA-AA11-00306543ECAC disk0
    
  • Desmonte el disco0 y formatee el nuevo volumen:

    diskutil umountDisk disk0
    sudo newfs_hfs -J -v "SSD" /dev/disk0s2
    

Restaurando tus datos:

  • Monte la imagen de disco sin procesar haciendo doble clic en ella.
  • Ingrese diskutil list . Debería ver una nueva entrada similar a esta:

    /dev/disk0 (internal, physical):
    ...
    /dev/disk3 (disk image):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        +1.0 TB     disk3
       1:                        EFI EFI                     209.7 MB   disk3s1
       2:                  Apple_HFS Macintosh HD            1.0 TB     disk3s2
       3:                 Apple_Boot Recovery HD             650.0 MB   disk3s3
    
  • dd el EFI y Recovery HD de la imagen al SSD:

    sudo dd if=/dev/disk3s1 of=/dev/disk0s1 bs=4096
    diskutil umountDisk disk0
    sudo dd if=/dev/disk3s3 of=/dev/disk0s3 bs=4096
    
  • monte el volumen principal del SSD:

    diskutil mount disk0s2
    
  • rsync el contenido del volumen principal de la imagen del disco (que debería estar visible en su escritorio en contra de las particiones EFI / Recovery HD) al volumen principal de SSD:

    sudo rsync -a /Volumes/Volume_name_of_Diskimage/ /Volumes/SSD
    

Este es un ejemplo de comando rsync muy básico. Puede refinar el comando rsync (opciones / exclusiones) de acuerdo con esto o this scripts vinculados.

Verifique todos los nombres de dispositivos en los diferentes comandos que contienen dd o gpt a fondo o eliminará o sobrescribirá particiones / datos importantes de forma no deseada.

    
respondido por el klanomath 05.08.2016 - 04:41

Lea otras preguntas en las etiquetas