Suporte ao comando TRIM do VirtualBox e do SSD

27

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?

qlf00n
fonte
3
TRIM virtual usado em uma máquina virtual com interface para um disco virtual para feelgood virtual ...
Fiasco Labs
Ramhound: Então, qual é a opção "Solid State Drive" no submenu de armazenamento? Além disso, se houver uma opção como --discard mencionada no manual, ela deverá ser detalhada. Eu não entendo completamente o seu ponto de vista dizendo que "há uma razão pela qual isso não é descrito". Se sim, porque está no manual?
qlf00n
11
Para responder @Ramhound meu blog é um dos posts do OP listado. Não tenho certeza de qual foi o motivo dele , mas, para mim, eu tinha uma máquina virtual que precisava reduzir fisicamente o tamanho do disco alocado dinamicamente. Era um disco que continha dados que foram apagados e eu estava tentando reduzi-los a um tamanho menor - passando o comando TRIM para ativar isso ... encolhendo meu disco virtual de 12G para 7G. Para o OP, espero que meu post tenha ajudado você. Cheguei aqui vendo o tráfego de entrada no meu blog.
Jayson Rowe
Apenas um aviso para qualquer pessoa interessada no tópico. A implementação de recorte no emulador de imagem de disco do VirtualBox é extremamente bugs e provavelmente irá travar sua vm. Há um bug de 2 anos aberto para isso. É possível ativá-lo, mas não perca tempo tentando.
Dominik SMogor
Eu acho que esse é o bug que Dominik está se referindo: virtualbox.org/ticket/16450
bobpaul

Respostas:

19

--discardoptions especifica que a vdiimagem será reduzida em resposta ao trimcomando do sistema operacional convidado. Os seguintes requisitos devem ser atendidos:

  • formato de disco deve ser VDI
  • a área desmarcada deve ter pelo menos 1 MB (tamanho)
  • [provavelmente] área desmatada deve cobrir um ou mais blocos de 1MB (alinhamento)

Obviamente, o sistema operacional convidado deve ser configurado para emitir o trimcomando, normalmente isso significa que o sistema operacional convidado é feito para pensar que o disco é um SSD. Ext4 suporta -o discardsinalizador 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 exemplo fstrim, comando Linux , parte do util-linuxpacote.

As soluções anteriores exigiam que o usuário zerasse as áreas não utilizadas, por exemplo, usando zerofreee compactando o disco explicitamente (estou assumindo que isso só é possível quando o vm está offline).

Dima Tisnek
fonte
1
Além disso, usando algum tipo de coisa de desduplicação no btrfs (particularmente um que perfura buracos para regiões 0) e btrfs balancerealmente ajuda na criação de tantas regiões aparáveis ​​quanto possível.
Omnifarious
12

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.

Jacob Larsen
fonte
Na verdade, matei algumas das minhas VMs usando o comando trim.
davidbaumann
@davidbaumann Como isso aconteceu?
dvtan
Na verdade, depois de ativá-lo, ele começou a cortar cerca de 20 GB. Exatamente neste momento, o Laptop caiu (tinha alguns problemas com a minha GPU nos dias de hoje). forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann
Comando para fazer isso para o primeiro disco existente (assumindo SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM