基于KVM虚拟化的存储持久化方案

目录

第一章、管理虚拟机的存储

1.1 存储概念

1.2 创建和分配存储过程

1.3 使用存储池

1.3.1  存储池概念

1.3.2  创建存储池

1.3.2.1 使用 virsh 创建存储池

1.3.2.2 使用 Virtual Machine Manager 创建存储池

1.3.3 存储池特性

1.3.3.1 基于目录的存储池

1.3.3.2 基于磁盘的存储池

1.3.3.3 基于文件系统的存储池

1.3.3.4 基于 GlusterFS 的存储池

1.3.3.5 基于  iSCSI 的存储池

1.3.3.6 基于 LVM 的存储池

1.3.3.7 基于 NFS的存储池

1.3.3.8 使用 SCSI 设备的基于 vHBA 的存储池

1.3.4 删除存储池

1.3.4.1 删除存储池的先决条件

1.3.4.2 使用 virsh 删除存储池

 1.3.4.3 使用 Virtual Machine Manager 删除存储池

1.4 使用存储卷

1.4.1 存储卷概念

1.4.2 创建存储卷

1.4.2.1 使用 virsh 创建存储卷

1.4.2.2 使用 Virtual Machine Manager 创建存储卷

 1.4.3 查看存储卷

 1.4.4 管理数据

1.4.4.1 擦除存储卷

 1.4.4.2 将数据上传到存储卷

1.4.4.3 将数据下载到存储卷

 1.4.4.4 调整存储卷的大小

 1.4.5 删除存储卷

1.4.5.1 使用 virsh 删除存储卷

1.4.5.2 使用 Virtual Machine Manager 删除存储卷

 1.4.6 向虚拟机添加存储

1.4.6.1 使用 virsh 向 虚拟机添加存储设备 

1.4.6.2 使用 Virtual Machine Manager 向 Guest 添加存储设备

 1.4.6.3 向虚拟机添加默认存储

 1.4.6.4 向虚拟机添加基于 SCSI LUN 的存储

 1.4.7 管理虚拟机中的存储控制器

 1.4.8 从虚拟机中移除存储设

 1.4.8.1 使用 virsh 从虚拟机中删除存储

 1.4.8.2. 使用 Virtual Machine Manager 从虚拟机中删除存储


第一章、管理虚拟机的存储

本章提供有关虚拟机存储的信息。虚拟存储是从分配给虚拟机连接的物理存储中抽象出来的。存储使用半虚拟化或模拟的块设备驱动程序连接到虚拟机。

1.1 存储概念

存储池是为虚拟机预留的存储量。存储池被划分为存储卷。每个存储卷都作为虚拟机总线上的块设备分配给虚拟机。

存储池和卷使用 libvirt 进行管理。使用 libvirt 的远程协议,可以管理虚拟机生命周期的所有方面,以及虚拟机所需资源的配置。可以在远程主机上执行这些操作。因此,使用 libvirt 的管理应用程序(例如 Virtual Machine Manager)可以使用户执行为虚拟机配置主机物理机所需的所有任务。其中包括分配资源、运行虚拟机、关闭虚拟机以及取消分配资源,而无需 shell 访问或任何其他控制通道。

libvirt API 可用于查询存储池中的卷列表,或获取有关存储池中的容量、分配和可用存储的信息。可以查询存储池中的存储卷以获取分配和容量等信息,这些信息对于稀疏卷可能会有所不同。

对于支持它的存储池,libvirt API 可用于创建、克隆、调整大小和删除存储卷。这些 API 还可用于将数据上传到存储卷、从存储卷下载数据或从存储卷擦除数据。

启动存储池后,可以使用存储池名称和存储卷名称(而不是域 XML 中卷的主机路径)将存储卷分配给客户机。

可以停止(销毁)存储池。这消除了数据的抽象,但保持了数据的完整性。

例如mount -t nfs nfs.example.com:/path/to/share /path/to/data,使用 的 NFS 服务器。负责的存储管理员可以在虚拟化主机上定义 NFS 存储池,以描述导出的服务器路径和客户端目标路径。这将允许 libvirt 在 libvirt 启动时自动执行挂载,或者在 libvirt 运行时根据需要执行挂载。具有 NFS 服务器导出目录的文件将作为 NFS 存储池中的存储卷列出。

将存储卷添加到客户机时,管理员无需将目标路径添加到卷中。他只需要按名称添加存储池和存储卷。因此,如果目标客户端路径发生变化,也不会影响虚拟机。

当存储池启动时,libvirt 会将共享挂载到指定的目录上,就像系统管理员登录并执行mount nfs.example.com:/path/to/share /vmdata一样。如果将存储池配置为自动启动,则 libvirt 将确保 NFS 共享磁盘挂载到 libvirt 启动时指定的目录上。

一旦启动存储池,NFS 共享磁盘中的文件将报告为存储卷,并且可以使用 libvirt API 查询存储卷的路径。然后,可以将存储卷的路径复制到客户机虚拟机的 XML 定义部分,该部分描述了客户机虚拟机块设备的源存储。对于 NFS,使用 libvirt API 的应用程序可以在存储池(NFS 共享中的文件)中创建和删除存储卷,但不得超过池的大小(共享的存储容量)的限制。

并非所有存储池类型都支持创建和删除卷。停止存储池 (pool-destroy) 会撤销启动操作,在本例中,将卸载 NFS 共享。无论命令名称如何暗示,销毁操作都不会修改共享上的数据。有关详细信息,请参阅man virsh。

1.2 创建和分配存储过程

通过此过程,可以大致了解为虚拟机客户机创建和分配存储所需的步骤。

  1. 创建存储池
  2. 创建存储卷
  3. 将存储设备分配给虚拟机。

1.3 使用存储池

1.3.1  存储池概念

存储池是由 libvirt 管理的文件、目录或存储设备,用于为虚拟机提供存储。存储池被划分为存储卷,用于存储虚拟机映像或作为附加存储连接到虚拟机。多个客户机可以共享同一个存储池,从而更好地分配存储资源。

存储池可以是本地的,也可以是基于网络的(共享的):

本地存储池

本地存储池直接连接到主机服务器。它们包括本地目录、直接连接的磁盘、物理分区和本地设备上的逻辑卷管理 (LVM) 卷组。本地存储池对于不需要迁移或大量虚拟机的开发、测试和小型部署非常有用。本地存储池可能不适用于许多生产环境,因为它们不能用于实时迁移。

网络化(共享)存储池

网络存储池包括使用标准协议通过网络共享的存储设备。使用 virt-manager 在主机之间迁移虚拟机时,网络存储是必需的,但在使用virsh 迁移时,网络存储是可选的。

以下是 Red Hat Enterprise Linux 支持的存储池类型列表:

  • 基于目录的存储池
  • 基于磁盘的存储池
  • 基于分区的存储池
  • GlusterFS 存储池
  • 基于 iSCSI 的存储池
  • 基于 LVM 的存储池
  • 基于 NFS 的存储池
  • 具有 SCSI 设备的基于 vHBA 的存储池

以下是 Red Hat Enterprise Linux 不支持的libvirt存储池类型列表:

  • 基于多路径的存储池
  • 基于 RBD 的存储池
  • 基于Sheepdog的存储池
  • 基于Vstorage的存储池
  • 基于 ZFS 的存储池

1.3.2  创建存储池

本节提供有关使用 virsh 和 Virtual Machine Manager 创建存储池的一般说明。使用virsh选项可以指定所有参数,而使用 Virtual Machine Manager 则提供了一种图形方法,用于创建更简单的存储池。

1.3.2.1 使用 virsh 创建存储池

注意

本节以创建基于分区的存储池为例进行演示。

使用 virsh 创建存储池

1、阅读建议并确保满足所有先决条件

对于某些存储池,本指南建议您遵循某些做法。此外,某些类型的存储池还有一些先决条件。要查看建议和先决条件(如果有),请参见第 13.2.3 节 “存储池细节”。

2、定义存储池

存储池可以是永久性的,也可以是暂时性的。持久性存储池在主机系统重新启动后仍然存在。暂时性存储池仅在主机重新引导之前存在。

执行下列操作之一:

  • 使用 XML 文件定义存储池。

a.创建一个临时 XML 文件,其中包含新设备所需的存储池信息。

XML 文件必须包含特定字段,具体取决于存储池类型。有关更多信息,请参见第 13.2.3 节 “存储池细节”。

