Cambiar el tamaño de la partición APFS en Mojave

Estoy intentando cambiar el tamaño de una partición que es demasiado pequeña para mis necesidades. Aquí está la salida de diskutil list:

~> diskutil list
/dev/disk0 (internal):
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                         500.3 GB   disk0
1:                        EFI EFI                     314.6 MB   disk0s1
2:                 Apple_APFS Container disk1         400.0 GB   disk0s2
3:                 Apple_APFS Container disk2         100.0 GB   disk0s3

/dev/disk1 (synthesized):
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      APFS Container Scheme -                      +400.0 GB   disk1
                                Physical Store disk0s2
1:                APFS Volume Macintosh HD            234.4 GB   disk1s1
2:                APFS Volume Preboot                 23.6 MB    disk1s2
3:                APFS Volume Recovery                518.1 MB   disk1s3
4:                APFS Volume VM                      6.4 GB     disk1s4

/dev/disk2 (synthesized):
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      APFS Container Scheme -                      +100.0 GB   disk2
                                Physical Store disk0s3
1:                APFS Volume Mojave Beta             90.2 GB    disk2s1
2:                APFS Volume Preboot                 46.3 MB    disk2s2
3:                APFS Volume Recovery                512.3 MB   disk2s3
4:                APFS Volume VM                      3.2 GB     disk2s4

Miré esta publicación de MacObserver y probé esto:

    sudo diskutil apfs resizeContainer disk0s3 150G

También eché un vistazo a esta publicación, también re: diskutildocumentación.

La salida de la consola es la siguiente:

Comenzó la operación de APFS Alineando el delta de crecimiento a 49 999 994 880 bytes y apuntando a un nuevo tamaño de almacenamiento físico de 149 999 996 928 bytes Se determinó que el tamaño máximo para el almacenamiento físico de destino de este contenedor APFS es de 100 000 002 048 bytes Error: -69519: el disco de destino es demasiado pequeño para esta operación , o se requiere un espacio en su mapa de particiones que falta o es demasiado pequeño, lo que a menudo se debe a un intento de hacer crecer una partición más allá del comienzo de otra partición o más allá del final del espacio utilizable del mapa de particiones

Sé que tengo 50 gigas en el otro disco, pero ¿cómo puedo recuperarlo Macintosh HDy dárselo al Mojave Betadisco? Gracias por leer. Doy la bienvenida a sus sugerencias.

Actualizar

Solo para S y G, intenté hacer el disco grande más pequeño y ver qué pasaba .

Estado actual:

Shrinking APFS Physical Store disk0s2 from 399,963,168,768 to 349,999,996,928 bytes
Shrinking APFS data structures
[ - 0%..10%..20%..30%..40%............................... ] 45.0%

Yo ahora mismo

Actualización 2

No volé mi disco duro, pero no funcionó... bueno, funcionó... así es como se ve diskutil listahora después de ese intento:

 ~> diskutil list
/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                         500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         350.0 GB   disk0s2
   3:                 Apple_APFS Container disk2         100.0 GB   disk0s3

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +350.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            234.4 GB   disk1s1
   2:                APFS Volume Preboot                 23.6 MB    disk1s2
   3:                APFS Volume Recovery                518.1 MB   disk1s3
   4:                APFS Volume VM                      6.4 GB     disk1s4

/dev/disk2 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +100.0 GB   disk2
                                 Physical Store disk0s3
   1:                APFS Volume Mojave Beta             90.3 GB    disk2s1
   2:                APFS Volume Preboot                 46.3 MB    disk2s2
   3:                APFS Volume Recovery                512.3 MB   disk2s3
   4:                APFS Volume VM                      3.2 GB     disk2s4

Así que encogemos el grande y luego intentamos agrandar la pequeña partición. No tengo ni puta idea de dónde fueron los otros 50 conciertos, pero está ahí en alguna parte. Miré la aplicación Disk Utility y muestra una partición de 350 GB, una partición de 100 GB y 50 GB de espacio libre.

Si Apple supervisa esto, simplifique el cambio de tamaño de las particiones. Este es un PITA enorme y no debería serlo.

Respuestas (3)

Apple no proporciona una forma de hacer lo que quieres hacer. Hay herramientas de terceros que pueden mover una partición, pero la última vez que lo comprobé, no funcionarán con particiones de contenedores APFS.

Las particiones se almacenan en un disco de forma contigua. Esto significa que no puede simplemente agregar espacio libre a una partición. El espacio libre debe existir directamente debajo de la partición. Permítame mostrarle un ejemplo similar a su situación.

Primero está la salida del comando diskutil list disk1. La unidad a continuación es una imagen de disco escasa. Creé la imagen para ayudar a ilustrar mi respuesta. La imagen se divide bastante cerca de su archivo disk0.

