Redimensionar partição APFS no Mojave

7

Estou tentando redimensionar uma partição pequena demais para minhas necessidades. Aqui está a saída 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

Eu olhei para este post do MacObserver e tentei o seguinte:

    sudo diskutil apfs resizeContainer disk0s3 150G

Também dei uma espiada neste post, também re: diskutildocumention.

A saída do console é a seguinte:

Operação APFS iniciada Alinhando o delta de crescimento para 49.999.994.880 bytes e direcionando um novo tamanho de armazenamento físico de 149.999.996.928 bytes Determinado o tamanho máximo para o armazenamento físico de destino desse contêiner APFS como 100.000,002.048 bytes Erro: -69519: o disco de destino é muito pequeno para esta operação , ou é necessária uma lacuna no mapa de partição ausente ou muito pequena, geralmente causada por uma tentativa de aumentar uma partição além do início de outra partição ou além do espaço útil do final do mapa de partição

Eu sei que tenho 50 shows por aí na outra unidade, mas como faço para recuperar Macintosh HDe entregá-la à Mojave Betaunidade? Obrigado pela leitura. Congratulo-me com suas sugestões.

Atualizar

Apenas para S e G, tentei diminuir o tamanho da unidade e ver o que acontece .

Status atual:

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%

Eu agora

Atualização 2

Eu não explodi meu disco rígido, mas não funcionou ... bem, meio que funcionou ... aqui está o que diskutil listparece agora depois dessa tentativa:

 ~> 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

Então encolhendo a grande e depois tentando aumentar a pequena partição. Não faço ideia de onde foram os outros 50 shows, mas está lá em algum lugar. Eu olhei para o aplicativo Disk Utility e ele mostra uma partição de 350 GB, uma partição de 100 GB e 50 GB de espaço livre.

Se a Apple monitorar isso, simplifique o redimensionamento de partições. Esta é uma enorme PITA e não deveria ser.

Adrian
fonte

Respostas:

6

A Apple não fornece uma maneira de fazer o que você deseja fazer. Existem ferramentas de terceiros que podem mover uma partição, mas da última vez que verifiquei, elas não funcionarão com partições de contêiner APFS.

Partições são armazenadas em uma unidade contígua. Isso significa que você não pode simplesmente adicionar espaço livre a uma partição. O espaço livre deve existir diretamente abaixo da partição. Deixe o meu mostrar um exemplo semelhante à sua situação.

Primeiro é a saída do comando diskutil list disk1. A unidade abaixo é uma imagem de disco esparsa. Eu criei a imagem para ajudar a ilustrar minha resposta. A imagem é particionada razoavelmente perto da sua 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

Aqui está a saída de sudo gpt -r show /dev/disk1. Este comando mostra o armazenamento de valores na Tabela de Partição GUID (GPT). Nesse caso, as unidades são blocos 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

Como disk0é a sua unidade de inicialização, você não pode usar o gptcomando sem o sudoSIP (System Integrity Protection) desativado. Uma alternativa ao gptcomando é uma ferramenta de terceiros chamada driveinfo . Se você usar esta ferramenta, não precisará desativar o SIP ou usar a sudo. Abaixo está a saída deste comando. Aqui, as unidades estão em 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                           

Em seguida, inserirei o comando abaixo para criar 50 GB de espaço livre. Isso é semelhante ao que você fez.

sudo diskutil apfs resizeContainer disk0s2 350G

Os resultados são mostrados abaixo.

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                

Os 50 GB de espaço livre foram criados imediatamente após disk1s2. Para adicionar esse espaço livre disk1s3, o espaço teria que ocorrer imediatamente depois disk1s3.

Portanto, para adicionar os 50 GB de espaço livre, disk0s3você precisa primeiro mover esta partição para 50 GB. Não acredito que exista atualmente software que possa mover um contêiner APFS. Portanto, você não pode mover espaço de um contêiner APFS para outro contêiner APFS.

Soluções alternativas podem incluir:

  • Clone o conteúdo disk0s3para disk0s2. Veja a resposta de Geoff Nixon para uma dessas maneiras de clonar o conteúdo.
  • Instale uma cópia nova do Mojave no e disk0s2, em seguida, use o aplicativo Assistente de Migração para copiar dados importantes disk0s3. Devo avisar que não tenho conhecimento se o Assistente de Migração funcionará com duas partições de contêiner APFS na mesma unidade.
  • Faça backup disk0s3em outra unidade usando o Time Machine ou outros meios. Você pode tentar restaurar paradisk0s2

A implementação de qualquer uma das soluções acima permitiria remover disk0s3e redimensionar disk0s2para conter o espaço originalmente ocupado por ambas as partições.

Apêndice

Geralmente, o usuário precisa conhecer o particionamento de uma unidade. Em particular, onde o espaço livre é. O diskutil list disk0comando mostra as partições em ordem crescente e o tamanho de cada partição. No entanto, este comando não mostra espaço livre. O aplicativo Disk Utility ocasionalmente mostra espaço livre, mas o valor geralmente está incorreto e não mostra onde está o espaço livre em relação às outras partições

