Estou ciente do enorme número de posts na internet dizendo que isso não funcionaria e por que e eu realmente passei dias procurando as soluções meses atrás, mas eu encontrei ontem algumas dicas sobre como "ativar o suporte ao comando TRIM" para máquinas guest . Eu tentei e "parece" como trabalhar. O que eu gostaria de saber é onde está o problema ou está realmente funcionando como deveria.
Fontes:
https://forums.virtualbox.org/viewtopic.php?f=7&t=51768
http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html
Meu comando exato anexando o arquivo de disco:
VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --dispositivo 0 --nonrotacional em --discard em --medium "C: \ path \ to \ file.vdi" --detipo hdd
Que genereted esta entrada no arquivo * .vbox da máquina:
<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
<Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Para ter certeza de que não perderia nenhum dado, essa unidade era a segunda anexada à máquina. Fiz um teste simples como copiar algum arquivo para a unidade, deixando-a, reiniciando a máquina, desligando a máquina, verificando se ela está lá depois de inicializar, observando o uso do arquivo de disco no SO host. Resultados são:
- arquivo de disco anexado sem opções --nonrotational e --discard mantém seu tamanho (dinâmico) mesmo após a exclusão de arquivos no sistema operacional convidado
- arquivo de disco anexado com as duas opções mencionadas acima libera o espaço depois que os dados foram excluídos
Agora, aqui estão as minhas perguntas:
- o que exatamente a opção --discard faz? ele não é descrito no manual do VirtualBox ( http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach )
- ele está realmente passando o TRIM para o sistema operacional host ou ele simplesmente parece?
fonte
Respostas:
--discard
options especifica que avdi
imagem será reduzida em resposta aotrim
comando do sistema operacional convidado. Os seguintes requisitos devem ser atendidos:Obviamente, o sistema operacional convidado deve ser configurado para emitir o
trim
comando, normalmente isso significa que o sistema operacional convidado é feito para pensar que o disco é um SSD. Ext4 suporta-o discard
sinalizador de montagem; O OSX provavelmente requer configurações adicionais, pois, por padrão, somente os SSDs fornecidos pela Apple recebem esse comando . O Windows deve detectar e suportar automaticamente os SSDs pelo menos nas versões 7 e 8, não estou claro se a detecção ocorre na instalação ou no tempo de execução. O driver Linux exFAT (cortesia da Samsung) suporta o comando descarte . Não está claro se a implementação do exFAT pela Microsoft suporta o mesmo, mesmo que o sistema de arquivos tenha sido projetado para flash.Alternativamente, existem métodos ad hoc para emitir
trim
, por exemplofstrim
, comando Linux , parte doutil-linux
pacote.As soluções anteriores exigiam que o usuário zerasse as áreas não utilizadas, por exemplo, usando
zerofree
e compactando o disco explicitamente (estou assumindo que isso só é possível quando o vm está offline).fonte
btrfs balance
realmente ajuda na criação de tantas regiões aparáveis quanto possível.Como esse é o melhor resultado no Google, deixe-me esclarecer algumas outras respostas, mesmo que seja uma postagem antiga. De fato, é possível fazer com que o TRIM funcione no sentido de que os blocos virtuais não utilizados no sistema de arquivos guest podem ter os blocos físicos correspondentes do flash marcados como não utilizados para uma melhor utilização do flash. As peças ainda estão presentes nas outras respostas e comentários.
Primeiro, o host deve ser configurado para que o espaço livre seja TRIM'ed. Você pode montar o sistema de arquivos com -o descartar, ou pode executar o fstrim no sistema de arquivos regularmente através do cron. Eu prefiro o último, como a primeira opção pode levar ao bloqueio do sistema ao excluir muitos arquivos ao mesmo tempo.
O formato do disco usado deve ser o tamanho dinâmico da VDI, conforme o qarma escreve.
Certifique-se de que nonrotational = "true" descard = = "true" esteja definido no arquivo .vbox conforme descrito em OP.
Em seguida, ative o TRIM no sistema operacional convidado como normal. No Linux, eu recomendo novamente uma tarefa cron executando fstrim. Isso é provavelmente ainda mais importante aqui, já que o custo de fazer TRIM na imagem do disco virtual é muito maior do que em um SSD físico, já que os dados são movidos para tornar a imagem menor.
Agora, como a imagem do disco é compactada regularmente, ela ocupa apenas o espaço real usado, além de uma sobrecarga de tamanho de bloco de 1 MB, conforme escreve o qarma. Isso significa novamente que o espaço livre será TRIM'ed no host SSD.
fonte
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on