在使用xe命令添加vdisk时,首先需要理解xenserver下的SR,VDI,VBD这三个概念。如下图

xenserver下的SR,VDI,VBD_通道

存储库 (SR)

虚拟磁盘映像 (VDI)

物理块设备 (PBD)

虚拟块设备 (VBD)


下面就以图形来说明这些术语之间的关系。

1、SR

定义了一个名为存储库 (SR) 的容器来描述存储虚拟磁盘映像 (VDI) 的特定存储目标。SR 具有对本地连接的 IDE、SATA、SCSI 和 SAS驱动器和远程连接的 iSCSI、NFS、SAS 和光纤通道的内置支持,因而非常灵活。

利用xe命令看到如下信息,部分显示内容被省略

[root@xs-10 ~]# xe sr-list

[root@xs-10 ~]# xe sr-list name-label=xenserver  
uuid ( RO)        : 0554628e-448d-fbdf-4544-04cc4f390529  
    name-label ( RW): xenserver  
 name-description ( RW): iSCSI SR [172.20.10.107 (iqn.2007-10.uit.com:techtest.xenserver)]  
       host ( RO): xs-10.8  
       type ( RO): lvmoiscsi   
   content-type ( RO):

uuid ( RO)        : c2b41896-467e-b936-6836-754eb22d36de

    name-label ( RW): vmware vsphere

 name-description ( RW): CIFS ISO Library [\\172.20.1.249\software\ISO\vmware vsphere]

       host ( RO): xs-10.8

       type ( RO): iso

   content-type ( RO): iso

uuid ( RO)        : 4188b1ee-76bc-10ed-dc15-6c7a236ce9aa

    name-label ( RW): Ubuntu

 name-description ( RW): CIFS ISO Library [\\172.20.1.249\software\ISO\linux\Ubuntu]

       host ( RO): xs-10.8

       type ( RO): iso

   content-type ( RO): iso

xenserver下的SR,VDI,VBD_本地连接_02

结合图形,不难理解,所谓的SR就是一个存储仓库,里面存储了很多的ISO文件,你可以利用这些ISO文件来存储东西,如vmware vsphere、ubuntu这两个SR。又或者当做存储虚拟机文件的仓库,例如xenserver这个SR。下面接着看SR下一层的对象,叫做VDI

2、VDI

虚拟磁盘映像是显示给 VM 的存储抽象,VDI 是 XenServer 中的虚拟化存储的基本单元。

下面我们看一下Ubuntu这个SR存储库中有哪些VDI,即VDI是包含在SR中的。

[root@xs-10 ~]# xe vdi-list sr-uuid=4188b1ee-76bc-10ed-dc15-6c7a236ce9aa

uuid ( RO)        : 5b5bd9b4-b061-4e55-ab8f-a6e685358357

    name-label ( RW): ubuntu-11.04-desktop-i386.iso

 name-description ( RW):

      sr-uuid ( RO): 4188b1ee-76bc-10ed-dc15-6c7a236ce9aa

   virtual-size ( RO): 718583808

     sharable ( RO): false

     read-only ( RO): true

uuid ( RO)        : a81d7dcc-27bb-45cc-8c8b-c761cb1f1a04

    name-label ( RW): ubuntu-11.10-desktop-amd64.iso

 name-description ( RW):

      sr-uuid ( RO): 4188b1ee-76bc-10ed-dc15-6c7a236ce9aa

   virtual-size ( RO): 731164672

     sharable ( RO): false

     read-only ( RO): true

uuid ( RO)        : 98354aff-f259-4ba4-8617-fb53cc6c08b7

    name-label ( RW): ubuntu-10.04.3-server-i386.iso

 name-description ( RW):

      sr-uuid ( RO): 4188b1ee-76bc-10ed-dc15-6c7a236ce9aa

   virtual-size ( RO): 704217088

     sharable ( RO): false

     read-only ( RO): true

部分省略。。。

ubuntu这个SR所包含的VDI截图如下

xenserver下的SR,VDI,VBD_本地连接_03

而xenserver这个SR下面含有如下的VDI

xenserver下的SR,VDI,VBD_通道_04

可以看到VDI。由截图不难看出,所谓的VDI就是里面的ISO文件或虚拟机的硬盘文件。下面我们继续vbd


