Deveria ser bom fazer uma desfragmentação da unidade on-line, já que as imagens de disco Xen são apenas arquivos como qualquer outro. Você deve tentar fazer isso fora das horas, pois o desempenho provavelmente sofrerá muito durante a desfragmentação.
A razão pela qual você está vendo alta fragmentação é que os VDIs são imagens de disco esparsas. Mesmo que você especifique que uma VM tem (por exemplo) 100 GB de espaço alocado, a imagem do disco alocará inicialmente apenas uma quantidade mínima de espaço. Em seguida, ele crescerá conforme necessário até o tamanho máximo alocado. O problema com essa abordagem é que, se você tiver muitas VMs no mesmo dispositivo de armazenamento e todas elas estiverem expandindo seus discos em momentos diferentes, não haverá como os arquivos de imagem de disco ficarem contíguos no disco e, assim, tornar-se muito fragmentado.
A solução para isso seria não usar imagens esparsas, mas infelizmente parece que a partir do XenServer 5.0 o único tipo de VDI que você pode fazer é esparso.
Você tem algumas opções que posso pensar de cara:
* Se possível, use dispositivos de bloco brutos com o formato LVM. Não estou familiarizado o suficiente com o Windows 2003 Storage Server para saber se isso é possível. Se permitir que você faça volumes e os exporte por meio de iSCSI ou FC, está tudo pronto. Caso contrário, talvez seja necessário mudar para outra configuração de armazenamento compartilhado ou qualquer outra coisa.
* Pré-aloque todo o espaço em disco no seu VHD. Essencialmente, isso significa apenas preencher todo o espaço disponível no volume antes de instalar seu sistema operacional. Você pode inicializar um LiveCD do Linux ou algo assim e usar dd
para gravar zeros em todo o disco. Isso fará com que o XenServer aumente o tamanho máximo do arquivo de imagem de disco, e esperamos que a maior parte seja contígua, já que tudo está sendo feito de uma só vez.
O problema de fragmentação que você está vendo não é incomum para usar armazenamento baseado em arquivos esparsos para VMs, e é exatamente a razão pela qual eu prefiro usar LUNs em uma SAN para armazenamento em VM.