13.3. 在客户机中添加存储设备
本节介绍在客户机中添加存储设备。可以根据需要添加额外的存储。
13.3.1. 在 客户机中添加基于文件的存储
基于文件的存储是保存在主机物理机器文件系统中的文件集合,充当客户机的虚拟化硬盘驱动器。要添加基于文件的存储,请执行以下步骤:
过程 13.1. 添加基于文件的存储
- 创建存储文件或使用现有文件(如 IMG 文件)。请注意,以下两个命令都创建一个 4GB 文件,该文件可用作客户机的额外存储:
- 建议为基于文件的存储镜像使用预分配文件。使用以下 dd 命令创建预分配文件:
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M count=4096
- 或者,创建稀疏文件,而不是预分配的文件。稀疏文件创建速度更快,并可用于测试,但由于数据完整性和性能问题,不建议在生产环境中使用。
# dd if=/dev/zero of=/var/lib/libvirt/images/FileName.img bs=1M seek=4096 count=0
- 通过在新文件中写入 < disk> 元素来创建额外的存储。在本例中,该文件将被称为
NewStorage.xml
。<disk
> 元素描述了磁盘源,以及虚拟块设备的设备名称。设备名称应该在客户机中所有设备间唯一,并确定客户机将在其上查找虚拟块设备的总线。以下示例定义了 virtio 块设备,其源是一个基于文件的存储容器,名为FileName.img
:<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <target dev='vdb'/> </disk>
设备名称也以"hd"或"sd"开头,分别标识 IDE 和 SCSI 磁盘。配置文件也可以包含 <address&
gt; 子元素,用于指定新设备的总线上的位置。如果是 virtio 块设备,则应该是 PCI 地址。省略 <address
> 子元素可让 libvirt 查找并分配下一个可用的 PCI 插槽。 - 按如下方式附加 CD-ROM:
<disk type='file' device='cdrom'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <readonly/> <target dev='hdc'/> </disk >
- 使用您的 guest(
Guest1)
添加NewStorage.xml
中定义的设备:# virsh attach-device --config Guest1 ~/NewStorage.xml
注意这个更改只有在客户机被销毁并重启后才会应用。另外,永久性设备只能添加到持久域中,这是使用 virsh define 命令保存的配置的域。如果客户机正在运行,并且您希望临时添加新设备,直到销毁客户端为止,省略--config
选项:# virsh attach-device Guest1 ~/NewStorage.xml
注意virsh 命令允许 attach-disk 命令使用更简单的语法来设置有限数量的参数,而无需创建 XML 文件。attach-disk 命令使用与前面提到的 attach-device 命令类似的方法,如下所示:# virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img vdb --cache none --driver qemu --subdriver raw
请注意,virsh attach-disk 命令也接受--config
选项。 - 启动 guest 机器(如果当前尚未运行):
# virsh start Guest1
注意以下步骤特定于 Linux 客户机。其他操作系统以不同的方式处理新存储设备。有关其他系统,请参考该操作系统的文档。 对磁盘驱动器进行分区
现在,客户机具有名为/dev/vdb
的硬盘设备。如果需要,对这个磁盘驱动器进行分区并格式化分区。如果没有看到添加的设备,这表示您的客户端操作系统中存在磁盘热插问题。- 为新设备启动 fdisk :
# fdisk /dev/vdb Command (m for help):
- 为新分区输入
n
。 - 此时会出现以下内容:
Command action e extended p primary partition (1-4)
为主分区输入p
。 - 选择可用分区号。在这个示例中,通过输入
1
来选择第一个分区。Partition number (1-4): 1
- 按
Enter
输入默认柱面。First cylinder (1-400, default 1):
- 选择分区的大小。在本例中,通过按 Enter 来分配整个磁盘。
Last cylinder or +size or +sizeM or +sizeK (2-400, default 400):
- 输入 t 来配置分区类型。
Command (m for help): t
- 选择您在前面的步骤中创建的分区。在这个示例中,分区号是 1,因为只有一个分区创建,fdisk 会自动选择分区 1。
Partition number (1-4): 1
- 为 Linux 分区输入 83。
Hex code (type L to list codes): 83
- 输入 w 写入更改并退出。
Command (m for help): w
- 将新分区格式化为
ext3
文件系统。# mke2fs -j /dev/vdb1
- 创建挂载目录,并在客户端上挂载磁盘。在本例中,目录位于 myfiles。
# mkdir /myfiles # mount /dev/vdb1 /myfiles
客户机现在有一个额外的基于文件的虚拟化存储设备。但请注意,除非在 guest 的/etc/fstab
文件中定义,否则此存储不会在系统重启后持久挂载:/dev/vdb1 /myfiles ext3 defaults 0 0