下面显示了一个示例:存储池定义 XML 文件。在此示例中,文件将保存到~/guest_images.xml

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool> 

b.使用virsh pool-define命令创建持久性存储池,或使用virsh pool-create命令创建并启动瞬态存储池。

virsh pool-define ~/guest_images.xml

virsh pool-create ~/guest_images.xml

c.删除在步骤 a 中创建的 XML 文件。

使用virsh pool-define-as命令创建持久性存储池,或使用virsh pool-create-as命令创建瞬态存储池。

以下示例创建一个持久性存储池,然后创建一个基于瞬态文件系统的存储池,/dev/sdc1存储池从/guest_images目录映射到存储池。

virsh pool-define-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"

virsh pool-create-as guest_images_fs fs - - /dev/sdc1 - "/guest_images"

注意

使用接口时,virsh命令中的选项名称是可选的。如果未使用选项名称,请对不需要指定的字段使用破折号。

3、验证是否已创建池

使用 virsh pool-list --all列出所有现有的存储池。

# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
guest_images_fs      inactive   no

4、定义存储池目标路径

使用virsh pool-build命令为预先格式化的文件系统存储池创建存储池目标路径,初始化存储源设备,并定义数据的格式。然后,使用virsh pool-list命令确保列出存储池。

# virsh pool-build guest_images_fs
Pool guest_images_fs built
# ls -la /guest_images
total 8
drwx------.  2 root root 4096 May 31 19:38 .
dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
guest_images_fs      inactive   no

注意

只有基于磁盘、基于文件系统和逻辑存储池才需要构建目标路径。如果 libvirt 检测到源存储设备的数据格式与所选的存储池类型不同,则构建将失败,除非指定了overwrite选项。

5、启动存储池

使用virsh pool-start命令准备要使用的源设备。

执行的操作取决于存储池类型。例如,对于基于文件系统的存储池,virsh pool-start命令将挂载文件系统。对于基于 LVM 的存储池,virsh pool-start命令使用vgchange命令激活卷组。

然后使用 virsh pool-list 命令确保存储池处于活动状态。

# virsh pool-start guest_images_fs
Pool guest_images_fs started
# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
guest_images_fs      active     no

注意

virsh pool-start命令仅对持久性存储池是必需的。瞬态存储池在创建时会自动启动。

6、打开自动启动(可选)

默认情况下,使用 virsh 定义的存储池在每次 libvirtd 启动时不会自动启动。您可以使用 virsh pool-autostart 命令配置存储池以自动启动。

# virsh pool-autostart guest_images_fs
Pool guest_images_fs marked as autostarted

# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
guest_images_fs      active     yes

现在,每次启动libvirtd时,存储池都会自动启动。

7、验证存储池

验证存储池是否已正确创建,报告的大小是否符合预期,并且状态报告为running 。验证文件系统上的目标路径中是否存在“lost+found”目录,表示设备已挂载。

# virsh pool-info guest_images_fs
Name:           guest_images_fs
UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       458.39 GB
Allocation:     197.91 MB
Available:      458.20 GB
# mount | grep /guest_images
/dev/sdc1 on /guest_images type ext4 (rw)
# ls -la /guest_images
total 24
drwxr-xr-x.  3 root root  4096 May 31 19:47 .
dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
drwx------.  2 root root 16384 May 31 14:18 lost+found
1.3.2.2 使用 Virtual Machine Manager 创建存储池

1、准备将在其上创建存储池的介质

对于不同类型的存储池,这将有所不同。有关详细信息,请参见第 13.2.3 节 “存储池详细信息”。

在此示例中,您可能需要使用 GUID 分区表重新标记磁盘。

2、打开存储设置

a.在Virtual Machine Manager 中,选择要配置的主机连接。打开“编辑”菜单,然后选择“连接详细信息”。

b.单击“连接详细信息”窗口中的“存储”选项卡。

c.创建新的存储池

注意

使用 Virtual Machine Manager,您只能创建持久性存储池。只能使用virsh 创建瞬态存储池。

添加新的存储池(第 1 部分)

单击窗口底部的按钮。此时将显示“添加新存储池”向导。

输入存储池的名称。此示例使用名称 guest_images_fs。

从“类型”下拉列表中选择要创建的存储池类型。此示例使用 .

fs: Pre-Formatted Block Device

单击“Forward”按钮继续。

添加新池(第 2 部分)

使用相关参数配置存储池。有关每种类型的存储池的参数的信息,请参见第 13.2.3 节 “存储池详细信息”。

对于某些类型的存储池,对话框中会显示“构建池”复选框。如果要从存储构建存储池,请选中 Build Pool 复选框。

验证详细信息,然后单击“完成”按钮以创建存储池。

1.3.3 存储池特性

本部分提供特定于每种类型的存储池的信息,包括先决条件、参数和其他信息。它包括以下主题:

  • 第1.3.3.1 节 “基于目录的存储池”
  • 第 1.3.3.2节 “基于磁盘的存储池”
  • 第 1.3.3.3节 “基于文件系统的存储池”
  • 第 1.3.3.4 节 “基于 GlusterFS 的存储池”
  • 第1.3.3.5节 “基于 iSCSI 的存储池”
  • 第 1.3.3.6节 “基于 LVM 的存储池”
  • 第 1.3.3.7节 “基于 NFS 的存储池”
  • 第 1.3.3.8节 “使用 SCSI 设备的基于 vHBA 的存储池”
1.3.3.1 基于目录的存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于目录的存储池所需的参数列表。

描述

XML格式

池定义作为

虚拟机管理器

存储池的类型

<pool type='dir'>

[type] 目录

dir: 文件系统目录

存储池的名称

<name>name</name>

[name]

name

Name

指定目标的路径。这将是用于存储池的路径。

  <target>
<path>target_path</path>
</target>

target

path_to_po

ol

目标路径

如果要用virsh创建存储池,请继续验证是否已创建存储池

例子

以下是基于/guest_images目录的存储池的 XML 文件示例:

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>  

以下是用于基于/guest_images目录创建存储池的命令示例:

# virsh pool-define-as dirpool dir --target "/guest_images" 
Pool FS_directory defined

下图显示了 Virtual Machine Manager 的“添加新存储池”对话框的示例,该对话框用于基于/guest_images目录创建存储池:

1.3.3.2 基于磁盘的存储池

建议

在创建基于磁盘的存储池之前,请注意以下事项:

  • 根据所使用的libvirt 版本,将磁盘专用于存储池可能会重新格式化并擦除当前存储在磁盘设备上的所有数据。强烈建议您在创建存储池之前备份存储设备上的数据。
  • 不应向虚拟机授予对整个磁盘或块设备的写入访问权限(例如,/dev/sdb)。使用分区(例如,/dev/sdb1) 或 LVM 卷。

如果将整个块设备传递给虚拟机,虚拟机可能会对其进行分区或在其上创建自己的 LVM 组。这可能会导致主机物理机检测到这些分区或 LVM 组并导致错误。

先决条件

注意

仅当您不运行virsh pool-build命令时,才需要执行本节中的步骤。

在主机磁盘上创建基于磁盘的存储池之前,必须使用 GUID 分区表 (GPT) 磁盘标签重新标记磁盘。GPT 磁盘标签允许在每个设备上创建多达 128 个分区。

# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? gpt
(parted) quit
Information: You may need to update /etc/fstab.
#

重新标记磁盘后,继续创建存储池并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于磁盘的存储池所需的参数列表。

描述XML格式池定义作为虚拟机管理器
存储池的类型<池类型='磁盘'>[类型] 磁盘disk:物理磁盘设备
存储池的名称<name>name</name>[name]
name
Name
指定存储设备的路径。例如,/dev/sdb

<source>
  <device path=/dev/sdb/>
<source>

source-dev path_to_disk源路径
指定目标的路径。这将是用于存储池的路径。

<target>
  <path>/path_to_pool</path>
</target>

目标path_to_pool目标路径

如果要用virsh创建存储池,请继续定义存储池

例子

以下是基于磁盘的存储池的 XML 文件示例:

<pool type='disk'>
<name>phy_disk</name>
<source>
<device path='/dev/sdb'/>
<format type='gpt'/>
</source>
<target>
<path>/dev</path>
</target>
</pool>

以下是用于创建基于磁盘的存储池的命令示例:

# virsh pool-define-as phy_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
Pool phy_disk defined

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager 添加新存储池对话框,用于创建基于磁盘的存储池:

1.3.3.3 基于文件系统的存储池

建议