Marlin:driveinfo davidanderson$ diskutil list disk1
/dev/disk1 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +500.3 GB   disk1
   1:                        EFI EFI                     314.6 MB   disk1s1
   2:                 Apple_APFS Container disk3         400.0 GB   disk1s2
   3:                 Apple_APFS Container disk4         100.0 GB   disk1s3

Aquí está la salida de sudo gpt -r show /dev/disk1. Este comando muestra el almacenamiento de valores en la tabla de particiones GUID (GPT). En este caso, las unidades son bloques de 512 bytes.

Marlin:driveinfo davidanderson$ gpt -r show /dev/disk1
      start       size  index  contents
          0          1         PMBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34          6         
         40     614448      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
     614488  781250000      2  GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
  781864488  195283952      3  GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
  977148440          5         
  977148445         32         Sec GPT table
  977148477          1         Sec GPT header

Dado que disk0es su unidad de arranque, no puede usar el gptcomando sin una sudoProtección de integridad del sistema (SIP) desactivada. Una alternativa al gptcomando es una herramienta de terceros llamada driveinfo . Si usa esta herramienta, no necesitará deshabilitar SIP o usar un archivo sudo. A continuación se muestra el resultado de este comando. Aquí, las unidades están en bytes.

Marlin:driveinfo davidanderson$ ./driveinfo -rd disk1
  Code       Size             Type       Identifier  Mounted  Name
  ----  ---------------  --------------  ----------  -------  ----
                    512  PMBR                                     
                    512  Pri GPT header                           
                 16,384  Pri GPT table                            
                  3,072  Free Space                               
            314,597,376  EFI              disk1s1      No     EFI 
        400,000,000,000  Apple_APFS       disk1s2      No         
         99,985,383,424  Apple_APFS       disk1s3      No         
                  2,560  Free Space                               
                 16,384  Sec GPT table                            
                    512  Sec GPT header                           

A continuación, ingresaré el siguiente comando para crear 50 GB de espacio libre. Esto es similar a lo que hiciste.

sudo diskutil apfs resizeContainer disk0s2 350G

Los resultados se muestran a continuación.

Marlin:driveinfo davidanderson$ diskutil list disk1
/dev/disk1 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +500.3 GB   disk1
   1:                        EFI EFI                     314.6 MB   disk1s1
   2:                 Apple_APFS Container disk3         350.0 GB   disk1s2
   3:                 Apple_APFS Container disk4         100.0 GB   disk1s3

Marlin:driveinfo davidanderson$ sudo gpt -r show disk1
      start       size  index  contents
          0          1         PMBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34          6         
         40     614448      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
     614488  683593744      2  GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
  684208232   97656256         
  781864488  195283952      3  GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
  977148440          5         
  977148445         32         Sec GPT table
  977148477          1         Sec GPT header

Marlin:driveinfo davidanderson$ ./driveinfo -rd disk1
  Code       Size             Type       Identifier  Mounted  Name
  ----  ---------------  --------------  ----------  -------  ----
                    512  PMBR                                     
                    512  Pri GPT header                           
                 16,384  Pri GPT table                            
                  3,072  Free Space                               
            314,597,376  EFI              disk1s1      No     EFI 
        349,999,996,928  Apple_APFS       disk1s2      No         
         50,000,003,072  Free Space                               
         99,985,383,424  Apple_APFS       disk1s3      No         
                  2,560  Free Space                               
                 16,384  Sec GPT table                            
                    512  Sec GPT header                

Los 50 GB de espacio libre se crearon inmediatamente después disk1s2. Para agregar este espacio libre a disk1s3, el espacio tendría que aparecer inmediatamente después de disk1s3.

Entonces, para agregar los 50 GB de espacio libre, disk0s3primero tendría que mover esta partición 50 GB. No creo que exista actualmente un software que pueda mover un contenedor APFS. Por lo tanto, no puede mover espacio de un contenedor APFS a otro contenedor APFS.

Las soluciones alternativas podrían incluir:

  • Clonar el contenido disk0s3en disk0s2. Consulte la respuesta de Geoff Nixon para conocer una de esas formas de clonar los contenidos.
  • Instale una copia nueva de Mojave en disk0s2, luego use la aplicación Asistente de migración para copiar datos importantes de disk0s3. Debo advertirle que no tengo conocimiento si el Asistente de migración funcionará con dos particiones de contenedor APFS en la misma unidad.
  • Haga una copia de seguridad disk0s3en otra unidad utilizando Time Machine o algún otro medio. A continuación, puede intentar restaurar adisk0s2

La implementación de cualquiera de las soluciones anteriores le permitiría eliminar disk0s3y cambiar el tamaño disk0s2para contener el espacio ocupado originalmente por ambas particiones.

Apéndice

A menudo, un usuario necesita conocer la partición de una unidad. En particular, donde está el espacio libre. El diskutil list disk0comando muestra las particiones en orden ascendente y el tamaño de cada partición. Sin embargo, este comando no muestra espacio libre. La aplicación Disk Utility muestra ocasionalmente espacio libre, pero el valor suele ser incorrecto y no muestra dónde está el espacio libre con respecto a las otras particiones.

