Estação de trabalho VMware: como reduzir o tamanho máximo de .vmdk

27

Eu tenho um arquivo de disco de 150 GB (.vmdk, não pré-alocado) em que minha máquina virtual está armazenada.

Atualmente, o arquivo tem 20 GB, mas está crescendo todos os dias, mesmo que eu não esteja armazenando nada de novo no sistema de arquivos convidado.

Estou procurando por horas uma maneira de reduzir o tamanho máximo desse disco , para que ele nunca atinja 150 GB (eu gostaria de definir o limite para 30 GB e ver o que acontece quando a VM atinge esse tamanho) .

O que eu tentei:

  • Convertendo a imagem do disco com o VMware Converter → isso não funciona, a ferramenta permite apenas criar uma cópia completa ou um 'clone vinculado'.
  • Criando uma nova máquina virtual em branco do tamanho desejado para copiar os dados de 20 GB no novo .vmdk → Não consigo encontrar uma maneira de executar a cópia ou até conectar o novo disco à minha VM existente (para executar a cópia usando o SO convidado).
  • Procurando no arquivo .vmx para verificar se o tamanho máximo não foi definido em texto sem formatação (não é).

Embora essa tarefa pareça tecnicamente bastante simples (não há encolhimento complicado envolvido, apenas uma simples mudança de limite de tamanho), estou realmente sem ideias aqui ...

Existe alguma solução?

Sébastien
fonte
1
Como as partições no disco virtual são provavelmente criadas para preencher o espaço anunciado, está realmente envolvido "encolhimento complicado".
Daniel B

Respostas:

25

O procedimento usual para reduzir o tamanho de um disco .vmdk é:

  1. Desfragmente o disco por meio do convidado, escolhendo um modo de desfragmentação que consolide o espaço vazio no final do disco. Para um convidado do Windows, você deve esvaziar a Lixeira e desativar a hibernação e a paginação, retornando-as após a desfragmentação.

  2. Zere todo o espaço não utilizado no disco.
    Para o uso do Windows SDelete : sdelete -c.
    Para Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Encolha o disco (o que pode levar bastante tempo para ser concluído).
    Estação de trabalho VMware: Menu VM / Gerenciar / Limpar discos.
    Ou use: vmware-vdiskmanager.exe -k [VMDK PATH].
    para ESX: vmkfstools --punchzero [VMDK PATH].

A conversão do disco de cultivável para pré-alocado pode interromper seu crescimento. Isso pode ser feito usando vmware-vdiskmanager com o -tparâmetro cujos valores são:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

O comando a seguir converterá o .vmdk de expansível em pré-alocado:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Se você deseja alterar o tamanho do disco, isso deve ser feito enquanto o disco ainda estiver em formato expansível (exemplos aqui ).

Para mais informações, consulte o Guia do Usuário do Virtual Disk Manager .

harrymc
fonte
2
Isso não reduz o tamanho da unidade anunciada internamente.
Daniel B
@ DanielB: Não, não reduz o tamanho máximo, apenas o tamanho físico. Reduzir o tamanho máximo pode ser perigoso, pois alguns SOs não podem inicializar sem algum espaço livre no disco do sistema.
harrymc
3
Essa é uma técnica útil que usei para reduzir o espaço ocupado pelo VMDK. No entanto, isso não resolve completamente o meu problema, como se eu quisesse manter o VMDK sempre baixo, digamos 30GB, terei que repetir periodicamente a operação (o que leva muito tempo).
Sébastien
Se o disco sempre puder ser reduzido ao tamanho desejado, o que significa que o procedimento acima sempre funciona para reduzir o tamanho, você poderá limitar o tamanho no futuro convertendo o disco em tamanho fixo.
harrymc
1
@harrymc A conversão do disco para um tamanho fixo atenderia às minhas necessidades. Só não encontrei uma maneira de fazer isso com o VMWare Workstation ou o Converter.
Sébastien
6