请勿使用本节中的过程将整个磁盘指定为存储池(例如,/dev/sdb)。不应授予客户机对整个磁盘或块设备的写入访问权限。此方法只能用于将分区(例如,/dev/sdb1 )分配给存储池。

先决条件

注意

仅当不运行virsh pool-build命令时才需要执行此操作。

要从分区创建存储池,请将文件系统格式化为 ext4。

mkfs.ext4 /dev/sdc1

格式化文件系统后,继续创建存储池并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序所需的参数列表,用于从分区创建基于文件系统的存储池。

描述

XML格式

池定义作为

虚拟机管理器

存储池的类型

<pool type='fs'>[type] fs

fs:预格式化块设备

存储池的名称

<name>name</name>

[name]

name

Name

指定分区的路径。例如,/dev/sdc1

<source>
<device path='source_path'
/>
[source]
path_to_par
tition

源路径

文件系统类型,例如 ext4

<format type='fs_type' />
</source>
[source
format] FSformat

N/A

指定目标的路径。这将是用于存储池的路径。

<target>
<path>/path_to_pool</path
><
/target>

[target]

path_to_po

ol

Target Path

如果要用virsh创建存储池,请继续验证是否已创建存储池

例子

以下是基于文件系统的存储池的 XML 文件示例:

<pool type='fs'>
<name>guest_images_fs</name>
<source>
<device path='/dev/sdc1'/>
<format type='auto'/>
</source>
<target>
<path>/guest_images</path>
</target>
</pool>

以下是用于创建基于分区的存储池的命令示例:

# virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images Pool guest_images_fs defined

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager 添加新存储池对话框,用于创建基于文件系统的存储池:

1.3.3.4 基于 GlusterFS 的存储池

建议

GlusterFS 是一个用户空间文件系统,它使用用户空间中的文件系统 (FUSE)。

先决条件

在主机上创建基于 GlusterFS 的存储池之前,必须先准备好 Gluster 服务器。

准备 Gluster 服务器

1、使用以下命令列出 Gluster 服务器的状态,获取 Gluster 服务器的 IP 地址:

# gluster volume status
Status of volume: gluster-vol1
Gluster process						Port	Online	Pid
------------------------------------------------------------------------------
Brick 222.111.222.111:/gluster-vol1 			49155	Y	18634

Task Status of Volume gluster-vol1
------------------------------------------------------------------------------
There are no active volume tasks

2、如果未安装,请安装 glusterfs-fuse 软件包。

3、如果未启用,请启用virt_use_fusefs布尔值。检查它是否已启用。

# setsebool virt_use_fusefs on
# getsebool virt_use_fusefs
virt_use_fusefs --> on

确保已安装并启用所需的包后,继续创建存储池,继续创建存储池,并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于 GlusterFS 的存储池所需的参数列表。

描述XML格式池定义作为虚拟机管理器
存储池的类型<pool type='gluster'>[type]
gluster
Gluster:Gluster 文件系统
存储池的名称<name>name</name>[name]
name
Name
Gluster 服务器的主机名或 IP 地址<source>
<hostname='hostname' />
sourcehost
hostname
Host Name
Gluster 服务器的名称<name='Gluster-name' />sourcename
Glustername
Source
Name
Gluster 服务器上用于存储池的路径<dir path='Gluster-path' />
</source>
sourcepath
Glusterpath
Source
Path

如果要用于创建存储池,请继续验证是否已创建存储池virsh

例子

以下是基于 GlusterFS 的存储池的 XML 文件示例:

<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>  

以下是创建基于 GlusterFS 的存储池的命令示例:

pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager 添加新存储池对话框,用于创建基于 GlusterFS 的存储池:

1.3.3.5 基于  iSCSI 的存储池

建议

Internet 小型计算机系统接口 (iSCSI) 是一种用于共享存储设备的网络协议。iSCSI 使用 IP 层上的 SCSI 指令将启动器(存储客户端)连接到目标(存储服务器)。

使用基于 iSCSI 的设备来存储客户机虚拟机可实现更灵活的存储选项,例如将 iSCSI 用作块存储设备。iSCSI 设备使用 Linux-IO (LIO) 目标。这是 Linux 的多协议 SCSI 目标。除了 iSCSI,LIO 还支持光纤通道和以太网光纤通道 (FCoE)。

先决条件

在创建基于 iSCSI 的存储池之前,必须先创建 iSCSI 目标。iSCSI 目标是使用 targetcli 包创建的,该包提供了用于创建软件支持的 iSCSI 目标的命令集。

创建 iSCSI 目标

1、安装 targetcli 包

yum install targetcli

2、启动 targetcli 命令集 

targetcli

3、创建存储对象

使用存储池创建三个存储对象。

a.创建块存储对象

  1. 导航到/backstores/block目录。

  2. 运行create命令。

create [block-name][filepath]

例如:

create block1 dev=/dev/sdb1

b.创建 fileio 对象

  1. 导航到/fileio目录。

  2. 运行create命令。

create [fileio-name][image-name] [image-size]

例如:

create fileio1 /foo.img 50M

c.创建 ramdisk 对象

  1. 导航到/ramdisk目录。

  2. 运行create命令。

create [ramdisk-name] [ramdisk-size]

 例如:

create ramdisk1 1M

记下在此步骤中创建的磁盘的名称。它们将在以后使用。

 4、创建 iSCSI 目标

a.导航到/iscsi目录。

b.通过以下两种方式之一创建目标:

  • 运行不带参数的create命令。

    iSCSI 限定名称 (IQN) 是自动生成的。

  • 运行指定 IQN 和服务器的create命令。例如:

create iqn.2010-05.com.example.server1:iscsirhel7guest

5、定义门户 IP 地址

要通过 iSCSI 导出块存储,必须先配置门户、LUN 和访问控制列表 ACL。

该门户包括目标监视的 IP 地址和 TCP,以及它连接到的发起方。iSCSI 使用端口 3260。默认情况下,此端口已配置。

要连接到端口 3260:

  1. 导航到/tpg目录。

  2. 运行以下命令:

portals/ create

此命令使所有可用的 IP 地址侦听端口 3260。

如果只想让单个 IP 地址侦听端口 3260,请将 IP 地址添加到命令的末尾。例如:

portals/ create 143.22.16.33

6、配置 LUN 并将存储对象分配给结构

此步骤使用在创建存储对象时创建的存储对象。

a.导航到在定义门户 IP 地址时创建的 TPG 的luns目录。例如:

iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest

 b.将第一个 LUN 分配给虚拟硬盘。例如:

create /backstores/ramdisk/ramdisk1

c.将第二个 LUN 分配给块磁盘。例如: 

create /backstores/block/block1

 d.将第三个 LUN 分配给 fileio 磁盘。例如:

create /backstores/fileio/fileio1

e. 列出生成的 LUN。

/iscsi/iqn.20...csirhel7guest ls

o- tgp1 ............................................................[enabled, auth]
  o- acls...................................................................[0 ACL]
  o- luns..................................................................[3 LUNs]
  | o- lun0......................................................[ramdisk/ramdisk1]
  | o- lun1...............................................[block/block1 (dev/vdb1)]
  | o- lun2................................................[fileio/file1 (foo.img)]
  o- portals.............................................................[1 Portal]
    o- IP-ADDRESS:3260.........................................................[OK]

7、为每个启动器创建 ACL

在启动器连接时启用身份验证。您还可以将指定的 LUN 分配给指定的指示器。目标和启动器具有唯一的名称。iSCSI 启动器使用 IQN。

a.使用启动器名称查找 iSCSI 启动器的 IQN。例如:

cat /etc/iscsi/initiator2.iscsi
InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest

此 IQN 用于创建 ACL。

b.导航到acls目录。

c.通过执行以下操作之一来创建 ACL:

  • 通过运行不带参数的create命令,为所有 LUN 和启动器创建 ACL。

create

为特定 LUN 和启动器创建 ACL,然后运行指定 iSCSI 启动器的 IQN 的create命令。例如:

create iqn.2010-05.com.example.server1:888

将内核目标配置为对所有启动器使用单个用户 ID 和密码。

set auth userid=user_ID
set auth password=password
set attribute authentication=1
set attribute generate_node_acls=1

8、保存配置

通过覆盖以前的启动设置,使配置持久化。

saveconfig

9、启用服务

要在下次启动时应用保存的设置,请启用该服务。

systemctl enable target.service

任择程序

在创建基于 iSCSI 的存储池之前,可以对 iSCSI 目标执行许多可选过程。

