Se é uma caixa do Linux, você quer o KVM. A API libvirt é a melhor maneira de gerenciá-lo - veja o link .
Você cria um arquivo XML descrevendo um pool de espaço em disco (provavelmente um diretório local no seu caso). Em seguida, para cada servidor, crie uma imagem (volume) do tamanho do disco que deseja que o servidor veja.
Por fim, crie o arquivo XML do servidor (chamado domínio em libvirt) que especifica coisas como processador, RAM, imagem de CDROM, dispositivos, etc. Se você configurá-lo em seu domínio, o KVM pode criar um servidor VNC para você se conectar qualquer cliente VNC (que cobre seu bit de área de trabalho remota.)
Em seguida, você executa "virsh" para entrar no hypervisor e importar seus arquivos XML.
# pool-define your-pool-file.xml
# pool-start your-pool-name
# vol-create your-pool-name your-volume-file.xml
# define your-vm-file-.xml
Por fim, você pode iniciar seu servidor:
# start your-vm-name
Parece complexo, para começar, mas levei alguns dias para me familiarizar com isso, e o IMO é muito melhor do que a maioria das soluções comerciais porque você obtém um controle mais refinado sobre suas VMs. O Libvirt é a interface para muitas tecnologias de virtualização - Xen, KVM, etc.
É claro que, se você estiver executando o Windows em seu servidor físico, usará o hipervisor ou VMware da Microsoft, caso em que o que precede será inútil para você!