Então, onde é mostrado o espaço livre? Aqui estão algumas maneiras de determinar onde está o espaço livre.

  1. O sudo gpt -r show /dev/disk0comando mostrará os blocos de setor lógico usados ​​por cada partição. O comando também mostrará o espaço livre entre cada partição nas unidades de blocos do setor lógico. Nos dias do OS X, você poderia executar este comando nas unidades de inicialização. A partir do macOS, o System Integrity Protection (SIP) deve ser desativado para fazer isso.
  2. Use o diskutil info -plist disk0s#comando para recuperar os #valores de início e tamanho do byte do número da partição . Você precisa repetir o comando para cada partição em uma unidade. Em seguida, você pode compilar uma tabela semelhante à saída do gpt -r show /dev/disk0comando Basicamente, espaço livre é qualquer espaço não alocado para uma partição, o PMBR (Registro de Inicialização Mestre Protegido) e as Tabelas de Partição GUID (GPT).
  3. Escreva um script BASH que automatize a maneira número 2. Um script gratuito pode ser baixado deste site . Supondo que seus downloads vão para a Downloadspasta padrão , você pode obter o espaço livre digitando o comando mostrado abaixo. Nota: Você não precisa inserir sudoou desativar o SIP.

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

Uma observação sobre o uso de partições de contêiner APFS

Não é normal ter duas partições de contêiner APFS na mesma unidade. Fazendo isso, derrota um dos principais motivos para a criação do APFS. Se você precisar de dois volumes APFS diferentes, deverá criar cada volume na mesma partição de contêiner APFS. Isso também é verdade, se você quiser ter duas ou mais versões diferentes do High Sierra e / ou Mojave instaladas.

Quando você deseja remover um volume APFS, o espaço livre é retornado automaticamente para o contêiner APFS. Você não precisa inserir um sudo diskutil apfs resizeContainer disk0s# 0comando. Se você excluir um volume que contenha uma versão do macOS, haverá uma limpeza adicional que precisará ser realizada. As etapas de limpeza necessárias estão descritas na resposta aceita à pergunta: Remover o macOS de um contêiner APFS?

David Anderson
fonte
Obrigado por uma explicação tão detalhada. Eu esperava levar meu pequeno disco de 100G a 150G utilizando 50G que agora são gratuitos. O comando que você deu redimensiona o disco 350G para 400G. Eu tentei sudo diskutil apfs resizeContainer disk0s3 0, mas diz que não há espaço suficiente. Eu acho que estou indo para bombardear toda a unidade e começar de novo se eu não consigo descobrir esta noite :)
Adrian
@ Adrian: Eu editei minha pergunta em um esforço para explicar melhor por que sua abordagem não está funcionando.
David Anderson
5

Não estou acompanhando muito da discussão anterior. Parece que você tem espaço suficiente para consolidar.

  1. Volte seu 50G na primeira partição física.
    diskutil ap resizeContainer disk0s2 0

  2. Restaure a partição lógica que você deseja manter do segundo contêiner APFS para uma partição lógica adicional no primeiro contêiner.
    asr restore --source /dev/disk2s1 --target /dev/disk1.

    Isso pode levar algum tempo se for necessário desfragmentar. (Se isso lhe causar algum problema (durante a inversão), talvez seja necessário remover ( diskutil ap deleteVolume) as partições Preboot, VM e Recovery no segundo contêiner. Suponho que você esteja bem e não percebi que isso seja um problema por algum tempo.)

  3. Monte sua nova partição lógica "Mojave Beta", a que está agora no primeiro contêiner . Certifique-se de que parece correto.

  4. Livrar-se do segundo recipiente APFS:
    diskutil ap deleteContainer disk0s3; em seguida, remover a partição física inteiramente: diskutil eraseVolume free free disk0s3.

  5. E, finalmente, recuperar o restante do disco no primeiro (apenas) APFS Container mais uma vez:
    diskutil ap resizeContainer disk0s2 0.

Não? Estou esquecendo de algo?

Geoff Nixon
fonte
O Mojave Beta ainda seria inicializável?
David Anderson
11
Deve ser, embora você precise usar systemsetup -setstartupdiskpara alternar as "funções" do volume (pode ser um acerto e um acerto com a alteração do disco de inicialização por meio das Preferências do Sistema). Veja eclecticlight.co/2018/08/30/…
Geoff Nixon
0

Para sua informação, você deve especificar o contêiner (no seu caso "disk2", portanto, o comando deve ser:

Por exemplo, para aumentar o tamanho do disco Mojave Beta (disk2):

sudo diskutil apfs resizeContainer disk2 150G

Não tenho certeza se você precisa reduzir outro volume ou não.

As configurações do Time Capsule também devem ser validadas para garantir que você não tenha muito histórico (para limitar o espaço).

tekblackbelt
fonte