Atualmente, o arquivo tem 20 GB, mas está crescendo todos os dias, mesmo que eu não esteja armazenando nada de novo no sistema de arquivos convidado.

Como o sistema operacional e seus programas aplicativos usam temporariamente muito espaço em disco para arquivos temporários, arquivos de paginação, arquivos de hibernação e arquivos de configuração. Uma vez excluídos, dependendo da política do sistema operacional, novos setores no disco serão usados ​​na próxima vez. A VM aloca armazenamento para o disco virtual a partir do disco real sempre que um novo setor é usado no disco virtual. Como o setor no disco virtual nem sempre é reutilizado pelo sistema operacional convidado, a VM pensa que é um uso do disco e fornece espaço a partir do disco real, o que levará ao aumento da imagem do disco virtual.

É menos provável que o título da sua pergunta seja resolvido, pois o uso dessa ferramenta sem inspeção da imagem pode levar ao desastre total. Mas você pode impedir o crescimento da imagem além de 30 GB. Há muitas maneiras de atingir a meta.

R. Use apenas 30 GB particionados e deixe o restante como espaço livre. Se você já particionou mais espaço, precisará reduzi-la / excluí-la, crie uma nova partição, despeje-a com zeros e perfure-a conforme descrito por @harrymc. Como o espaço na área não particionada nunca é usado, o disco virtual nunca crescerá além de 30 GB.

B. Crie um instantâneo e restaure após o uso. Após criar a captura instantânea, os dados de armazenamento da VM em um novo arquivo de imagem. Se você restaurar para ele, sem salvar ou fazer novos instantâneos, todos os dados alterados serão excluídos e, portanto, o espaço será liberado.

C. Crie um novo disco virtual de no máximo 30 GB, adicione-o como um novo disco à sua máquina virtual atual, mova todos os dados para o novo disco virtual usando uma ferramenta de backup. Você pode usar um Linux ativo para a clonagem.

A opção recomendada é A

totti
fonte
2

Por que não simplesmente definir o tamanho do disco envolvido para 30 GB a partir de 150 GB.

Você precisará definir a soma de todas as partições para menos de 30 GB. Você terá que diminuir o tamanho das partições para baixo à medida que avança. Há muita documentação neste site sobre como reduzir partições para baixo, para não repetir isso aqui novamente.

Por que você criou uma partição fina de 150 GB se não tinha espaço para suportá-la no tamanho máximo? Parece que isso está apenas pedindo problemas.

mdpc
fonte
5
Eu não criei pessoalmente a VM, é por isso.
Sébastien
Como reduzo o próprio disco? Eu tenho as partições do disco reduzidas, mas, vdiskmanager.exe -k [VMDK PATH]como sugerido em outra resposta, não reduz a unidade.
Aaron Franke
O problema que não está documentado claramente é como redimensionar um dispositivo vmdk (depois de redimensionar a partição, é claro). Também @mdpc acho que sua resposta não é construtiva. Há muitas ocasiões em que você precisa redimensionar os dados em uma vm existente ; portanto, não faz sentido apontar o dedo para que a VM seja criada corretamente.
basos
2

Existe uma maneira indireta de usar o VMWare Converter para criar uma nova VM e um tamanho menor do VMDK e, em seguida, converter o VMDK original no recém-criado e menor VMDK.

Encolher VMDK

Etapas detalhadas aqui .

Observe que quaisquer alterações no tamanho do VMDK também precisarão de uma atualização correspondente na tabela de partições .

hanxue
fonte
Esta é uma VM da estação de trabalho VMWare e essas opções avançadas de cópia não são oferecidas pelo Converter para este tipo de VM. Apenas não me permite alterar o tamanho do disco.
Sébastien
2

Este trabalho apenas para VMDK esparsos (NÃO pré-alocado) . É necessária uma desfragmentação antes de diminuir para garantir que o espaço usado seja contíguo

Desfragmentando no Windows