在 RAID 阵列上配置逻辑卷

  1. 创建 RAID5 阵列

    有关创建 RAID5 阵列的信息,请参阅《Red Hat Enterprise Linux 7 存储管理指南》。

  2. 在 RAID5 阵列上创建 LVM 逻辑卷

    有关在 RAID5 阵列上创建 LVM 逻辑卷的信息,请参阅《Red Hat Enterprise Linux 7 逻辑卷管理器管理指南》。

测试可发现性

  • 确保新的 iSCSI 设备是可发现的。

iscsiadm --mode discovery --type sendtargets --portal server1.example.com

测试设备附件

2、连接新的 iSCSI 设备

连接新设备 (iqn.2010-05.com.example.server1:iscsirhel7guest) 以确定是否可以连接该设备。

iscsiadm -d2 -m node --login

scsiadm: Max file limits 1024 1024

Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260]
Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

 2、分离设备

iscsiadm -d2 -m node --logout
scsiadm: Max file limits 1024 1024

Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260
Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

将 libvirt 密钥用于 iSCSI 存储池

注意

如果在创建 iSCSI 目标时定义了 user_ID 和密码,则此过程是必需的。

可以配置用户名和密码参数以保护 iSCSI 存储池。这可以在定义池之前或之后进行配置,但必须启动池才能使身份验证设置生效。virsh

1、创建 libvirt 密钥文件

使用质询握手身份验证协议 (CHAP) 用户名创建 libvirt 密钥文件。例如:

<secret ephemeral='no' private='yes'>
    <description>Passphrase for the iSCSI example.com server</description>
    <usage type='iscsi'>
        <target>iscsirhel7secret</target>
    </usage>
</secret>    

2、定义密钥 

virsh secret-define secret.xml

3、验证 UUID

# virsh secret-list
UUID                                  Usage
--------------------------------------------------------------------------------
2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret

4、为 UID 分配密钥

使用以下命令在上一步的输出中为 UUID 分配密钥。这可确保 CHAP 用户名和密码位于 libvirt 控制的密钥列表中。

# MYSECRET=`printf %s "password123" | base64`
# virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET

5、向存储池添加身份验证条目

使用virsh edit 修改存储池的 XML 文件中的<source>条目,并添加一个<auth>元素,指定身份验证类型用户名密钥用法

例如:

<pool type='iscsi'>
  <name>iscsirhel7pool</name>
    <source>
       <host name='192.168.122.1'/>
       <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
       <auth type='chap' username='redhat'>
          <secret usage='iscsirhel7secret'/>
       </auth>
    </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>     

注意

<auth>子元素存在于客户机 XML 的 <pool> 和 <disk> 元素中的不同位置。对于 <pool><auth> 是在 <source> 元素中指定的,因为这描述了在何处查找池源,因为身份验证是某些池源(iSCSI 和 RBD)的属性。对于<disk>(它是域的子元素),对 iSCSI 或 RBD 磁盘的身份验证是磁盘的一个属性。

此外,磁盘的 <auth> 子元素与存储池的子元素不同。

<auth username='redhat'>
  <secret type='iscsi' usage='iscsirhel7secret'/>
</auth>  

6、激活更改

必须启动存储池才能激活这些更改。

  • 如果存储池尚未启动,请按照使用 virsh 创建存储池中的步骤来定义并启动存储池。

  • 如果池已启动,请输入以下命令以停止并重新启动存储池:

# virsh pool-destroy iscsirhel7pool
# virsh pool-start iscsirhel7pool

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于 iSCSI 的存储池所需的参数列表。

描述XML格式池定义作为虚拟机管理器
存储池的类型<pool type='iscsi'>[type] iscsiiscsi:iSCSI 目标
存储池的名称<name>name</name>[name]
name
Name
主机的名称。<source>
<host name='hostname' />
sourcehost
hostname
Host Name
The iSCSI IQN.device path="iSCSI_IQN" />
</source>
source-dev iSCSI_IQNSource IQN
指定目标的路径。这将是用于存储池的路径。

<target>
  <path>/dev/disk/by-path</path>
</target>

target
path_to_po
ol
Target Path
(可选)iSCSI 发起程序的 IQN。仅当 ACL 将 LUN 限制为特定启动器时,才需要执行此操作。

<initiator>
  <iqn name='initiator0' />
</initiator>

请参阅下面的注释。Initiator
IQN

注意

可以使用virsh find-storage-pool-sources-as iscsi命令确定 iSCSI 启动器的 IQN。

如果要用virsh创建存储池,请继续验证是否已创建存储池

例子

以下是基于 iSCSI 的存储池的 XML 文件示例:

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

以下是用于创建基于 iSCSI 的存储池的命令示例:

# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager 添加新存储池对话框,用于创建基于 iSCSI 的存储池:

1.3.3.6 基于 LVM 的存储池

建议

在创建基于 LVM 的存储池之前,请注意以下事项:

  • 基于 LVM 的存储池不能提供 LVM 的全部灵活性。

  • libvirt 支持精简逻辑卷,但不提供精简存储池的功能。

  • 基于 LVM 的存储池是卷组。您可以使用逻辑卷管理器命令virshvirsh命令创建卷组。要使用界面管理卷组,请使用virsh命令创建卷组。

  • 有关卷组的更多信息,请参阅《Red Hat Enterprise Linux 逻辑卷管理器管理指南》。

  • 基于 LVM 的存储池需要一个完整的磁盘分区。如果使用这些步骤激活新的分区或设备,则将格式化分区并擦除所有数据。如果使用主机的现有卷组 (VG),则不会擦除任何内容。建议在开始执行以下步骤之前备份存储设备。

    有关创建 LVM 卷组的信息,请参阅《Red Hat Enterprise Linux 逻辑卷管理器管理指南》。

  • 如果在现有 VG 上创建基于 LVM 的存储池,则不应运行pool-build命令。

确保 VG 已准备好后,继续创建存储池并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于 LVM 的存储池所需的参数列表。

描述XML格式池定义作为虚拟机管理器
存储池的类型<pool type='logical'>[type]
logical
逻辑:LVM 卷组
存储池的名称<name>name</name>[name]
name
Name
存储池的设备路径<source>
<device path='device_path'
/>
source-dev device_pathSource
Path
卷组的名称<name='VG-name' /> sourcenamesourcename
VGname
Source
Path
虚拟组格式<format type='lvm2' />
</source>
sourceformat
lvm2
N/A
目标路径

<target>
  <path='target-path' />
</target>

target
target-path
Target Path

注意

如果逻辑卷组由多个磁盘分区组成,则可能会列出多个源设备。例如:

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
  </source> 

如果要用于创建存储池,请继续验证是否已创建存储池virsh

例子

以下是基于 LVM 的存储池的 XML 文件示例:

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>  

以下是用于创建基于 LVM 的存储池的命令示例:

# virsh pool-define-as guest_images_lvm logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
Pool guest_images_lvm defined

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager 添加新存储池对话框,用于创建基于 LVM 的存储池:

1.3.3.7 基于 NFS的存储池

先决条件

要创建基于网络文件系统 (NFS) 的存储池,应已将 NFS 服务器配置为由主机使用。有关 NFS 的更多信息,请参阅《Red Hat Enterprise Linux 存储管理指南》。

确保 NFS 服务器配置正确后,继续创建存储池并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于 NFS 的存储池所需的参数列表。

描述XML格式池定义作为虚拟机管理器
存储池的类型<pool type='netfs'>[type] netfsnetfs:网络导出目录
存储池的名称<name>name</name>[name]
name
Name
挂载点所在的 NFS 服务器的主机名。这可以是主机名或 IP 地址。<source>
<host name='host_name' />
sourcehost
host_name
Host Name
NFS 服务器上使用的目录

<dir path='source_path' />
</source>

source-path source_pathSource
Path
指定目标的路径。这将是用于存储池的路径。<target>
<path>/target_path</path>
</target>
target
target_path
Target Path

如果要用virsh创建存储池,请继续验证是否已创建存储池

例子

以下是基于 NFS 的存储池的 XML 文件示例:

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='localhost'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>  

 以下是用于创建基于 NFS 的存储池的命令示例:

# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined

下图显示了虚拟机 XML 配置的示例:Virtual Machine Manager Add a New Storage Pool 对话框,用于创建基于 NFS 的存储池:

​ 

1.3.3.8 使用 SCSI 设备的基于 vHBA 的存储池

