Como alterar VDI de tamanho fixo com o comando modifyhd no Windows?


70

Estou tentando descobrir como alterar o tamanho de um arquivo VDI. Sou novo no VirtualBox e tenho muito a aprender. Mas acho que entendi o básico. Eu já instalei o Windows 7 como meu primeiro convidado. O host também é o Windows 7. Eu não tinha certeza da quantidade de espaço em disco a ser alocado; por isso, usei um tamanho VDI de 40 GB e um tamanho fixo para aumentar o desempenho. Mas mudei de idéia agora e quero adicionar outros 10 GB. Estive clicando no programa e lendo o conteúdo do menu Ajuda, mas não está ajudando. Explica controladores de disco, SAS, SATA, SCSI, yada, yada, mas não o que estou procurando.

Eu procurei na Internet em busca de respostas, o fórum do VirtualBox diz que você deve usar o Gparted se quiser o método mais fácil (alguns mods postaram algo pegajoso). Alguns usuários discutem o uso do ddcomando. Mas isso é tudo sobre Linux. Além disso, há muitas perguntas aqui no SU que lidam com o aumento e a diminuição do tamanho dos arquivos VDI, mas o principal é usar o Linux como host e o Windows como convidado.

Eu encontrei este bom do blog post sobre como fazê-lo com o modifyhdcomando de VBoxManage. Esse cara também está fazendo isso no Linux como sistema operacional host. Ele até queria o mesmo tamanho (50 GB) para seu arquivo VDI que eu para o meu, que coincidência. Então, pensei em tentar de qualquer maneira, fazê-lo ou quebrá-lo. O que pode dar errado? ... eh? Bem, esta é a surpresa feia que recebi.

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

uma

Diga o que agora?! ... não pode redimensionar discos rígidos virtuais no formato VDI? Você não diz? Não suporta seu próprio formato? Agora, que tal isso ...

Não existe realmente uma maneira simples de alterar o tamanho de um arquivo VDI, de preferência com alguns cliques no VirtualBox? Alguma coisa em andamento?


4
Eu removi o discurso retórico sobre a qualidade do VirtualBox, que não adiciona nada útil à pergunta.
Sleske

11
Para referência futura, modifyhdé agora conhecido como modifymediummas permanece compatível com versões anteriores - ver virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
djule5

Respostas:


121

Resumo:

  • VBoxManage.exe modifyhd --resize pode aumentar (mas não diminuir) o tamanho lógico da imagem do disco (o tamanho visto pelo sistema operacional convidado).
  • VBoxManage.exe modifyhd inputfile.vdi --compactpode diminuir o tamanho da imagem do disco físico (o tamanho do arquivo de imagem no disco, conforme visto pelo sistema operacional host). No entanto, isso não altera o tamanho do disco lógico. Observe que isso só funciona se o espaço livre tiver sido zerado primeiro no sistema operacional convidado.
  • modifyhd só funciona apenas com a variante de formato dinâmico ("imagem alocada dinamicamente").
  • modifyhd só funciona com os formatos de imagem VDI e VHD.
  • Se você estiver usando snapshots, precisará clonar o VDI mais recente da snapshot da subpasta "Snapshots".

Para detalhes, consulte a seção 8.23. VBoxManage modifyhd no manual.


O motivo pelo qual a redução do tamanho do disco lógico de uma VDI ainda não foi implementada é impedir a corrupção de dados que pode ocorrer e você teria VMs não inicializáveis ​​como resultado disso. Portanto, quando a --resizeopção é usada, o novo tamanho do disco deve ser maior que o tamanho atual. Não é permitido que seja menor ou igual ao tamanho atual. Em outras palavras, um disco de 40 GB só pode ser redimensionado para 41 GB ou mais que isso, não pode ser redimensionado para 40 GB (isso é idiota) ou 39 GB ou menos.

