在XenServer中,我们可以发现,创建虚机的时候,VM的最大最小值都有规定值,内存无法设置太低,也没法设置的更高,比如选择Windows Server 2003 32bit模版来安装的时候,我们会发现,2003 R2 32bit的模版最多只能设置4GB内存,最少不能少于256M内存。超过范围,XenCenter工具会帮您自动调整为范围内的最接近值。

XenServer为了保证通常情况下的系统运行,为每个类型的系统设置了合适的内存范围,如下表:

Operating SystemMinimum RAMMaximum RAMDisk space
Windows 7 32-bit1GB4GBMinimum 16GB, 40GB or more recommended
Windows 7 64-bit2GB32GBMinimum 20GB
Windows Server 2008 R2512MB32GBMinimum 32GB
Windows Server 2008 32-bit/64-bit512MB32GBMinimum 10GB, 40GB or more recommended
Windows Vista 32-bit1GB4GB16GB
Windows Server 2003256MB32GB2GB
Windows XP SP2/3256MB32GB1.5GB
Windows 2000 SP4256MB32GB2GB
CentOS 4.5, 4.6, 4.7256MB16GB800MB
CentOS 5.0, 5.1, 5.2, 5.3, 5.4512MB16GB800MB
Red Hat Enterprise Linux 4.5, 4.6, 4.7, 4.8256MB16GB800MB
Red Hat Enterprise Linux 5.0, 5.1, 5.2, 5.3, 5.4512MB16GB800MB
SUSE Linux Enterprise Server 9 SP2/3/4256MB32GB1GB
SUSE Linux Enterprise Server 10 SP1/2, 11512MB32GB1.5GB
Oracle Enterprise Linux 5.0, 5.1, 5.2, 5.3, 5.4512MB16GB800MB
Debian Lenny128MB32GB4GB

而如果你为了某个特殊的需要而想突破该限制怎么办呢?有没有办法?答案是有。

我们可以先来看看默认的最大最小内存限制是多少:

1
2
3
4
5
6
7
8
9
10
#template-list用来查看模版的设置,而vm-list是用来查看虚机的设置
#直接使用params=memory-static-min可以查看可以设置的最小内存
#直接使用params=memory-static-max可以查看可以设置的最大内存
#增加recommendations参数,可以参考XenServer中对模版或者VM的一些限制,如vCPU,网卡等数量限制
 
xe template-list name-label=<Name of Template> params=memory-static-max,recommendations
 
- Or -
 
xe vm-list name-label=<Name of VM> params=memory-static-max,recommendations

我们可以通过使用memory-static-min,recommendations同时获得最小值和最大限制参数。

最小值为:268435456B=256M,最大值为:4294967296B=4096M=4GB。这也就是我们为什么在XenCenter不能设置超出范围的原因,但是我们能够手动调整参数来达到目的:

1
2
3
4
5
6
7
8
#UUID可以通过template-param-get或者vm-param-get来获得
#设置最大最小值类似
 
xe template-param-set uuid=<UUID of Selected Template> memory-static-max=<New Memory Limit in Bytes/MiB/GiB>
 
- Or -
 
xe vm-param-set uuid=<UUID of Selected VM> memory-static-max=<New Memory Limit in Bytes/MiB/GiB>

如图,我们可以调整默认Windows Server 2003 32Bit模版的最小值为128M:

设置完成以后,可以到XenCenter中创建虚机,检验一下,设置最大值同理。

2011/7/18更新:

上面的方法可能只能调整下线,调整上线会由于牵涉到内存DMC的设置,所以需要使用下面的命令设置最大值:
xe vm-memory-limits-set uuid={uuid} static-min={value} dynamic-min={value} dynamic-max={value} static-max={value}

其中需要注意的是,该命令中,后三个参数需要满足以下条件static-min≤dynamic-min=dynamic-max=static-max