注意

不能使用 Virtual Machine Manager 通过 SCSI 设备创建基于 vHBA 的存储池。

建议

N_Port ID 虚拟化 (NPIV) 是一种软件技术,允许共享单个物理光纤通道主机总线适配器 (HBA)。这允许多个客户机从多个物理主机查看相同的存储,从而允许更简单的存储迁移路径。因此,只要指定了正确的存储路径,就无需迁移来创建或复制存储。

在虚拟化中,虚拟主机总线适配器 (vHBA) 控制虚拟机的逻辑单元号 (LUN)。要使主机在多个 KVM 客户机之间共享一个光纤通道设备路径,必须为每个虚拟机创建一个 vHBA。单个 vHBA 不得由多个 KVM 虚拟机使用。

NPIV的每个vHBA由它的父HBA和它自己的WWNN (World Wide Node Name)来标识
WWPN (World Wide Port Name)。到存储的路径由WWNN和WWPN决定
值。父HBA可以定义为scsi_host#或WWNN/WWPN对。

注意

如果将父 HBA 定义scsi_host#为父 HBA,并且将硬件添加到主机,则​​​​​scsi_host#分配可能会更改。因此,建议您使用 WWNN/WWPN 对定义父 HBA。

建议您根据 vHBA 定义一个 libvirt 存储池,因为这会保留 vHBA 配置。

使用 libvirt 存储池有两个主要优点:

  • libvirt 代码可以使用 virsh 命令输出轻松找到 LUN 的路径。

  • 虚拟机迁移只需在目标计算机上定义并启动具有相同 vHBA 名称的存储池。为此,必须在虚拟机的 XML 配置中指定 vHBA LUN、libvirt 存储池和卷名称。

注意

在创建 vHBA 之前,建议您在主机 LUN 中配置存储阵列 (SAN) 端分区,以在虚拟机之间提供隔离并防止数据损坏的可能性。

要创建持久性 vHBA 配置,请首先使用以下格式创建一个 libvirt 'scsi'存储池 XML 文件。在同一物理 HBA 上创建使用存储池的单个 vHBA 时,建议<path>为值使用稳定的位置,例如/dev/disk/by-{path|id|uuid|label}系统上的某个位置。

在同一物理 HBA 上创建使用存储池的多个 vHBA 时,<path> 字段的值必须仅为/dev/,否则存储池卷仅对其中一个 vHBA 可见,并且使用 NPIV 配置时,主机中的设备无法向多个客户机公开。

有关<path> 和<target> 中的元素的更多信息,请参阅上游 libvirt 文档

先决条件

在使用 SCSI 设备创建基于 vHBA 的存储池之前,请先创建 vHBA:

创建 vHBA

1、在主机系统上找到 HBA

要在主机系统上找到 HBA,请使用以下virsh nodedev-list --cap vports命令。

以下示例显示了具有两个支持 vHBA 的 HBA 的主机:

# virsh nodedev-list --cap vports
scsi_host3
scsi_host4

2、检查 HBA 的详细信息

使用virsh nodedev-dumpxml HBA_device命令查看 HBA 的详细信息。

# virsh nodedev-dumpxml scsi_host3

该命令的输出列出了<name> 、<wwnn> 和 <wwpn>字段,这些字段用于创建 vHBA。<max_vports>  显示受支持的 vHBA 的最大数量。例如:

<device>
  <name>scsi_host3</name>
  <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
  <parent>pci_0000_10_00_0</parent>
  <capability type='scsi_host'>
    <host>3</host>
    <unique_id>0</unique_id>
    <capability type='fc_host'>
      <wwnn>20000000c9848140</wwnn>
      <wwpn>10000000c9848140</wwpn>
      <fabric_wwn>2002000573de9a81</fabric_wwn>
    </capability>
    <capability type='vport_ops'>
      <max_vports>127</max_vports>
      <vports>0</vports>
    </capability>
  </capability>
</device>   

 在此示例中,<max_vports>值显示总共有 127 个虚拟端口可供 HBA 配置使用。<vports>值显示当前正在使用的虚拟端口数。这些值在创建 vHBA 后会更新。

3、创建 vHBA 主机设备

为 vHBA 主机创建类似于以下内容之一的 XML 文件。在此示例中,该文件被命名为 vhba_host3.xml

此示例用scsi_host3描述父 vHBA。

# cat vhba_host3.xml
<device>
  <parent>scsi_host3</parent>
  <capability type='scsi_host'>
    <capability type='fc_host'>
    </capability>
  </capability>
</device>   

此示例使用 WWNN/WWPN 对来描述父 vHBA。

# cat vhba_host3.xml
<device>
  <name>vhba</name>
  <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
  <capability type='scsi_host'>
    <capability type='fc_host'>
    </capability>
  </capability>
</device>   

注意

WWNN 和 WWPN 值必须与过程 13.10 “创建 vHBA”中显示的 HBA 详细信息中的值匹配。

<parent>字段指定要与此 vHBA 设备关联的 HBA 设备。<device>标记中的详细信息将在下一步中使用,为主机创建新的 vHBA 设备。有关 ​​​​​​​​​​​​​​nodedev XML 格式的更多信息,请参阅 libvirt 上游页面

4、在 vHBA 主机设备上创建新的 vHBA

要根据vhba_host3创建 vHBA,请使用virsh nodedev-create命令:

# virsh nodedev-create vhba_host3.xml
Node device scsi_host5 created from vhba_host3.xml

5、验证 vHBA

使用virsh nodedev-dumpxml命令验证新 vHBA 的详细信息 (scsi_host5):​​​​​​​

# virsh nodedev-dumpxml scsi_host5
<device>
  <name>scsi_host5</name>
  <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
  <parent>scsi_host3</parent>
  <capability type='scsi_host'>
    <host>5</host>
    <unique_id>2</unique_id>
    <capability type='fc_host'>
      <wwnn>5001a4a93526d0a1</wwnn>
      <wwpn>5001a4ace3ee047d</wwpn>
      <fabric_wwn>2002000573de9a81</fabric_wwn>
    </capability>
  </capability>
</device>  

验证 vHBA 后,继续创建存储池并定义存储池

参数

下表提供了 XML 文件、virsh pool-define-as命令和 Virtual Machine Manager 应用程序创建基于 vHBA 的存储池所需的参数列表。

描述XML格式池定义作为
存储池的类型<pool type='scsi'>SCSI (英语)
存储池的名称<name>name</name>--adapter-name name
vHBA 的标识符。该属性是可选的。parent

<source>
<adapter type='fc_host'
[parent=parent_scsi_device]
wwnn='WWNN'
wwpn='WWPN' />
</source>

[--adapter-parent parent]
--adapter-wwnn wwnn
--adapter-wpnn wwpn
指定目标的路径。这将是用于存储池的路径。

<target>
  <path>target_path</path>
</target>

target path_to_pool

重要

当<path>字段为​​​​​​​/dev/时,libvirt 为卷设备路径生成唯一的短设备路径。例如/dev/sdc

。否则,将使用物理主机路径。例如/dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0。独特的短设备路径允许多个存储池在多个客户机中列出同一卷。如果物理主机路径由多个客户机使用,则可能会出现重复的设备类型警告。

注意

可以在parent字段中使用<adapter>属性来标识物理 HBA 父级,从中可以使用不同路径的 NPIV LUN 。scsi_hostN字段 ,vports与 和max_vports属性结合使用以完成父项标识。

parentparent_wwnnparent_wwpn或 parent_fabric_wwn

属性提供了不同程度的保证,即在主机重新启动后,将使用相同的 HBA。​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  • 如果不指定parent,libvirt 将使用第一个支持 NPIV 的scsi_hostN适配器。​​​​​​​

  • 如果仅指定parent,则在将其他 SCSI 主机适配器添加到配置中时,可能会出现问题。

  • 如果指定了parent_wwnn 或​​​​parent_wwpn,则在主机重新引导后,将使用相同的 HBA。

  • 如果使用了 parent_fabric_wwn 参数,那么在主机重启后,在同一个 fabric 上会自动选择一个 HBA,而不管 scsi_hostN 参数的值是多少。 

如果要用于创建存储池,请继续验证是否已创建存储池virsh

例子

以下是基于 vHBA 存储池的 XML 文件示例。第一个示例是一个存储池的示例,该存储池是 HBA 上的唯一存储池。第二个示例是一个存储池,它是多个存储池中的一个,这些存储池使用单个 vHBA,并使用父属性来识别 SCSI 主机设备。