As versões antigas do VirtualBox criavam arquivos VDI como variante de formato "fixo". A nova configuração padrão é agora criar variantes de formato "dinâmico" quando novos arquivos VDI (imagem de disco virtual) são criados. (Suponho que esse seja o caso desde a introdução da variante de formato dinâmico, qualquer que seja a versão introduzida.)

Então, o que a mensagem de erro "operação para este formato ainda não foi implementada" significa é que seu arquivo VDI usa a variante de formato "fixo". Para contornar esse problema, você precisará clonar seu arquivo VDI usando o clonehdcomando Para visualizar em qual variante de formato seu arquivo VDI está atualmente, você pode usar o showhdinfocomando

Exemplo de trabalho

Mostrar informações de VDI sobre o disco atual.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID:           132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity:       40960 MBytes
Size on disk:   40962 MBytes
In use by VMs:  sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)

C:\Program Files\Oracle\VirtualBox>

Veja onde está escrito "padrão fixo"? É por isso que cospe o erro acima quando você tenta redimensioná-lo.

Clone o arquivo VDI antigo para um novo arquivo VDI.

Comando de entrada: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c

C:\Program Files\Oracle\VirtualBox>

Voilà! O arquivo antigo agora foi clonado para um novo arquivo. Como a configuração padrão nas novas versões do VirtualBox é usar a variante de formato "dinâmico", você não precisa defini-lo explicitamente. Embora, se você estiver trabalhando com uma versão mais antiga do VirtualBox, convém definir a opção como "dinâmica" (se disponível) para garantir melhor compatibilidade e / ou flexibilidade com versões futuras do VirtualBox.

Mostrar informações de VDI sobre o disco clonado.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       40960 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

Veja como agora diz "padrão dinâmico"? Que bom!

(Nota: o motivo aqui é 7806 MB como tamanho físico, porque eu usei a --compactopção no arquivo VDI original na tentativa de forçar a conversão para uma variante de formato dinâmico. Apenas algo que li no fórum do VirtualBox, supostamente teria funcionado com versões mais antigas, então achei melhor tentar. Não funcionou.)

Redimensionando o disco clonado.

Comando de entrada: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

C:\Program Files\Oracle\VirtualBox>

Sucesso! Sem formato bullshitting não mais. Lembre-se de redimensionar o novo disco clonado, e não o original. Lembre-se de que o tamanho é expresso em MB. Eu acredito que você pode usar, por exemplo 51200, bem como 50G(ou possivelmente "GB"). Há também a opção --resizebyteque pode ser usada para expressar o tamanho em bytes.

Mostrar informações de VDI sobre o disco clone redimensionado.

Comando de entrada: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       51200 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

É isso aí! A partir daqui, o que você precisa fazer é adicionar esta unidade clonada como seu novo VDI para a VM. Você faz isso dentro do VirtualBox. Eu não vou entrar nisso. Se você conseguiu ler e entender isso até agora, provavelmente não precisará de orientações adicionais. Você pode excluir o arquivo "fixo" antigo ou deixá-lo como backup. Certifique-se de testar o novo arquivo VDI antes de excluir o arquivo de origem original.

Nota! Você não verá imediatamente o novo tamanho do disco clonado. Você precisa inicializar a VM e, em seguida, usar sua ferramenta de gerenciamento de partições para expandir sua partição para preencher o disco virtual (ou criar mais partições). Para o Windows, basta executar diskmgmt.msce você poderá expandir a partição.

Screenshots

uma b c d e f g

Referência



Bom olho! Corrigi o parâmetro modifyhd. Obrigado por trazer isso para a minha atenção.
Samir

2
Uma resposta muito bem escrita! IMHO isso deve receber muitos votos.
Johan Karlsson

+1: São pessoas como você e o conhecimento que você compartilha livremente, que tornam o ecossistema StackExchange um recurso fantástico!
Homunculus Reticulli

