Como funciona uma imagem dinâmica de disco?

1

Eu estava curioso sobre o funcionamento interno da computação virtualizada.

A maioria dos hipervisores, incluindo o VirtualBox e o Hyper-V, apenas para citar alguns, tem a opção de criar uma imagem dinâmica para unidades de disco. Essas imagens começam com um tamanho de 0 byte para serem progressivamente aumentadas em tamanho para se ajustarem aos dados que estão sendo colocados no disco rígido até que sejam preenchidos.

Portanto, posso esperar que uma imagem do Windows XP recentemente instalada ocupe no máximo 600MB no disco da minha máquina host.

Eu não sabia exatamente como e onde pesquisar documentação técnica sobre esse recurso.

Em teoria, se você (o sistema hypervisor) puder rastrear arquivos que estão sendo gravados e excluídos de um disco (virtual), então você pode alocar fisicamente em sua unidade host apenas a parte necessária para armazenar os dados.

Mas, na prática: os hypervisors devem ser agnósticos em termos de sistema, fornecendo APIs de baixo nível (controlador de disco virtual) para permitir que o sistema operacional virtualizado physically resolva uma unidade virtual ; e os modernos sistemas de arquivos excluem apenas os arquivos excluindo seus metadados da tabela de partições, não limpando seu espaço físico.

O segundo caso é interessante porque se eu escrevesse um controlador ATA virtual eu poderia aplicar um algoritmo de compressão rápida, como assumir grandes blocos de zeros como espaço livre e desalocá-los do arquivo de imagem física quando o sistema operacional virtualizado libera espaço . Eu não tenho o conhecimento para escrever código de baixo nível, mas participei de algumas aulas avançadas sobre virtualização.

A questão é

como funciona um disco de expansão dinâmica, dada a agnosticidade do sistema de arquivos de um hipervisor e o fato de que o acesso ao disco de hardware é executado com base em setores físicos mapeados para virtuais?

Em particular, como o hypervisor se comporta quando o SO virtualizado exclui arquivos?

    
por usr-local-ΕΨΗΕΛΩΝ 08.01.2014 / 12:16

1 resposta

3

Os sistemas de arquivos são mapeamentos de arquivos para 512 bytes ou 4k em blocos de disco. Para discos dinâmicos, o hipervisor cria seu próprio mapeamento de blocos de disco "reais" para os dados do disco. O mapeamento virtualizado de dados de VM para blocos de disco para discos dinâmicos seria semelhante a FS na VM - > Mapeamento de hipervisor - > Arquivo em metal nu - > Bloquear no disco físico.

Sempre que uma gravação em um bloco não mapeado ocorre, o hipervisor anexa esse arquivo a algum arquivo ( O disco dinâmico ) e anota a operação de anexação ao mapeamento de blocos de disco "reais" para Blocos de disco virtualizados.

Quando ocorre uma exclusão, a VM atualiza os metadados que representam esse arquivo e, em seguida, conclui sua tarefa. Nenhuma exclusão real ocorre e o disco dinâmico tem o mesmo tamanho que era antes da operação de exclusão.

Como uma VM pode liberar dados: SSDs introduziram uma noção de suporte a TRIM que é uma maneira de notificar a unidade de disco quais blocos foram excluídos e não são mais necessários. Os hipervisores podem fornecer suporte TRIM virtualizado para liberar blocos da mesma maneira que um SSD liberaria seu mapeamento de blocos virtualizados para flash. É claro que seu sistema operacional precisaria suportar o TRIM, etc. etc. E ... Mesmo se os hypervisors suportarem isso, remover um pedaço de dados de um arquivo é uma tarefa não trivial.

Moof!

    
por 16.01.2014 / 00:41