<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>  

以下是用于创建基于 vHBA 的存储池的命令示例:

# virsh pool-define-as vhbapool_host3 scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/by-path
Pool vhbapool_host3 defined

注意

virsh命令不提供定义​​​parent_wwnn、​​​​​​​parent_wwpn或​​​​​​​parent_fabric_wwn属性的方法。

配置虚拟机以使用 vHBA LUN

为 vHBA 创建存储池后,必须将 vHBA LUN 添加到虚拟机配置中。

  1. 在虚拟机的 XML 中在虚拟机上创建磁盘卷。

  2. storage pool参数中指定​​​​​​​storage volume 和<source> 。​​​​​​​ ​​​​​​​

示例如下:

<disk type='volume' device='disk'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0'/>
  <target dev='hda' bus='ide'/>
</disk>    

要指定lun device 而不是 disk,请参阅以下示例:​​​​​​​

<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:4:0' mode='host'/>
  <target dev='sda' bus='scsi'/>
  <shareable />
</disk>

有关向客户机添加基于 SCSI LUN 的存储的 XML 配置示例,请参见第 13.3.6.3 节 “向客户机添加基于 SCSI LUN 的存储”。

请注意,为确保在硬件故障时成功重新连接到 LUN,建议您编辑 fast_io_fail_tmo和 dev_loss_tmo选项。有关详细信息,请参阅在硬件故障后重新连接到公开的 LUN。​​​​​​​

1.3.4 删除存储池

您可以使用 virsh 或 Virtual Machine Manager 删除存储池。

1.3.4.1 删除存储池的先决条件

为避免对使用您要删除的存储池的其他客户机虚拟机产生负面影响,建议您停止该存储池并释放其正在使用的任何资源。

1.3.4.2 使用 virsh 删除存储池

1、列出定义的存储池:

# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
guest_images_pool    active     yes

2、停止要删除的存储池。 

# virsh pool-destroy guest_images_disk

3、(可选)对于某些类型的存储池,您可以选择删除存储池所在的目录: 

# virsh pool-delete guest_images_disk

4、删除存储池的定义。 

# virsh pool-undefine guest_images_disk

5、确认池未定义: 

# virsh pool-list --all
Name                 State      Autostart
-----------------------------------------
default              active     yes
 1.3.4.3 使用 Virtual Machine Manager 删除存储池
  1. “连接详细信息”窗口的“存储”选项卡的存储池列表中选择要删除的存储池。

  2. 单击“存储”窗口底部的“图标。这将停止存储池并释放它正在使用的任何资源。

  3. 点击。

注意

仅当存储池停止时,才会启用该图标。

存储池将被删除。

1.4 使用存储卷

本部分提供有关使用存储卷的信息。它提供了概念信息,以及有关使用virsh命令和虚拟机管理器创建、配置和删除存储卷的详细说明。

1.4.1 存储卷概念

存储池被划分为存储卷。存储卷是物理分区、LVM 逻辑卷、基于文件的磁盘映像以及 libvirt 处理的其他存储类型的抽象。存储卷将作为本地存储设备呈现给客户机虚拟机,而不考虑底层硬件。

在主机上,存储卷通过其名称和派生它的存储池的标识符来引用。在virsh命令行上,其形式为 --pool storage_pool volume_name

例如,guest_images池中名为 firstimage 的卷。

# virsh vol-info --pool guest_images firstimage
  Name:           firstimage
  Type:           block
  Capacity:       20.00 GB
  Allocation:     20.00 GB

1.4.2 创建存储卷

本节提供有关使用 virsh 和 Virtual Machine Manager 从存储池创建存储卷的一般说明。创建存储卷后,您可以向客户机添加存储设备

1.4.2.1 使用 virsh 创建存储卷

执行下列操作之一:

  • 使用 XML 文件定义存储卷。

    一个。创建一个临时 XML 文件,其中包含新设备所需的存储卷信息。

    XML 文件必须包含特定字段,包括以下内容:

    • name- 存储卷的名称。

    • allocation- 存储卷的总存储分配。

    • capacity- 存储卷的逻辑容量。如果体积稀疏,则此值可能与该值不同。allocation

    • target- 主机系统上存储卷的路径,以及(可选)其权限和标签。

    下面显示了一个示例:存储卷定义 XML 文件。在此示例中,文件将保存到~/guest_volume.xml

<volume>
    <name>volume1</name>
    <allocation>0</allocation>
    <capacity>20G</capacity>
    <target>
      <path>/var/lib/virt/images/sparse.img</path>
    </target>
  </volume> 

 b.使用virsh vol-create命令基于 XML 文件创建存储卷。

# virsh vol-create guest_images_dir ~/guest_volume.xml
  Vol volume1 created
  • c.删除在步骤 a 中创建的 XML 文件。

  • 使用virsh vol-create-as命令创建存储卷。

# virsh vol-create-as guest_images_dir volume1 20GB --allocation 0

 使用virsh vol-clone命令克隆现有存储卷​​​​​​​virsh vol-clone命令必须指定包含要克隆的存储卷的存储池以及新创建的存储卷的名称。

# virsh vol-clone --pool guest_images_dir volume1 clone1
1.4.2.2 使用 Virtual Machine Manager 创建存储卷

1、打开存储设置

a、在 Virtual Machine Manager 中,打开“编辑”菜单,然后选择“连接详细信息”。

b、单击“连接详细信息”窗口中的“存储”选项卡。

2、选择要在其中创建存储卷的存储池

在存储池列表中,单击要在其中创建存储卷的存储池。

在选定存储池上配置的任何存储卷都会显示在窗口底部的“卷”窗格中。

3、添加新的存储卷

单击“卷”列表上方的按钮。此时将显示“添加存储卷”对话框。

4、配置存储卷

使用以下参数配置存储卷:

  • 名称字段中输入存储池的名称。

  • 格式列表中选择存储卷的格式。

  • “最大容量”字段中输入存储卷的最大大小。

5、完成创建

单击 Finish。“添加存储卷”对话框将关闭,存储卷将显示在“卷”列表中。

 1.4.3 查看存储卷

您可以从存储池创建多个存储卷。您还可以使用virsh vol-list命令列出存储池中的存储卷。在以下示例中,guest_images_disk包含三个卷。

# virsh vol-create-as guest_images_disk volume1 8G
Vol volume1 created

# virsh vol-create-as guest_images_disk volume2 8G
Vol volume2 created

# virsh vol-create-as guest_images_disk volume3 8G
Vol volume3 created

# virsh vol-list guest_images_disk
Name                 Path
-----------------------------------------
volume1              /home/VirtualMachines/guest_images_dir/volume1
volume2              /home/VirtualMachines/guest_images_dir/volume2
volume3              /home/VirtualMachines/guest_images_dir/volume3

 1.4.4 管理数据

节提供有关管理存储卷上的数据的信息。

注意

某些类型的存储卷不支持所有数据管理命令。有关具体信息,请参阅以下部分。

1.4.4.1 擦除存储卷

为确保无法访问存储卷上的数据,可以使用virsh vol-wipe命令擦除存储卷。

使用以下virsh vol-wipe命令擦除存储卷:

# virsh vol-wipe new-vol vdisk

默认情况下,数据将被零覆盖。但是,可以指定许多不同的方法来擦除存储卷。有关virsh vol-wipe命令的所有选项的详细信息,请参见第 20.32 节 “删除存储卷的内容”。

 1.4.4.2 将数据上传到存储卷

您可以使用以下virsh vol-upload 命令将数据从指定的本地文件上传到存储卷。

# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file

以下是主要选项:virsh vol-upload

  • --pool pool-or-uuid- 卷所在的存储池的名称或 UUID。

  • vol-name-or-key-or-path- 要上传的卷的名称、密钥或路径。

  • --offset bytes存储卷中开始写入数据的位置。

  • --length length- 上传数据量的上限。

注意

如果 local-file 大于指定的--length,则会发生错误。

将数据上传到存储卷

# virsh vol-upload sde1 /tmp/data500m.empty disk-pool

 在此示例中,sde1是存储池中的一个卷。disk-pool/tmp/data500m.empty中的数据将复制到sde1 。​​​​​​​

1.4.4.3 将数据下载到存储卷

您可以使用以下virsh vol-download命令将数据从存储卷下载到指定的本地文件。

# vol-download --pool pool-or-uuid --offset bytes --length bytes vol-name-or-key-or-path local-file