11
Se você tiver problemas por usar snapshots , consulte virtualbox.org/ticket/9103 . Basicamente, você precisa aplicar a operação modifymedium/ modifyhdno próprio arquivo de captura instantânea.
djule5

11

Aqui está um processo bastante simples que funcionou para redimensionar um disco de tamanho fixo do VirtualBox (v. 4.3.16) para um disco dinâmico de 60 GB no meu Mac (OS X 10.9.4) com Linux (Ubuntu 14.04) em execução como sistema operacional convidado:

Em Terminal no Mac, CD no diretório com o arquivo VDI e digite o seguinte:

VBoxManage showhdinfo mydisk.vdi  
VBoxManage clonehd mydisk.vdi mydiskClone.vdi  
VBoxManage modifyhd mydiskClone.vdi --resize 61440  
VBoxManage showhdinfo mydiskClone.vdi

Na seção Armazenamento de aplicativos do VirtualBox, adicione mydiskClone.vdi como um segundo HD e inicie a VM normalmente.

No shell no sistema operacional convidado, digite:

sudo fdisk /dev/sdb
- delete all partitions
- create new partition on full disk

Reinicie o convidado. Quando voltar, vá para o shell novamente e digite:

sudo resize2fs /dev/sdb1

Encerre o SO convidado.

Na seção Armazenamento de aplicativos do VirtualBox novamente, defina mydiskClone.vdi como o disco de inicialização. Em seguida, inicie o SO convidado e verifique o novo tamanho do disco usando as propriedades de "Computador" no navegador de arquivos.


Esta resposta não faz sentido. Você primeiro cria uma partição grande em / dev / sdb e a redimensiona, mas não cria um sistema de arquivos nela. Você esqueceu a etapa de copiar a partição original?
Sleske

5

A clonagem é na verdade uma solução melhor e existe uma maneira mais fácil de fazer isso.

No menu Arquivo, selecione Virtual Media Manager e clique em Copiar. A origem será o seu disco rígido vdi original de tamanho fixo e o seu destino será algo novo de sua escolha (inclui a opção de um novo).


Isso faz parte da resposta de sammyg.
Efren

4

OK, então fiz isso sem clonagem .

Eu tinha um arquivo VDI de 100 GB (formato fixo) com o Ubuntu nele. Trabalhando bem. Eu queria liberar algum espaço no host diminuindo a VM.

Passos:

  1. Limpar

Arquivos indesejados excluídos. 45GB grátis. Eu só preciso de 30 GB para ser liberado.

  1. Corrija o SO convidado

Eu só tenho uma partição, então não posso fazer nada de dentro do Ubuntu convidado. Montado Ubuntu Live na VM e inicializado a partir dele.

Usado gpartedpara reduzir a partição para 70 GB. Criou uma nova partição no espaço não utilizado em ext4.

  1. Limpe o espaço livre

O espaço livre em uma nova partição (30 GB).

Siga este guia: Encolha o disco rígido virtual no Ubuntu como SO convidado e host usando o zerofree

Minha nova partição foi /dev/sda3.

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. Compactar o VDI

    VBoxManage modifyhd "ubuntu.vdi" compact

Demorou um pouco, mas funcionou!


11
Você tem certeza de que isso funcionou? De acordo com o manual do VirtualBox, --compactfunciona apenas para imagens alocadas dinamicamente, não para imagens de tamanho fixo.
Sleske

11
@ ATOzTOA: Se o arquivo de imagem do disco aumentar, não será uma imagem de "formato fixo", mas uma imagem "alocada dinamicamente", que foi o que você escreveu em sua resposta.
Sleske

3
Não, é uma imagem alocada dinamicamente . Para citar o manual: "Se você criar uma imagem de tamanho fixo, será criado no seu sistema host um arquivo de imagem com aproximadamente o mesmo tamanho da capacidade do disco virtual." Virtualbox.org/manual/ch05.html#vdidetails
sleske 13/05