Em uma máquina virtual Windows, você deve primeiro executar uma desfragmentação de disco no Windows. A desfragmentação no Windows garante que todos os espaços usados ​​sejam contíguos. Você pode reduzir o tamanho do disco virtual.

Encolhendo o disco virtual

Para reduzir o disco virtual:

Abra o Painel de controle / caixa de ferramentas do VMware Tools:

No Windows:

Clique duas vezes no ícone VMware Tools na bandeja do sistema ou clique em Iniciar> Painel de Controle> VMware Tools.

No Linux:

Abra o terminal e execute este comando:

vmware-toolbox

Nota: Na estação de trabalho 9.x (Windows) e superior, a redução é feita automaticamente durante a limpeza do disco. Portanto, essa opção é removida do painel de ferramentas do VMware. Vá para VM> Gerenciar> Limpar discos. Isso não está disponível na versão Linux do VMware Workstation 9.xe posterior.

Clique na guia Encolher. Selecione a unidade que você deseja reduzir. Clique em Preparar para encolher e siga as instruções na tela. Cuidado: Não desligue sua máquina virtual ou a máquina host enquanto o disco estiver encolhendo. Além disso, não tente cancelar o processo. Interromper esse processo pode causar danos irreparáveis ​​ao seu disco virtual e talvez você não consiga iniciar sua máquina virtual novamente.

Da base de conhecimento do VMWare

Jalal Mostafa
fonte
Ler as respostas existentes primeiro evita respostas duplicadas.
Harrymc
1
Desculpe, de qualquer maneira eu repostei com o procedimento completo e a fonte. Isso pode ajudá-lo mais
Jalal Mostafa
Também não responde à operação. O OP quer reduzir o limite máximo, não o tamanho atual.
Ryuu 18/03
2

A resposta de @harrym é muito boa, mas na verdade não responde à pergunta. O OP quer reduzir o tamanho máximo . O problema é que o hypervisor não sabe quanto do tamanho apresentado (também conhecido como tamanho máximo) é realmente usado pelo sistema operacional. A compactação (vmware-vdiskmakager -k) se aplica a um vmdk expansível. Não faz nada no pré-alocado.

Portanto, as etapas para reduzir o disco são:

  1. Redimensione a partição no disco via sistema operacional ou através de um CD ao vivo adequado
  2. Redimensione o dispositivo vmdk, escolhendo cuidadosamente o limite para não reduzir nenhum espaço utilizável da partição. Você sempre pode deixar mais espaço na imagem do que realmente é necessário.

A primeira etapa envolve um procedimento de dentro da VM e varia de acordo com o SO convidado. A segunda etapa pode ser suportada pelos comandos vmware, mas não encontrei uma maneira profunda de fazer isso. Assim, a abordagem hacky.

Aqui está uma solução não tão rápida (devido à grande movimentação de dados envolvidos) e suja que fez o truque. Precisamos ter espaço disponível igual ao tamanho máximo do dispositivo .