以下是主要选项:virsh vol-download

  • --pool pool-or-uuid- 卷所在的存储池的名称或 UUID。

  • vol-name-or-key-or-path- 要下载的卷的名称、键或路径。

  • --offset- 存储卷中开始读取数据的位置。

  • --length length- 下载数据量的上限。

从存储卷下载数据

# virsh vol-download sde1 /tmp/data-sde1.tmp disk-pool

 在此示例中,sde1是存储池中​​​​​​​disk-pool的一个卷。​​​​​​​sde1中的数据将下载到/tmp/data-sde1.tmp 。​​​​​​​

 1.4.4.4 调整存储卷的大小

您可以使用以下vol-resize命令调整指定存储卷的容量。

# virsh vol-resize --pool pool-or-uuid vol-name-or-path pool-or-uuid capacity --allocate --delta --shrink

容量以字节表示。该命令要求卷所在的存储池的名称或 UUID。--pool pool-or-uuid命令还需要 vol-name-or-key-or-path,即要调整大小的卷的名称、键或路径。

除非指定--allocate,否则新容量可能是稀疏的。通常,容量是新大小,但--delta如果存在,则将其添加到现有大小中。除非--shrink存在,否则缩小卷的尝试将失败。​​​​​​​​​​​​​​

请注意,除非提供--shrink容量,否则容量不能为负数,并且不需要负号。capacity 是一个缩放的整数,如果没有后缀,则默认为字节。此外,请注意,此命令仅对活动客户机未使用的存储卷是安全的。请参见第 20.13.3 节 “更改客户机虚拟机块设备的大小”以实时调整大小时。

例如,如果您创建了一个 50M 的存储卷,则可以使用以下命令将其大小调整为 100M:

# virsh vol-resize --pool disk-pool sde1 100M

 1.4.5 删除存储卷

您可以使用 virsh 或 Virtual Machine Manager 删除存储卷。

1.4.5.1 使用 virsh 删除存储卷

使用命令删除存储卷。该命令必须指定存储卷的名称或路径以及从中抽象出存储卷的存储池。virsh vol-delete

以下示例从 guest_images_dir 存储池中删除 volume_name 存储卷:

# virsh vol-delete volume_name --pool guest_images_dir
  vol volume_name deleted
1.4.5.2 使用 Virtual Machine Manager 删除存储卷

1、打开存储设置

  1. 在 Virtual Machine Manager 中,打开“编辑”菜单,然后选择“连接详细信息”。

  2. 单击“连接详细信息”窗口中的“存储”选项卡。

2、选择要删除的存储卷

  1. 在存储池列表中,单击从中抽象出存储卷的存储池。

    在选定存储池上配置的存储卷列表将显示在窗口底部的“卷”窗格中。

  2. 选择要删除的存储卷。

3、删除存储卷

  1. 单击按钮(在“卷”列表上方)。此时将显示一个确认对话框。

  2. 单击“”。选定的存储卷将被删除。

 1.4.6 向虚拟机添加存储

您可以使用 virsh 或 Virtual Machine Manager 将存储设备添加到客户机虚拟机。

1.4.6.1 使用 virsh 向 虚拟机添加存储设备 

要将存储设备添加到客户机虚拟机,请使用以下attach-disk命令。可以在 XML 文件或命令行中指定包含有关要添加的磁盘的信息的参数。

下面是一个包含存储定义的示例 XML 文件。

<disk type='file' device='disk>'>
  <driver name='qemu' type='raw' cache='none'/>
  <source file='/var/lib/libvirt/images/FileName.img'/>
  <target dev='vdb' bus='virtio'/>
</disk> 

以下命令使用名为NewStorage.xml 的 XML 文件将磁盘连接到 Guest1

# virsh attach-disk --config Guest1 ~/NewStorage.xml

以下命令在不使用 xml 文件的情况下将磁盘连接到 Guest1

# virsh attach-disk --config Guest1 --source /var/lib/libvirt/images/FileName.img --target vdb
1.4.6.2 使用 Virtual Machine Manager 向 Guest 添加存储设备

您可以向虚拟机添加存储卷,也可以创建默认存储设备并将其添加到虚拟机。

要向客户机虚拟机添加存储卷,请执行以下操作:

1、打开 Virtual Machine Manager 并查看虚拟机硬件详细信息窗口

以 root 身份执行virt-manager命令或打开应用程序系统工具虚拟机管理器来打开 virt-manager。​​​​​​​

选择要向其添加存储卷的客户机虚拟机。

单击“打开”。此时将打开“虚拟机”窗口。

点击。此时将显示硬件详细信息窗口。

 

2、打开“添加新的虚拟硬件”窗口

单击“添加硬件”。此时将显示“添加新虚拟硬件”窗口。

确保在硬件类型窗格中选择了存储

 

3、查看存储卷列表

选择“选择或创建自定义存储选项”按钮。

单击“管理”。此时将显示“选择存储卷”对话框。

 

4、选择存储卷

从“选择存储卷”窗口左侧的列表中选择一个存储池。所选存储池中的存储卷列表将显示在“卷”列表中。

注意

您可以从“选择存储卷”窗口创建存储池。有关详细信息,请参见第 13.2.2.2 节 “使用 Virtual Machine Manager 创建存储池”。

单击 Choose Volume。“选择存储卷”窗口将关闭。 

6、配置存储卷

设备类型列表中选择设备类型。可用的类型包括:磁盘设备、软盘设备和 LUN 直通。

总线类型列表中选择总线类型。可用的总线类型取决于所选的设备类型。

缓存模式列表中选择缓存模式。可用的缓存模式包括:虚拟机监控程序默认、无、直通、写回、directsync、不安全

单击 Finish。“添加新虚拟硬件”窗口将关闭。

 1.4.6.3 向虚拟机添加默认存储

默认存储池是目录中基于文件的映像。/var/lib/libvirt/images/

要向客户机虚拟机添加默认存储,请执行以下操作:

1、打开 Virtual Machine Manager 并查看虚拟机硬件详细信息窗口

以 root 身份执行virt-manager命令或打开应用程序系统工具虚拟机管理器来打开 virt-manager。​​​​​​​

选择要向其添加存储卷的客户机虚拟机。

单击“打开”。此时将打开“虚拟机”窗口。

点击。此时将显示硬件详细信息窗口。

2、打开“添加新的虚拟硬件”窗口

单击“添加硬件”。此时将显示“添加新虚拟硬件”窗口。

确保在硬件类型窗格中选择了存储

3、为客户机创建磁盘

确保“为虚拟机创建磁盘映像”选项。

在“为虚拟机创建磁盘映像”选项按钮下方的文本框中输入要创建的磁盘大小。

单击 Finish。“添加新虚拟硬件”窗口将关闭。

 1.4.6.4 向虚拟机添加基于 SCSI LUN 的存储

有多种方法可以将主机 SCSI LUN 完全公开给客户机。通过向客户机公开 SCSI LUN ,可以直接对客户机上的 LUN 执行 SCSI 命令。这在客户机之间共享 LUN 以及在主机之间共享光纤通道存储非常有用。

有关基于 SCSI LUN 的存储的详细信息,请参阅使用 SCSI 设备的基于 vHBA 的存储池

重要

 可选的 sgio 属性控制是否过滤针对 device='lun' 磁盘的非特权 SCSI 通用 I/O (SG_IO) 命令。sgio 属性可以设置为 'filtered' 或 'unfiltered',但必须设置为 'unfiltered',以允许 SG_IO ioctl 命令在客户端的持久保留中通过。此外,除了设置 sgio='unfiltered',还必须将 <shareable> 元素设置为在客户端之间共享 LUN。如果未指定,sgio 属性默认为 'filtered'。

<disk> XML 属性device='lun'对以下虚拟机磁盘配置有效:

  • type='block'<source dev='/dev/disk/by-{path|id|uuid|label}'/>

<disk type='block' device='lun' sgio='unfiltered'>
​  <driver name='qemu' type='raw'/>
​  <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/>
​  <target dev='sda' bus='scsi'/>
  <shareable/>
​</disk>

注意

<source>设备名称中冒号前的反斜杠是必需的。

 type='network'<source protocol='iscsi'... />

<disk type='network' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'>
    <host name='example.com' port='3260'/>
    <auth username='myuser'>
      <secret type='iscsi' usage='libvirtiscsi'/>
    </auth>
  </source>
  <target dev='sda' bus='scsi'/>
  <shareable/>
</disk> 