11
"Uma imagem de tamanho fixo significa que não pode crescer além do tamanho especificado." NÃO. "Tamanho fixo" significa que o tamanho é fixo, portanto sempre o mesmo. Leia os documentos.
Sleske 14/05

11
Se alguém estiver lendo isso e não tiver certeza de quem está certo. @sleske está correto. Imagens de tamanho fixo são exatamente o que dizem. Corrigido o tamanho especificado ao criar a imagem. Nos benchmarks, isso proporciona um desempenho muito maior do que as imagens alocadas dinamicamente; portanto, qualquer pessoa que utilize tarefas intensivas do VBox for HD provavelmente deve considerar esse formato, apesar de suas limitações.
19416 Jack

2

Meio tarde para a festa aqui, mas vou adicionar meus 2 centavos. Primeiro direi que esse é um processo complicado que deixará a maioria dos usuários casuais loucos tentando descobrir. Por que a Oracle não incluiu isso na GUI da VBox é um mistério.

Etapa 1: use a linha de comando do Windows (VBoxmanage) para aumentar o tamanho da unidade. Uma dica aqui é usar o ID da unidade vdi em vez de tentar infinitamente entrar no local do arquivo e receber mensagens de erro.

Etapa 2: você precisará expandir sua partição primária para fazer uso do novo espaço. Faça o download do iso gparted e crie uma nova máquina virtual no VBox usando-a como fonte IDE. Em seguida, use a unidade VDI existente como o disco SATA. Não crie uma unidade virtual para esta máquina. Inicialize a nova máquina e você terá o gparted Gui em execução. Isso pode levar algumas reinicializações para se resolver.

Depois que o gparted estiver em execução, você verá as partições do seu drive vdi que deseja redimensionar. IMPORTANTE: Você precisará excluir a partição estendida e trocar o espaço no arquivo para poder aumentar o tamanho da partição primária, para não alocar todo o novo espaço para o PP. Depois de fazer isso, você terá que designar o espaço restante para a nova partição estendida e criar um novo espaço no arquivo de troca. Achei que isso era muito mais fácil do que procurar na linha de comando.

Não é um pedaço de bolo, mas é factível ... levei cerca de meio dia pesquisando na web para descobrir isso. Rodando win8.1 / Ubuntu no VBox

Willie


2

