4.2. 在客户端中添加存储设备

这部分论述了如何在虚拟客户端中添加存储设备。只能在创建客户端之后才可添加附加存储。支持的存储设备和协议包括:

  • 本地硬盘分区,

  • 逻辑卷,

  • 光纤通道或者直接连接到主机的 iSCSI。

  • 位于主机文件系统中的文件容器。

  • 由虚拟机直接挂载的 NFS 文件系统。

  • 客户端可直接访问的 iSCSI 存储。

  • 群集文件系统(GFS)。

在客户端中添加基于文件的存储

基于文件的存储或者基于文件的容器是指主机文件系统中作为虚拟客户端虚拟硬盘使用的文件。要添加基于文件的容器,请执行以下步骤:

  1. 创建空白容器文件或者使用现有文件容器(比如 ISO 文件)。

    1. 请使用 dd 命令创建稀疏文件。因为有数据完整性和性能问题,所以不建议使用稀疏文件。创建稀疏文件的速度较快,并可用来进行测试,但不应在产品环境中使用。

      1. # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
    2. 建议在基于文件的存储容器中使用非稀疏、预分配的文件。要生成非稀疏文件,请执行:

      1. # dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
  1. 这两个命令都会生成一个在虚拟客户端中作为附加存储使用的 400MB 大小的文件。
  1. 转储客户端配置。在这个示例中,客户端为 Guest1,该文件保存在用户主目录中。

    1. # virsh dumpxml Guest1 > ~/Guest1.xml
    2.  
  2. Open the configuration file (Guest1.xml in this example) in a text editor. Find the entries starting with “disk=“. This entry resembles:

    1. >disk type='file' device='disk'<
    2. >driver name='tap' type='aio'/<
    3. >source file='/var/lib/libvirt/images/Guest1.img'/<
    4. >target dev='xvda'/<
    5. >/disk<
  3. 修改 disk= 最后的条目来添加附加存储。确定为虚拟块设备指定了设备名称,且该名称还未在配置文件中使用。以下是添加名为 FileName.img 的文件作为基于文件的存储容器的条目示例:

    1. >disk type='file' device='disk'<
    2. >driver name='tap' type='aio'/<
    3. >source file='/var/lib/libvirt/images/Guest1.img'/<
    4. >target dev='xvda'/<
    5. >/disk<
    6. >disk type='file' device='disk'<
    7. >driver name='tap' type='aio'/<
    8. >source file='/var/lib/libvirt/images/FileName.img'/<
    9. >target dev='hda'/<
    10. >/disk<
  4. 使用更新的配置文件重新启动客户端。

    1. # virsh create Guest1.xml
  5. 以下步骤特别用于 Linux 客户端。其它操作系统使用不同方法处理新存储设备。对于非 Linux 系统,请参考您客户端操作系统文档。

    该客户端现在使用文件 FileName.img 作为设备 /dev/hdb。这个设备需要在该客户端中进行格式化。在该客户端中,将整个设备分为一个主分区,然后格式化该设备。

    1. n 添加新分区。

      1. # fdisk /dev/hdb
      2. Command (m for help):
    2. p 添加主分区。

      1. Command action
      2. e extended
      3. p primary partition (1-4)
    3. 选择可用分区号。在这个示例中,输入 1 选择第一个分区。

      1. Partition number (1-4): 1
    4. Enter 输入默认首柱面。

      1. First cylinder (1-400, default 1):
    5. 选择分区大小。在这个示例中,按 Enter 则分配整个磁盘。

      1. Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
    6. t 选择分区类型。

      1. Command (m for help): t
    7. 选择在上一步创建的分区。在这个示例中为分区 1

      1. Partition number (1-4): 1
    8. 输入 83 选择 Linux 分区。

      1. Hex code (type L to list codes): 83
    9. 在磁盘中写入更改并退出。

      1. Command (m for help): w
      2. Command (m for help): q
    10. ext3 文件系统格式化新分区。

      1. # mke2fs -j /dev/hdb
  6. 在客户端中挂载该磁盘。

    1. # mount /dev/hdb1 /myfiles

该客户端现在拥有一个基于文件的虚拟存储设备。

在客户端中添加硬盘及其它块设备

System administrators use additional hard drives for to provide more storage space or to separate system data from user data. This procedure, 过程 4.1, “在虚拟客户端中添加物理块设备”, describes how to add a hard drive on the host to a virtualized guest.

这个步骤适用于所有物理块设备,其中包括 CD-ROM、DVD 及软盘设备。

过程 4.1. 在虚拟客户端中添加物理块设备
  1. 在该主机中添加物理硬盘。如果无法默认访问该驱动器,请配置该主机。

  2. 请使用 multipath 配置该设备,如果需要则在该主机中永久保留。

  3. 请使用 virsh attach 命令。使用您的客户端名称替换 myguest,使用要添加的设备替换 /dev/hdb1,使用客户端中该设备的位置替换 hdchdc 必须是一个未使用的设备名称。在 Windows 客户端中也使用 `hd`* 标记,客户端可正确识别该设备。

    在该命令中为 CD-ROM 或者 DVD 设备附加 --type hdd 参数。

    在该命令中为软盘设备附加 --type floppy 参数。

    1. # virsh attach-disk myguest /dev/hdb1 hdc --driver tap --mode readonly
    2.  
  4. 该客户端现在有一个新硬盘设备,在 Linux 中名为 /dev/hdb,在 Windows 中名为 D: drive。这个设备可能需要格式化。