VirtualBox e suporte ao comando TRIM do SSD

24
Estou ciente do grande 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 de convidado. Eu tentei e "parece" como trabalhar. O que eu gostaria de saber é onde está o problema ou está realmente funcionando como deveria.

Fontes:
link
link

Meu comando exato anexando o arquivo de disco:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C:\path\to\file.vdi" --type hdd

Qual 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-o, reiniciando a máquina, desligando a máquina, verificando se ela está lá depois de inicializar, observando o uso do arquivo de disco no sistema operacional 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
  • O 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 minhas perguntas:
- o que exatamente a opção --discard faz? não é descrito no manual do VirtualBox   ( link )
está realmente passando o TRIM para o sistema operacional do host ou ele simplesmente parece?

    
por qlf00n 17.09.2013 / 16:28

2 respostas

16

As opções

--discard especificam que vdi image será reduzido em resposta ao comando trim do sistema operacional convidado. Os seguintes requisitos devem ser atendidos:

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

Obviamente, o sistema operacional convidado deve ser configurado para emitir o comando trim , normalmente isso significa que o sistema operacional convidado é feito para pensar que o disco é um SSD. O Ext4 suporta -o discard mount flag; O OSX provavelmente requer configurações adicionais, pois, por padrão, apenas os SSDs fornecidos pela Apple recebem este comando . O Windows deve detectar e suportar automaticamente 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. Driver Linux exFAT (cortesia da Samsung) suporta o comando descartar . 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 o flash para começar.

Como alternativa, existem métodos ad hoc para emitir trim , por ex. Comando Linux fstrim , parte de util-linux package.

Soluções anteriores exigiam que o usuário zerasse as áreas não utilizadas, por exemplo, usando zerofree e compactar o disco explicitamente (suponho que isso seja possível somente quando vm estiver offline).

    
por 13.03.2014 / 11:05
9

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 já 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, pois a primeira opção pode levar ao bloqueio do sistema ao excluir muitos arquivos de uma só vez.

O formato de disco usado deve ser o tamanho dinâmico da VDI conforme o qarma escreve.

Certifique-se de que nonrotational="true" discard="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 do cron executando o 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. Novamente, isso significa que o espaço livre será TRIM'ed no SSD do host.

    
por 25.06.2014 / 00:53