Veja como redimensionei / ampliei / expandi uma imagem VDI fixa (meu processo para reduzi-las está em outra resposta):

  1. Use o VirtualBox para criar um novo disco do tamanho desejado (o tamanho DEVE ser pelo menos o mesmo que o original). Faça isso abrindo as Configurações do VirtualBox para a VM convidada, navegue até Armazenamento, clique no Controlador de disco rígido (ex. "SATA") e clique no "+" para adicionar um disco rígido. Em seguida, configure o novo disco conforme desejado.
  2. Faça o download do ISO ao vivo do gparted e configure a VM convidada para inicializá-lo (novamente, configurações de armazenamento).
  3. Faça backup do armazenamento atual da sua VM convidada.
  4. Inicialize a VM convidada (deve inicializar no ambiente ao vivo do gparted). De dentro do ambiente gparted:
    1. Use o aplicativo gparted para verificar se o disco existente é "/ dev / sda" e se o seu novo disco (maior) é "/ dev / sdb" (lista suspensa no canto superior direito).
    2. Feche o aplicativo gparted.
    3. Abra um terminal com privilégios de root (clique com o botão direito na área de trabalho -> Terminais -> terminal com privilégios de root).
    4. Digite o seguinte comando: dd if=/dev/sda of=/dev/sdb status=progress bs=128Me aguarde a conclusão. Isso copiará o disco original para o novo disco byte a byte, incluindo MBR etc. (Nota: Isso pode demorar um pouco para ser concluído, dependendo dos tamanhos do disco original, velocidade do disco no host, etc.). (Nota: se sua VM convidada tiver> 1 GB de RAM alocada, você poderá alterar o parâmetro 'bs' para "bs = 256M", o que pode acelerar um pouco a cópia).
    5. Abra novamente o aplicativo gparted
    6. Selecione a nova unidade (maior) (deve ser / dev / sdb) no menu suspenso superior direito.
    7. Expanda as partições conforme desejado. Para expandir uma partição que não está no final, talvez seja necessário mover partições que estão após a (s) uma (s) que você deseja expandir. Dependendo das especificidades do seu esquema de particionamento, você pode precisar fazer isso em várias etapas, como aumentar a última partição até o fim e encolhê-la, movendo tudo até o fim. No meu caso, minha partição final foi o linux-swap, então eu simplesmente a excluí, expandi minha partição primária conforme desejado e depois recriei a partição de swap no final (tomando cuidado para replicar seu esquema de particionamento original).
    8. Aplicar mudanças.
    9. Nesse ponto, você deve ter um novo disco de tamanho fixo com todo o conteúdo original e mais espaço que o original. Você pode montar o novo disco no ambiente ao vivo do gparted e verificar.
    10. Encerre a VM convidada (gparted live) e remova o ISO da unidade da VM.
  5. Vá para Configurações da VBox da VM convidada, navegue até Armazenamento e remova o disco original da lista (clique com o botão direito do mouse e selecione "Remover anexo"). Isso deve deixar o disco recém-criado para a VM. Nota: Esta etapa é simplesmente remover o disco da configuração da VM convidada - o disco original da VM convidada (por exemplo, o pequeno) ainda está disponível na máquina host.
  6. Inicialize a VM e divirta-se!
  7. (Depois que tudo estiver confirmado funcionando como esperado, você pode excluir o disco da VM original.)

Embora o acima tenha funcionado muito bem para mim várias vezes, parece que são necessárias mais algumas etapas se o LVM for usado. (NOTA: Se o LVM for usado, você pode simplesmente adicionar um novo disco do tamanho desejado e adicioná-lo ao grupo de volumes.) Com o CentOS 6.6, em que o LVM é usado, eu tive que aumentar também o espaço no LVM. Então, depois de inicializar o novo disco criado acima, eu fiz algo nesse sentido (várias partes disso variam com base nos nomes da sua configuração):

  1. Obtenha informações sobre a configuração do LVM:

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  2. Estender o volume físico (PV) (o grupo de volumes (VG) refletirá automaticamente o mesmo aumento):

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
    
  3. Estenda o volume lógico (LV):

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  4. Estenda o sistema de arquivos:

    Antes:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

    Comando:

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.
    

    Depois de:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

Boa resposta! Bem vindo ao site!
Djsmiley2k # CoW #:

1

Aqui está como redimensionei / reduzi / reduzi uma imagem VDI fixa (meu processo para expandi-la está em outra resposta neste mesmo tópico):

Primeiro, um breve resumo do motivo pelo qual eu precisava disso (pois há muitos cenários para reduzir um VDI, alguns dos quais podem não ser viáveis ​​com essa abordagem): anos atrás, criei um VDI fixo para um convidado do Windows Server e o dimensionei em 600 GB. Não me lembro por que escolhi esse tamanho, mas até hoje consumi apenas 100 GB nesse convidado e quero recuperar a maior parte do espaço restante. Portanto, no meu caso, quero preservar todos os dados no convidado e simplesmente liberar espaço não utilizado no convidado.