AVISO: Lembre-se de fazer backup de dados importantes antes de qualquer operação!

  1. Encontre uma maneira de redimensionar a partição de convidado e deixe espaço não alocado no final do dispositivo. Dois exemplos:

    No SO convidado: windows 7

    1. Você pode usar o recurso de redimensionamento online. É uma boa ideia primeiro desfragmentar o disco a partir do sistema operacional da missão.
    2. Execute diskmgmt.msc, selecione a partição (volume) no disco que deseja redimensionar, clique com o botão direito do mouse-> Reduzir volume. Na caixa de diálogo exibida, reduza o tamanho conforme seus requisitos. Observe que, como a partição está em uso (se for o disco do sistema ou muito fragmentada), talvez você não consiga recuperar a maior parte do seu espaço livre. Provisão para deixar espaço livre extra.
    3. Agora queremos saber as partições que terminam o setor de disco (ou byte). Supondo que esta seja a única partição do dispositivo, assumimos o tamanho do volume exibido no meu computador-> selecione disco-> clique com o botão direito do mouse-> propriedades-> Capacidade: observe o número em bytes. (por exemplo, no meu exemplo 107371032576 para 99,9GB). Adicione algumas centenas de megas por segurança (+204800) (por exemplo, 107371237376). Para garantir que não precisamos adicionar nada em falta, podemos usar o utilitário diskpart cmd line para encontrar o deslocamento da partição desde o início do dispositivo. execute diskpart then: liste o disco, selecione o ID do disco , a parte da lista, selecione o ID da peça , detalhes. Exemplo:

    DISKPART> peça de detalhe

    Partição 1

    Deslocamento em bytes: 1048576

    Certifique-se de adicionar pelo menos esse número ao tamanho do disco. Agora precisamos converter os bytes em setores divididos por 512 e arredondados para cima (teto). Por exemplo, 209709448. Anote este número para a etapa 3.

    Através de um CD ao vivo: SystemResqueCD

    1. Como alternativa, você pode usar um resque cd (( SystemResqueCD é a minha proposta), baixar o ISO inicializável, montá-lo como um dispositivo de CD-ROM virtual na sua VM, inicializar a partir do CD (pressionando a tecla Esc na tela de inicialização do VMWare, talvez seja necessário tentar algumas vezes, como aparece muito em breve). Ao acessar o prompt de comando, digite: startx, esperamos que isso o leve à interface gráfica.
    2. Uma vez na área de trabalho do systemresque, inicie o gparted (por exemplo, a partir de um terminal). Encontre a partição a ser redimensionada (isso deve ser desmontado corretamente, se houver dúvida, faça um escândalo no sistema operacional convidado). Faça o redimensionamento, planejando cuidadosamente suas necessidades de espaço.
    3. Novamente, precisamos encontrar o deslocamento final em setores (ou bytes) da partição. Abra o terminal e escreva o [ dispositivo ] separado e , em seguida, as unidades, imprima. Por exemplo

Número Início Fim Tamanho Tipo Sinalizadores do sistema de arquivos

1 2048s 113455103s 113453056s inicialização ntfs primária

Observe o setor final e adicione 1. Por exemplo, 113455104. Anote este número para a etapa 3.

  1. Como o hack funciona em um único arquivo pré-alocado (tipo 2) vmdks (ainda não experimentou vários tipos de arquivo), primeiro convertemos o arquivo expansível em pré-alocado. Vamos precisar temporariamente de uma partição com espaço físico como o tamanho máximo do dispositivo. (por exemplo, 150 GB).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. Agora a parte complicada, para o disco pré-alocado, deve haver 2 vmdks

    disk.vmdk disk-flat.vmdk

    o primeiro tem apenas KB de comprimento e o último contém os dados. Abra o primeiro (disk.vmdk) enquanto a estação de trabalho VMWare estiver desativada , com um editor de texto (o Notepad ++ é minha sugestão). Encontre a linha

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    Sim, você entendeu, o segundo campo é o número de setores alocados para o dispositivo. Como uma validação, multiplique por 512 e encontre o tamanho em bytes, depois divida por 1073741824 (1024 ** 3) para encontrar o tamanho em GB. Esse deve ser o tamanho do dispositivo anterior.

    Agora substitua esse número pelo número anotado da etapa um e salve o arquivo. AVISO : Um erro aqui e você pode acabar aparando os dados reais usados ​​no sistema de arquivos. (Mas redimensionamos o fs no início do dispositivo e fizemos os cálculos corretos e seguros, certo?)

  3. Até agora, nenhum dado foi tocado ainda. Execute esta etapa final para cortar as extensões. Usaremos a funcionalidade de renomeação do vmware-vdiskmanager para recriar o vmdk com seu tamanho agora aparado.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

basos
fonte
0

Para um sistema operacional convidado vmware linux, execute:

sudo vmware-toolbox-cmd disk shrinkonly

Tom Hale
fonte