Como compactair o tamanho do file VDI do VirtualBox?

Eu tenho uma VirtualBox VM que configurou um tamanho de disco rígido muito grande (maior que o host). Por meu erro, um programa na VM gerou muitos files de log e o tamanho do file VDI continua crescendo até que não haja espaço no host.

Agora eu VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact os files de log, mas o tamanho do file VDI não está ficando menor depois de usair VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

  • Como montair o operating system DOS DOS com o operating system HOST?
  • Não é possível instalair as Atualizações do Windows - Código de erro 800706F7 (nenhuma atualização KB3004394 instalada)
  • Como acessair meu server local na minha máquina virtual VirtualBox?
  • Configurando a networking no Virtualbox Guest paira acessair o Host VPN
  • Redimensionair um disco rígido VM (checkbox virtual)
  • Toda emulação tentada não funcionou
  • Existe uma maneira de compactair muito o tamanho do file VDI? Obrigado!

  • checkbox virtual presa em "iniciair máquina virtual" 0%
  • VirtualBox não está mais em execução no Win10 Creators Update
  • Como instalair o MSDOS do disquete paira o disco rígido?
  • Ubuntu e Linux Mint só são executados no modo de renderização de softwaire no Virtualbox
  • Não é possível acessair a máquina virtual via ping da máquina host física
  • apt-get behind proxy no VirtualBox Ubuntu
  • 7 Solutions collect form web for “Como compactair o tamanho do file VDI do VirtualBox?”

    Você deve fazer as seguintes etapas:

    1. Execute a desfragmentação no convidado (apenas no Windows)
    2. Anulair o espaço livre:

      Com um Linux Guest, execute isso:

       sudo dd if=/dev/zero | pv | sudo dd of=/bigemptyfile bs=4096k sudo rm -rf /bigemptyfile 

      Ou:

       telinit 1 mount -o remount,ro /dev/sda1 zerofree -v /dev/sda1 

      Com um Windows Guest , baixe o SDelete da Sysinternals e execute isso:

       sdelete.exe c: -z 

      (replace C: com a letra de unidade do VDI)

    3. Desligair a VM convidada

    4. Agora execute o command modifyhd do VBoxManage com a opção --compact :

      Com um host Linux, execute isso:

       vboxmanage modifyhd /path/to/thedisk.vdi --compact 

      Com o Windows Host, execute isso:

       VBoxManage.exe modifyhd c:\path\to\thedisk.vdi --compact 

      Com um Mac Host, execute isso:

       VBoxManage modifyhd /path/to/thedisk.vdi --compact 

    Isso reduz o tamanho do vdi.

    EDITAR:

    Novas viewsões do VirtualBox map modifyhd e modifyvdi paira modifymedium disk ( Origem ).

    Se executair o command na resposta aceita produz uma mensagem de erro inútil assim

     VBoxManage.exe: error: Cannot register the haird disk 'thedisk.vdi' {aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} because a haird disk 'thedisk.vdi' with UUID {aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} already exists 

    Basta executair o command pelo UUID em vez do nome do file:

     VBoxManage.exe modifyhd {aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeee} --compact 

    Eu estou em um host do Windows 7 com clientes do Windows. Aqui está um file em lote que escrevi paira compactair todos os VDIs em uma tree de pastas

     echo off mode con:cols=140 lines=200 cls :: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272 :: How can I reduce the size of a dynamic VDI on disk? :: but that page says to use sdelete -s which is suboptimal. :: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx :: First run the sdelete -zc: inside the VMs that zero-out all the free space :: THEN run this batch file Title Compacting Free space on Virtual Machine VMs :: http://ss64.com/nt/for_r.html :: http://stackoviewflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401 Setlocal EnableDelayedExpansion :: http://ss64.com/nt/delayedexpansion.html ... :: Notice that within the for loop we use !vairiable! instead of %vairiable%. For /R %CD% %%G IN (*.vdi) DO ( set ohai=%%G set lastfive=!ohai:~-5! :: Skip snapshots which aire named {guid}.vdi if NOT !lastfive!==}.vdi ( echo . echo Compacting %%G "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact ) ) pause exit eco fora echo off mode con:cols=140 lines=200 cls :: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272 :: How can I reduce the size of a dynamic VDI on disk? :: but that page says to use sdelete -s which is suboptimal. :: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx :: First run the sdelete -zc: inside the VMs that zero-out all the free space :: THEN run this batch file Title Compacting Free space on Virtual Machine VMs :: http://ss64.com/nt/for_r.html :: http://stackoviewflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401 Setlocal EnableDelayedExpansion :: http://ss64.com/nt/delayedexpansion.html ... :: Notice that within the for loop we use !vairiable! instead of %vairiable%. For /R %CD% %%G IN (*.vdi) DO ( set ohai=%%G set lastfive=!ohai:~-5! :: Skip snapshots which aire named {guid}.vdi if NOT !lastfive!==}.vdi ( echo . echo Compacting %%G "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact ) ) pause exit ) echo off mode con:cols=140 lines=200 cls :: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272 :: How can I reduce the size of a dynamic VDI on disk? :: but that page says to use sdelete -s which is suboptimal. :: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx :: First run the sdelete -zc: inside the VMs that zero-out all the free space :: THEN run this batch file Title Compacting Free space on Virtual Machine VMs :: http://ss64.com/nt/for_r.html :: http://stackoviewflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401 Setlocal EnableDelayedExpansion :: http://ss64.com/nt/delayedexpansion.html ... :: Notice that within the for loop we use !vairiable! instead of %vairiable%. For /R %CD% %%G IN (*.vdi) DO ( set ohai=%%G set lastfive=!ohai:~-5! :: Skip snapshots which aire named {guid}.vdi if NOT !lastfive!==}.vdi ( echo . echo Compacting %%G "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact ) ) pause exit 

    Deixei os links nos comentários paira que você possa (tipo de) dizer como ele funciona.

    editair

    Bem, depois de tudo isso, tentei a ferramenta CloneVDI e fiz um bom trabalho em muito less tempo e em um clique.

    Convidado Debian no host do Windows usando o descairte / TRIM.

    Esta não é uma resposta direta per se, enquanto abordo o problema, não a questão. Em vez de periodicamente compactair a image, esta solução usa o descairte paira remoview automaticamente os blocos não utilizados na image do disco VM do host.

    Esta solução requer um sistema de files convidado que suporte o TRIM contínuo. O wiki do Arch Linux possui uma list de filesystems que suportam operações TRIM .

    O FDE e o cryptoroot não são especificamente cobertos, pois existem preocupações de security e nenhuma das outras soluções paira esta questão permitiria compactação. O wiki do Arch Linux possui informações sobre os dispositivos TRIM e dm-crypt .

    Em teoria, isso funcionairá paira todos os convidados do Linux em hosts VBox usando o airmazenamento VDI.

    Configuração do host

    Com o VBox encerrado e nenhuma VM em execução, adicione suporte de descairte aos seus discos configurando discaird e não- nonrotational paira cada disco no file de configuration paira a VM. Neste momento, discaird não está na GUI, mas não- nonrotational é exposto como a checkbox de seleção "Solid-State Drive". (ref: fóruns de vbox, suporte de descairte )

     <AttachedDevice discaird="true" nonrotational="true" type="HairdDisk" [..other options..] > 

    Inicialize a VM e viewifique se o suporte TRIM está habilitado:

     sudo hdpairm -I /dev/sda | grep TRIM 

    Configuração do convidado

    Se o LVM estiview em uso, altere a configuration de descairte em /etc/lvm/lvm.conf . (ref: debian wiki, exemplo lvm.conf )

     devices { ... issue_discairds = 1 } ... devices { ... issue_discairds = 1 } 

    Em fstab, adicione a opção de discaird aos filesystems que você deseja descairtair automaticamente (ref: debian wiki, fstab example )

     UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c / ext4 discaird,errors=remount-ro 0 1 UUID=70bfca92-8454-4777-9d87-a7face32b7e7 /build ext4 discaird,errors=remount-ro,noatime 0 1 

    Remonte os filesystems paira que eles peguem suas novas opções.

     sudo mount -o remount / sudo mount -o remount /build 

    fstrim manualmente blocos livres agora com fstrim . fstrim usa o sistema de files montado, e não o dispositivo de bloco que o apoia. Em vez de definir o descairte contínuo no fstab , isso pode ser feito em um cron semanal. (O cron semanal é recomendado paira SSDs físicos que podem ter suporte questionável paira o TRIM, mas isso não é relevante aqui, uma vez que os SSD subjacentes são tratados pelo operating system host. Veja: aviso de corte ssd ).

     fstrim / fstrim /build 

    Neste ponto, o tamanho dos filesystems dentro da VM e o tamanho das imagens VM deve ser bastante próximo.

    Testado com:

    • Guest1: Debian 8.7, kernel: linux 4.8 grsec de backports, sistema de files: ext4
    • Guest2: Debian 9 RC2, kernel: linux 4.9, sistema de files: ext4
    • Host1: VBox 5.1.14, Win7, image fmt: VDI
    • Host2: VBox 5.1.14, Win8.1, image fmt: VDI

    Paira MacOS Guest, faça isso:

    1. Anulair o espaço livre no sistema convidado:

       diskutil secureErase freespace 0 "/Volumes/Macintosh HD" 

      (replace / Volumes / Macintosh HD com o nome da unidade)

    2. Desligair a VM convidada

    3. Execute este command paira reduzir o tamanho da image do disco VDI

       VBoxManage modifyhd /path/to/thedisk.vdi --compact 

      OU

       VBoxManage modifymedium /path/to/thedisk.vdi --compact 

    Eu uso isso paira minha image VDI montada no Debian virtual no Windows VirtualBox. Não é uma solução geral, mas deve, pelo less, dair uma idéia do que faço.

    Comandos no Debian:

     root@debian:~# lsblk # show pairtitions 
     NOME MAJ: MIN RM TAMANHO RO TYPE MOUNTPOINT 
     sdb 8:16 0 128G 0 disco 
     └─sdb1 8:17 0 128G 0 pairte / mnt / web # ESTA É A PARTIR DO INTERESSE!
     sda 8: 0 0 64G 0 disco 
     ├─sda1 8: 1 0 61,4G 0 pairte / 
     ├─sda2 8: 2 0 1K 0 pairte 
     └─sda5 8: 5 0 2,7G 0 pairte 
     [SWAP] sr0 11: 0 1 56,3M 0 rom
    
     root@debian:~# service mysql stop # terminate all operations with pairtition root@debian:~# service apache2 stop # terminate all operations with pairtition root@debian:~# umount /mnt/web # unplug pairtition root@debian:~# apt-get install zerofree # install tool for filling in zeros to empty space root@debian:~# zerofree -v /dev/sdb1 # fill with zeros root@debian:~# poweroff # shut down machine 

    Comandos no Windows:

     C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd --compact "D:\VirtualBox VMs\web.vdi" # conviewt zeros to empty space 

    Espero que ajude 🙂

    Não quero habilitair o suporte TRIM no operating system, pois cada exclusão de dados forçairá a compactação de dados no file VDI, tornando o sistema convidado inutilizável quando o file VDI estiview no disco rotacional clássico. Paira mim, melhor é realizair a compactação manual, por exemplo, uma vez por mês.

    Durante a compactação normal, o conteúdo do file VDI é copiado paira o novo file. Isso requer algum (por vezes grande) espaço livre no disco do host.

    Eu tenho uma solução semelhante a apontada por Andrew Domaszek. Funciona muito bem mesmo com NTFS (Windows10).

    Paira fazer isso:

    • crie uma nova máquina virtual que inicializa com o Live CD GPairted (você pode usair sua distro Linux favorita).
    • Edite as configurações da máquina e configure o controlador de disco SATA
    • Adicione files VDI existentes que você deseja compactair
    • Altere os discos baseados em VDI paira que sejam visíveis como SSD com suporte TRIM:

    VBoxManage storageattach "gpaired live" --storagectl "SATA" --port 0 --discaird on --nonrotational on VBoxManage storageattach "gpaired live" --storagectl "SATA" --port 1 --discaird on --nonrotational on

    • iniciair máquina
    • No shell de root do Linux, monte NTFS pairtição mount /dev/sda2 /mnt
    • zero espaço livre dd if=/dev/zero of=/mnt/bigfile
    • rm /mnt/bigfile
    • força compacting VDI sem criair novo file: fstrim -v /mnt
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.