(As etapas a seguir são principalmente da minha memória de ter feito isso nas últimas 2 horas, então peço desculpas se eu perder alguma coisa aqui.)

  1. Determine o tamanho que você deseja que o novo tamanho tenha. Naturalmente, você provavelmente desejará deixar um espaço extra além do que está consumindo no momento. O tamanho deve ser pelo menos o mesmo que os dados no disco de origem / original, arredondados para o GB mais próximo.
  2. Use o VirtualBox para criar um novo disco de tamanho fixo com o tamanho determinado na etapa anterior. Faça isso abrindo as Configurações do VirtualBox para a VM convidada, navegue até Armazenamento, clique no Controlador de disco rígido (ex. "SATA") e clique no "+" para adicionar um disco rígido. Em seguida, configure o novo disco conforme desejado.
  3. Faça o download do ISO ao vivo do gparted e configure a VM convidada para inicializá-lo (novamente, configurações de armazenamento).
  4. Faça backup do armazenamento atual da sua VM convidada.
  5. Inicialize a VM convidada (deve inicializar no ambiente ao vivo do gparted). De dentro do ambiente gparted:

    1. Use o aplicativo gparted para determinar qual disco é o "original" e qual é o "novo". O original terá pelo menos uma partição, enquanto a nova ficará completamente em branco. (Normalmente, o "original" é o primeiro disco atribuído a / dev / sda e o disco "novo" é o segundo disco designado a / dev / sdb.)
    2. Use o aplicativo gparted para reduzir as partições originais / de origem aos tamanhos desejados. Lembre - se de clicar no botão "Aplicar" depois de selecionar todas as operações. (Isso pode demorar um pouco, dependendo do tamanho da partição e da velocidade do disco.)
    3. Use o aplicativo gparted para criar uma tabela de partição no novo disco (Dispositivo -> Criar tabela de partição ..., deixe o tipo como MSDOS).
    4. Use o aplicativo gparted para criar partições idênticas no novo disco. (Para garantir que eles sejam iguais, peguei as informações detalhadas de cada partição no disco original usando a opção de menu Partição-> Informações ... e salvei uma captura de tela para usar quando criei a mesma partição ( s) no disco novo / de destino.) Certifique-se de:
      • Crie cada partição de destino do mesmo tamanho que o original (recém-ajustado).
      • Defina qualquer sinalizador nas partições para corresponder (pode ser necessário fazer após a criação da partição).
      • Defina qualquer etiqueta nas partições para corresponder.
      • (OBSERVAÇÃO: O UUID será definido automaticamente quando os dados forem copiados.)
    5. Clique no botão "Aplicar" para confirmar todas as alterações.
    6. Anote qual disco é o "original" e o que é "novo" e anote os números das partições correspondentes (ex. / Dev / sda1 -> / dev / sdb1, / dev / sda2 -> / dev / sdb2, ...)
    7. Feche o aplicativo gparted.
    8. Abra um terminal com privilégios de root (clique com o botão direito na área de trabalho -> Terminais -> terminal com privilégios de root).
    9. Supondo que seu disco "original" seja / dev / sda e "new" seja / dev / sdb (caso contrário, ajuste o comando a seguir adequadamente), copiaremos cada partição, uma de cada vez. Para cada partição anotada na etapa acima, digite o seguinte comando no terminal:

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M
      

      e aguarde a conclusão. Isso copiará a partição 1 do disco original para a partição 1 no novo disco, byte por byte.
      Repita o comando para cada partição restante:

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...
      

      Notas:

      • Isso pode demorar um pouco para ser concluído, dependendo do tamanho das partições, velocidade do disco no host, etc.).
      • Se sua VM convidada tiver> 1 GB de RAM alocada, você poderá alterar o parâmetro 'bs' para "bs = 256M", o que pode acelerar um pouco a cópia.
    10. Nesse ponto, você deve ter um novo disco de tamanho fixo com todo o conteúdo original e um arquivo VDI menor que o original. Você pode montar o novo disco no ambiente do gparted live e verificar se os dados estão lá.
    11. Encerre a VM convidada (gparted live) e remova o ISO gparted da unidade da VM.
  6. Vá para Configurações da VBox da VM convidada, navegue até Armazenamento e remova o disco original da lista (clique com o botão direito do mouse e selecione "Remover anexo"). Isso deve deixar o disco recém-criado para a VM. Nota: Esta etapa é simplesmente remover o disco da configuração da VM convidada - seu disco original da VM convidada (ou seja, o VDI grande) ainda está disponível na máquina host.
  7. O último passo que tive que fazer para o meu convidado do Windows foi definir / corrigir o MBR e / ou o BCD. (Não sei se isso é necessário para um hóspede do Linux, pois ainda não o fiz.) Se eu simplesmente inicializei com o meu novo VDI, obtive uma tela de erro do Windows Boot Mgr com este conteúdo (infelizmente não faça uma captura de tela antes de eu corrigir o problema):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. Obtenha um ISO de uma instalação ou reparo do Windows (idealmente que corresponda à sua versão do sistema operacional) e configure a VM convidada para inicializá-la (novamente, configurações de armazenamento).

  9. Inicie a VM convidada e escolha inicializar a partir do CD / DVD.

    1. Como cada versão da instalação / reparo do Windows é diferente, não posso fornecer etapas precisas aqui para todos. Mas a idéia é escolher a opção "Reparar" e encontrar o caminho para um prompt de comando. No meu caso do Windows Server 2012, tive que: (a) escolher meu idioma / local; (b) Escolha "Reparar o seu computador" no canto inferior esquerdo; (c) Escolha "Solucionar problemas"; (d) Escolha "Prompt de comando".
    2. Quando estiver em um prompt de comando, execute os seguintes comandos (graças a http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html para obter as informações!):

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd
      

      Este último comando deve localizar a instalação do Windows e solicitar a adição ao BCD. Responda 'Y'.

    3. Saia do prompt de comando e, em seguida, desligue a VM convidada.
  10. Vá para Configurações da VBox da VM convidada, navegue para Armazenamento e remova o ISO de instalação / reparo do Windows da unidade de CD / DVD.
  11. Inicialize a VM e divirta-se!
  12. (Depois que tudo estiver confirmado funcionando como esperado, você pode excluir o disco da VM original.)