3、VBD

虚拟块设备是连接器对象(与上述的 PBD 类似),可用于在 VDI 和 VM 之间进行映射。VBD 还可用于微调给定 VDI 的 QoS(服务质量)、统计数据和可引导性等相关参数。

上文中讲述的VDI只是一些ISO文件或虚拟机的硬盘文件,这些文件如果单独放在一起是没有任何价值的。正如描述中的那样,VBD是用在VDI和VM之间的映射,如果没了这层映射,光有VDI也是不行的。

利用xe命令查看“UCA-VM-10.24”这个主机含有哪些VBD,首先查看UCA-VM-10.24的UUID号

[root@xs-10 ~]# xe vm-list name-label=UCA-VM-10.24

uuid ( RO)      : 89577946-f487-76a6-387e-86daaca15bef

  name-label ( RW): UCA-VM-10.24

 power-state ( RO): halted

再查看

[root@xs-10 ~]# xe vbd-list vm-uuid=89577946-f487-76a6-387e-86daaca15bef

uuid ( RO)       : a798413b-df47-9fb5-4b4d-56539a26eaf2

    vm-uuid ( RO): 89577946-f487-76a6-387e-86daaca15bef

 vm-name-label ( RO): UCA-VM-10.24

    vdi-uuid ( RO): 34fc2c1c-a3aa-43c7-95e4-b8bf6603e52f

     empty ( RO): false

     device ( RO): hda

uuid ( RO)       : 5a702417-e40e-ac62-c282-9b89bf8cb7b6

    vm-uuid ( RO): 89577946-f487-76a6-387e-86daaca15bef

 vm-name-label ( RO): UCA-VM-10.24

    vdi-uuid ( RO): <not in database>

     empty ( RO): true

     device ( RO): hdd

uuid ( RO)       : 07fe6b36-c836-d99e-e3ea-8b8eda2fe134

    vm-uuid ( RO): 89577946-f487-76a6-387e-86daaca15bef

 vm-name-label ( RO): UCA-VM-10.24

    vdi-uuid ( RO): 56c1b396-4776-4b43-ba8f-42870669055e

     empty ( RO): false

     device ( RO): hdc

uuid ( RO)       : 49d4e02d-f7e6-ec4a-235e-16bcddb64a99

    vm-uuid ( RO): 89577946-f487-76a6-387e-86daaca15bef

 vm-name-label ( RO): UCA-VM-10.24

    vdi-uuid ( RO): 6ee51222-6ae4-4614-b337-1b22bf340098

     empty ( RO): false

     device ( RO): hdb

xenserver下的SR,VDI,VBD_通道_05


可以看出上面的VBD其实将第2节中的VDI和UCA-VM-10.24这个虚拟机做了个映射。也就是说如果我将上图中的disk1这个VDI attach到另一个主机如SQL Server,则VDI不变,而你用xe vbd-list 这个命令查看UCA-VM-10.24这个主机时,会发现少了一个VBD,而SQL Server主机会多了一个VBD。

 知道了如上的原理,接下来添加virtual disk就好办了,步骤很简单:

1、在某个SR下面建新的vdi,命名为disk3,其实就是创建虚拟机的硬盘文件

xe vdi-create name-label=disk3 type=user sr-uuid=0554628e-448d-fbdf-4544-04cc4f390529 virtual-size=4GiB  
5b4dfa6a-17f0-4207-b7f2-9d205f4517a9--新的VDI的UUID


2、利用新得到的vdi号创建新的vbd,其实就是为上一步创建的硬盘文件和虚拟机之间做映射

[root@xs-10 ~]# xe vbd-create vdi-uuid=5b4dfa6a-17f0-4207-b7f2-9d205f4517a9 device=5 vm-uuid=89577946-f487-76a6-387e-86daaca15bef  
9bcad328-4006-fb95-eea8-87de94bf0ff8


3、将创建的vbd plug即可。

[root@xs-10 ~]# xe vbd-plug uuid=9bcad328-4006-fb95-eea8-87de94bf0ff8  
You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected.  
vm: 89577946-f487-76a6-387e-86daaca15bef (UCA-VM-10.24)