Come posso ridimensionare un'immagine creata usando dd che contiene una copia blocco per blocco del mio disco Mac?

0

Ho creato una copia di un disco funzionante (ma ricevendo alcuni errori del disco) da 1TB utilizzando dd . Posso montare l'immagine ( hdiutil attach o semplicemente doppio clic nel Finder) senza problemi e vedere i file sul volume HFS + principale. Tuttavia, non vedo le altre partizioni che conosco sono lì (EFI, Recovery HD). So che ci sono perché, se ripristino l'immagine direttamente su un'unità fisica, sono lì.

Tuttavia, vorrei ripristinare questa immagine su un SSD da 480 GB (più piccolo), quindi ho bisogno di ridurre la partizione HFS + principale / grande dell'immagine. Vi è abbondanza di spazio libero nella partizione (700 GB), quindi questo dovrebbe essere fattibile.

Ho provato a convertire l'immagine in un'immagine di lettura / scrittura ( hdiutil convert -format UDRW ) o in un pacchetto sparse ( hdiutil convert -format UDSB - restituisce un file da 200 GB).

L'immagine in lettura / scrittura non verrà ridimensionata:
hdiutil: resize request is below minimum size allowed.

L'esecuzione di hdiutil compact sul pacchetto sparse non la ridurrà:
Reclaimed 0 bytes out of 796.9 GB possible.

Qual è il modo corretto per eseguire il ridimensionamento della partizione HFS + principale / grande nell'immagine disco completa?

    
posta Nate Pinchot 04.08.2016 - 22:33
fonte

1 risposta

1

Secondo me potrebbe essere possibile, ma non è efficace perché per ottenere ciò dovresti estrarre e rimpicciolire una parte dell'immagine raw gg e quindi riassemblare tutte e tre le parti. Inoltre devi manipolare la tabella delle partizioni gpt all'interno dell'immagine raw dd riassemblata modificando i valori esadecimali. Quindi devi dd indietro dell'immagine.

Invece fai quanto segue che richiede molto meno tempo e probabilmente meno soggetto a errori:

  • Partiziona il tuo nuovo disco con 3 partizioni: EFI, volume di sistema principale e una partizione Recovery HD
  • Poiché EFI e la partizione di ripristino hanno dimensioni fisse e blocchi di partenza definiti, puoi semplicemente dd di EFI e Recovery HD nella tua immagine raw gg alle rispettive partizioni del tuo nuovo SSD
  • Per copiare il contenuto del vecchio volume principale, monta l'immagine raw gdr e rsync il contenuto nel nuovo volume principale.

Qui presumo tu abbia un disco esterno con un OS X completo (El Capitan) per preparare l'SSD. Tutti i nomi / identificatori o dimensioni dei dispositivi sono solo degli esempi e potrebbero differire dal tuo ambiente / risultato attuale.

Preparazione del nuovo SSD:

  • Apri Utility Disco e cancella il nuovo disco (Nome: SSD / Formato: OS X Esteso (Journaled) / Schema: tabella delle partizioni GUID)
  • Apri Terminale e inserisci diskutil list . Il risultato dovrebbe essere (le dimensioni potrebbero differire leggermente dalla tua):

    /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...
    
  • Nel terminale inserisci sudo gpt -r show disk0 . Il risultato dovrebbe essere (le dimensioni potrebbero differire leggermente dalla tua):

          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
    
  • Ora smonta il disco0 e rimuovi la seconda partizione:

    diskutil umountDisk disk0
    sudo gpt remove -i 2 disk0
    
  • Aggiungi la partizione di ripristino. La partizione di ripristino ha sempre la dimensione 1269536 blocchi e inizia alla dimensione totale del disco in blocchi - 1269576 blocchi (nel mio esempio è: 937426944 - 1269576 = 936157368)

    sudo gpt add -i 3 -b 936157368 -s 1269536 -t 426F6F74-0000-11AA-AA11-00306543ECAC disk0
    
  • Inserisci nuovamente sudo gpt -r show disk0 per mostrare la nuova partizione:

          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
    
  • Nello spazio vuoto tra la partizione i = 1 e i = 3 aggiungi una nuova partizione. Il blocco iniziale e la dimensione sono dati dai dati trovati sopra:

    sudo gpt add -i 2 -b 409640 -s 935747728 -t 48465300-0000-11AA-AA11-00306543ECAC disk0
    
  • Smonta il disco0 e formatta il nuovo volume:

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

Ripristino dei dati:

  • Monta l'immagine del tuo disco crudo facendo doppio clic su di esso.
  • Inserisci diskutil list . Dovresti vedere una nuova voce simile a questa:

    /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 EFI e Recovery HD dall'immagine all'SSD:

    sudo dd if=/dev/disk3s1 of=/dev/disk0s1 bs=4096
    diskutil umountDisk disk0
    sudo dd if=/dev/disk3s3 of=/dev/disk0s3 bs=4096
    
  • monta il volume principale dell'SSD:

    diskutil mount disk0s2
    
  • rsincronizza il contenuto del volume principale dell'immagine del disco (che dovrebbe essere visibile sul desktop in contrasto con le partizioni EFI / Recovery HD) sul volume principale SSD:

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

Questo è un esempio di comando rsync di base. Puoi perfezionare il comando rsync (opzioni / esclusioni) in base a questo o questo script collegati.

Controlla tutti i nomi dei dispositivi nei vari comandi contenenti dd o gpt a fondo oppure eliminerai o sovrascrivi le partizioni / i dati importanti indesiderati.

    
risposta data 05.08.2016 - 04:41
fonte

Leggi altre domande sui tag