Entonces, ¿dónde se muestra el espacio libre? Aquí hay algunas formas de determinar dónde está el espacio libre.

  1. El sudo gpt -r show /dev/disk0comando mostrará los bloques de sector lógico utilizados por cada partición. El comando también mostrará el espacio libre entre cada partición en unidades de bloque de sector lógico. En los días de OS X, podía ejecutar este comando en las unidades de arranque. A partir de macOS, la Protección de integridad del sistema (SIP) debe estar deshabilitada para hacer esto.
  2. Utilice el diskutil info -plist disk0s#comando para recuperar #los valores de bytes de tamaño e inicio del número de partición. Debe repetir el comando para cada partición en una unidad. A continuación, puede compilar una tabla similar a la salida del gpt -r show /dev/disk0comando. Básicamente, el espacio libre es cualquier espacio no asignado a una partición, el registro de arranque maestro protegido (PMBR) y las tablas de particiones GUID (GPT).
  3. Escriba un script BASH que automatizaría el camino número 2. Se puede descargar un script gratuito desde este sitio . Suponiendo que sus descargas vayan a la Downloadscarpeta predeterminada, puede obtener el espacio libre ingresando el comando que se muestra a continuación. Nota: No necesita ingresar sudoo deshabilitar SIP.

    ~/Downloads/driveinfo-1.0.1/driveinfo -r disk0
    

Una nota sobre el uso de particiones de contenedores APFS

No es normal tener dos particiones de contenedor APFS en la misma unidad. Al hacerlo, derrota una de las principales razones para la creación de la APFS. Si necesita dos volúmenes APFS diferentes, debe crear cada volumen en la misma partición de contenedor APFS. Esto también es cierto, si desea tener dos o más versiones diferentes de High Sierra y/o Mojave instaladas.

Cuando desee eliminar un volumen APFS, el espacio libre se devuelve automáticamente al contenedor APFS. No debería necesitar ingresar un sudo diskutil apfs resizeContainer disk0s# 0comando. Si elimina un volumen que contiene una versión de macOS, es necesario realizar una limpieza adicional. Los pasos de limpieza necesarios se describen en la respuesta aceptada a la pregunta: ¿ Eliminar macOS de un contenedor APFS?

Gracias por una explicación tan detallada. Esperaba llevar mi pequeño disco de 100G a 150G utilizando 50G que ahora son gratuitos. El comando que diste cambia el tamaño del disco de 350G a 400G. Lo intenté sudo diskutil apfs resizeContainer disk0s3 0, pero dice que no hay suficiente espacio. Creo que voy a bombardear todo el viaje y comenzar de nuevo si no puedo descifrarlo esta noche :)
@Adrian: edité mi pregunta en un esfuerzo por explicar mejor por qué su enfoque no funciona.

No estoy siguiendo gran parte de la discusión anterior. Parece que tiene suficiente espacio para consolidar.

  1. Recupere sus 50G en la primera partición física.
    diskutil ap resizeContainer disk0s2 0

  2. Restaure la partición lógica que desea conservar del segundo contenedor APFS a una partición lógica adicional en el primer contenedor.
    asr restore --source /dev/disk2s1 --target /dev/disk1.

    Esto puede llevar algún tiempo si necesita desfragmentarse. (Si esto le causa algún problema (durante la inversión), es posible que deba destruir ( diskutil ap deleteVolume) las particiones de prearranque, VM y recuperación en el segundo contenedor. Supongo que está bien para usted, y en realidad no he visto que eso sea un problema durante algún tiempo.)

  3. Monte su nueva partición lógica "Mojave Beta", la que ahora está en el primer contenedor . Asegúrate de que se vea bien.

  4. Deshágase del segundo contenedor APFS:
    diskutil ap deleteContainer disk0s3; luego elimine la partición física por completo: diskutil eraseVolume free free disk0s3.

  5. Y finalmente, recupere el resto del disco en el primer (único) Contenedor APFS una vez más:
    diskutil ap resizeContainer disk0s2 0.

¿No? ¿Me estoy perdiendo de algo?

¿Seguiría Mojave Beta arrancable?
Debería serlo, aunque es posible que deba usarlo systemsetup -setstartupdiskpara cambiar los "roles" de volumen (puede ser impredecible al cambiar el disco de inicio a través de las Preferencias del sistema). Ver eclecticlight.co/2018/08/30/…

FYI, debe especificar el contenedor (en su caso, "disk2", por lo que el comando debería ser:

Por ejemplo, para aumentar el tamaño del disco Mojave Beta (disk2):

sudo diskutil apfs resizeContainer disk2 150G

No estoy seguro si tiene que reducir otro volumen o no.

También debe validar la configuración de su Time Capsule para asegurarse de que no tiene demasiado historial (para limitar el espacio).