0

Eu forneço uma resposta estendida a qualquer sistema operacional hospedado em execução em qualquer sistema operacional host. Esta resposta assume que você deseja aumentar o tamanho (para estender).

Nota: Conforme indicado pelo djule5 (veja o comentário logo após a pergunta), modifyhdagora é conhecido como modifymedium(mas permanece compatível com versões anteriores). Aqui eu uso modifymedium.

1. Saia da sua VM em execução

Sim, esta resposta é para um arquivo VDI já usado por uma VM do VirtualBox.

2. Abra um terminal no seu host para redimensionar a imagem do disco

A linha de comando VBoxManage não deseja redimensionar uma imagem de disco usando o nome do arquivo VDI.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Cannot register the hard disk '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} because a hard disk '/home/user/vm/my_disk_image.vdi' with UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 179 of file VBoxManageDisk.cpp

Portanto, identifique o UUID da sua imagem de disco.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/user/vm/my_disk_image.vdi
Storage format: VDI
Capacity:       10240 MBytes
Encryption:     disabled

Estenda o tamanho da imagem do disco.

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3. Use uma ferramenta de particionamento para estender a partição lógica

Execute sua VM hospedada. Em seguida, use uma ferramenta de particionamento .

Algumas ferramentas para um GNU / Linux hospedado:

Se o sistema hospedado usa Windows:

4. Verifique o espaço livre da partição

O tamanho do seu arquivo VDI (no sistema host) pode não ter sido alterado porque sua VM ainda não usou a quantidade extra de espaço. Diverta-se.


-1

Isso funcionaria para mim e deve especificar a quantidade total da capacidade do disco rígido. Não é o espaço que precisamos aumentar ...

C: \ Arquivos de programas \ Oracle \ VirtualBox> VBoxManage.exe modifyhd "D: \ Máquina virtual \ VMs VirtualBox \ Windows 7 (FileZilla Server) \ Windows 7 (FileZilla Server) .vdi" - redimensionar 15360

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.