type='volume'使用 iSCSI 或 NPIV/vHBA 源池作为 SCSI 源池时。

以下示例 XML 显示了使用 iSCSI 源池(名为 iscsi-net-pool)作为 SCSI 源池的虚拟机:

<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/>
  <target dev='sda' bus='scsi'/>
  <shareable/>
</disk> 

注意

标记中的mode=option <source>选项是可选的,但如果使用,则必须将其设置为'host'

and 而不是​​​​​​​​​​'direct'。当设置为'host'时,libvirt 将在本地主机上查找设备的路径。当设置为

'direct'时,libvirt 将使用源池的源主机数据生成设备的路径。​​​​​​​​​​​​​​

上述示例中的 iSCSI 池 (iscsi-net-pool) 将具有与以下内容类似的配置: 

# virsh pool-dumpxml iscsi-net-pool
<pool type='iscsi'>
  <name>iscsi-net-pool</name>
  <capacity unit='bytes'>11274289152</capacity>
  <allocation unit='bytes'>11274289152</allocation>
  <available unit='bytes'>0</available>
  <source>
    <host name='192.168.122.1' port='3260'/>
    <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/>
    <auth type='chap' username='redhat'>
      <secret usage='libvirtiscsi'/>
    </auth>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
    <permissions>
      <mode>0755</mode>
    </permissions>
  </target>
</pool> 

 要验证 iSCSI 源池中可用 LUN 的详细信息,请输入以下命令:

# virsh vol-list iscsi-net-pool
Name                 Path
------------------------------------------------------------------------------
unit:0:0:1           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1
unit:0:0:2           /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2

type='volume'使用 NPIV/vHBA 源池作为 SCSI 源池时。

以下示例 XML 显示了使用 NPIV/vHBA 源池(名为 vhbapool_host3)作为 SCSI 源池的虚拟机:

<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:1:0'/>
  <target dev='sda' bus='scsi'/>
  <shareable/>
</disk>  

 上述示例中的 NPIV/vHBA 池 (vhbapool_host3) 将具有与以下内容类似的配置:

# virsh pool-dumpxml vhbapool_host3
<pool type='scsi'>
  <name>vhbapool_host3</name>
  <capacity unit='bytes'>0</capacity>
  <allocation unit='bytes'>0</allocation>
  <available unit='bytes'>0</available>
  <source>
    <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
    <permissions>
      <mode>0700</mode>
      <owner>0</owner>
      <group>0</group>
    </permissions>
  </target>
</pool>  

要验证 vHBA 上可用 LUN 的详细信息,请输入以下命令:

# virsh vol-list vhbapool_host3
Name                 Path
------------------------------------------------------------------------------
unit:0:0:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0
unit:0:1:0           /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0

以下过程显示了将基于 SCSI LUN 的存储设备添加到客户机的示例。上述任何 <disk device='lun'> guest 磁盘配置都可以使用此方法进行附加。根据您的环境替换配置。

将基于 SCSI LUN 的存储连接到客户机

1、通过在新文件中编写 <disk> 元素来创建设备文件,并使用 XML 扩展名保存此文件(在此示例中为 sda.xml):

# cat sda.xml
<disk type='volume' device='lun' sgio='unfiltered'>
  <driver name='qemu' type='raw'/>
  <source pool='vhbapool_host3' volume='unit:0:1:0'/>
  <target dev='sda' bus='scsi'/>
  <shareable/>
</disk>  

2、将 sda.xml中创建的设备与客户机虚拟机(例如 Guest1)相关联:

# virsh attach-device --config Guest1 ~/sda.xml

注意

使用 --config 选项运行 virsh attach-device 命令时,需要重新启动虚拟机才能永久性地将设备添加到虚拟机。另一种选择是可以使用 --persistent 选项,它也可以用于热插拔设备到虚拟机上。

 此外,可以使用 virt-manager 在虚拟机上附加或配置基于 SCSI LUN 的存储。要通过 virt-manager 配置这一点,请点击“添加硬件”按钮,使用所需的参数添加一个虚拟磁盘,或者从此窗口更改现有 SCSI LUN 设备的设置。在 Red Hat Enterprise Linux7.2 及以上版本中,SGIO 值也可以在 virt-manager 中进行配置。

如果由于硬件故障(例如主机总线适配器)而丢失与暴露的光纤通道 (FC) LUN 的连接,则即使在硬件故障得到修复后,客户机上暴露的 LUN 也可能继续显示为失败。为防止出现这种情况,请编辑dev_loss_tmo 和​​​​​​​fast_io_fail_tmo kernel 选项:

  • dev_loss_tmo控制 SCSI 设备发生故障后 SCSI 层在将其标记为失败之前等待的时间。为防止超时,建议将该选项设置为最大值,即2147483647 。

  • fast_io_fail_tmo控制 SCSI 设备发生故障后 SCSI 层在故障回复到 I/O 之前等待的时间。为确保内核不会忽略dev_loss_tmo值,请将此选项的值设置为小于dev_loss_tmo 的值的任何数字。​​​​​​​

要修改dev_loss_tmofast_io_fail的值,请执行下列操作之一:​​​​​​​

  • 编辑/etc/multipath.confdefaults文件,并在以下部分中设置值:

defaults {
...
fast_io_fail_tmo     20
dev_loss_tmo    infinity
}

在 FC 主机dev_loss_tmo或​​​​​​​fast_io_fail远程端口的级别上设置 和 ,例如:

# echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo
# echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo

 要验证dev_loss_tmo 和 ​​​​​​​​​​​​​​fast_io_fail的新值是否处于活动状态,请使用以下命令:

# find /sys -name dev_loss_tmo -print -exec cat {} \;

如果参数设置正确,则输出将如下所示,使用适当的设备或设备,而不是pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0

# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...

 1.4.7 管理虚拟机中的存储控制器

与 virtio 磁盘不同,SCSI 设备要求客户机虚拟机中存在控制器。本部分详细介绍了创建虚拟 SCSI 控制器(也称为“主机总线适配器”或 HBA)以及将 SCSI 存储添加到客户机虚拟机的必要步骤。

显示虚拟机 (Guest1) 的配置,并查找预先存在的 SCSI 控制器: 

# virsh dumpxml Guest1 | grep controller.*scsi

如果存在设备控制器,则该命令将输出类似于以下内容的一个或多个行:

<controller type='scsi' model='virtio-scsi' index='0'/>

如果上一步未显示设备控制器,请在新文件中创建一个<controller>设备控制器的说明,并使用以下步骤将其添加到虚拟机中:

1、通过在新文件中编写元素来创建设备控制器,并使用 XML virtio-scsi-controller.xml扩展名保存此文件。例如。

<controller type='scsi' model='virtio-scsi'/>

 2、将刚在virtio-scsi-controller.xml中创建的设备控制器与虚拟机(例如,Guest1)关联:

# virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml

 3、添加新的 SCSI 磁盘或 CD-ROM。可以使用第 13.3.6 节 “向客户机添加存储设备”中的方法添加新磁盘。要创建SCSI磁盘,请指定以sd开头的目标设备名称。

注意

每个控制器支持的限制是 1024 个 virtio-scsi 磁盘,但主机中的其他可用资源(如文件描述符)可能会随着磁盘数量减少而耗尽。

 1.4.8 从虚拟机中移除存储设

您可以使用 virsh 或 Virtual Machine Manager 从虚拟机中移除存储设备。

 1.4.8​​​​​​​.1 使用 virsh 从虚拟机中删除存储

以下示例从 Guest1 虚拟机中移除 vdb 存储卷:

# virsh detach-disk Guest1 vdb

 1.4.8​​​​​​​.2. 使用 Virtual Machine Manager 从虚拟机中删除存储

过程 13.15.使用 Virtual Machine Manager 从虚拟机中删除存储

要使用 Virtual Machine Manager 从客户机虚拟机中删除存储,请执行以下操作:

1、打开 Virtual Machine Manager 并查看虚拟机硬件详细信息窗口

以 root 身份执行命令或打开应用程序系统工具虚拟机管理器来打开 virt-manager。virt-manager

选择要从中移除存储设备的客户机虚拟机。

单击“打开”。此时将打开“虚拟机”窗口。

点击。此时将显示硬件详细信息窗口。

2、从客户机虚拟机中移除存储

从硬件详细信息窗格左侧的硬件列表中选择存储设备。

单击“删除”。此时将显示一个确认对话框。

单击“”。存储将从客户机虚拟机中移除。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值