9 准备 VM 主机服务器 #
在可以安装 Guest 虚拟机之前,需要准备好 VM 主机服务器,以便为 Guest 提供正常运行所需的资源。具体而言,您需要配置:
网络:使 Guest 能够利用主机提供的网络连接。
一个可从主机访问的存储池,以使 Guest 能够存储其磁盘映像。
9.1 配置网络 #
有两个常用网络配置可为 VM Guest 提供网络连接:
一个网桥。这是为 Guest 提供网络连接的默认方式,也是建议的方式。
一个已启用转发的虚拟网络。
9.1.1 网桥 #
网桥配置为 VM Guest 提供第 2 层交换机,可以基于与端口关联的 MAC 地址在网桥上的端口之间交换第 2 层以太网包。这样 VM Guest 便可通过第 2 层连接访问 VM 主机服务器的网络。此配置类似于将 VM Guest 的虚拟以太网网线连接到与主机以及主机上运行的其他 VM Guest 共享的集线器。该配置通常称为共享物理设备。
当 SUSE Linux Enterprise Server 配置为 KVM 或 Xen 超级管理程序时,网桥配置是它的默认配置。如果您只想将 VM Guest 连接到 VM 主机服务器的 LAN,则此为首选配置。
要使用哪个工具创建网桥取决于您在 VM 主机服务器上使用哪个服务来管理网络连接:
如果网络连接由
wicked
管理,请使用 YaST 或命令行来创建网桥。服务器主机默认使用wicked
。如果网络连接由 NetworkManager 管理,请使用 NetworkManager 命令行工具
nmcli
创建网桥。台式机和笔记本电脑默认使用 NetworkManager。
9.1.1.1 使用 YaST 管理网桥 #
本节包含使用 YaST 添加或去除网桥的过程。
9.1.1.1.1 添加网桥 #
要在 VM 主机服务器上添加网桥,请执行以下步骤:
启动
› › 。激活
选项卡并单击 。从
列表中选择 ,然后在 项中输入网桥设备接口名称。单击 按钮继续。在
选项卡中指定网络细节,例如 DHCP/静态 IP 地址、子网掩码或主机名。仅当您也将设备指派到与 DHCP 服务器连接的网桥时,
才有作用。如果您打算创建不与实际网络设备连接的虚拟网桥,请使用
。在这种情况下,比较好的做法是使用私用 IP 地址范围(例如192.168.0.0/16
、172.16.0.0/12
或10.0.0.0/8
)内的地址。要创建仅在不同 Guest 之间充当连接点,而不连接到主机系统的网桥,请将 IP 地址设置为
0.0.0.0
,将子网掩码设置为255.255.255.255
。网络脚本会将此特殊地址作为未设置的 IP 地址来处理。激活
选项卡,然后激活您要包含在网桥中的网络设备。单击
返回到 选项卡,然后单击 确认。现在,新网桥应在 VM 主机服务器上处于活动状态。
9.1.1.1.2 删除网桥 #
要删除现有网桥,请执行以下步骤:
启动
› › 。从
选项卡上的列表中选择您要删除的网桥设备。单击
以删除该网桥,然后单击 确认。
9.1.1.2 通过命令行管理网桥 #
本节包含使用命令行添加或去除网桥的过程。
9.1.1.2.1 添加网桥 #
要在 VM 主机服务器上添加新网桥设备,请执行以下步骤:
在要创建新网桥的 VM 主机服务器上以
root
身份登录。为新网桥选择一个名称(在本示例中为 virbr_test),然后运行以下命令
#
ip link add name VIRBR_TEST type bridge检查是否已在 VM 主机服务器上创建了网桥:
#
bridge vlan [...] virbr_test 1 PVID Egress Untaggedvirbr_test
存在,但不与任何物理网络接口相关联。启动该网桥,并在其中添加一个网络接口:
#
ip link set virbr_test up#
ip link set eth1 master virbr_test重要:网络接口必须未被使用只能指派尚未被其他网桥使用的网络接口。
(可选)启用 STP(请参见 Spanning Tree Protocol):
#
bridge link set dev virbr_test cost 4
9.1.1.2.2 删除网桥 #
要通过命令行删除 VM 主机服务器上的现有网桥设备,请执行以下步骤:
在要从中删除现有网桥的 VM 主机服务器上以
root
身份登录。列出现有网桥,以识别要去除的网桥的名称:
#
bridge vlan [...] virbr_test 1 PVID Egress Untagged删除网桥:
#
ip link delete dev virbr_test
9.1.1.3 使用 nmcli
添加网桥 #
本节介绍使用 NetworkManager 的命令行工具 nmcli
添加网桥的过程。
列出活动网络连接:
>
sudo
nmcli connection show --active NAME UUID TYPE DEVICE Ethernet connection 1 84ba4c22-0cfe-46b6-87bb-909be6cb1214 ethernet eth0添加名为
br0
的新网桥设备,并校验是否已创建该设备:>
sudo
nmcli connection add type bridge ifname br0 Connection 'bridge-br0' (36e11b95-8d5d-4a8f-9ca3-ff4180eb89f7) \ successfully added.>
sudo
nmcli connection show --active NAME UUID TYPE DEVICE bridge-br0 36e11b95-8d5d-4a8f-9ca3-ff4180eb89f7 bridge br0 Ethernet connection 1 84ba4c22-0cfe-46b6-87bb-909be6cb1214 ethernet eth0(可选)可以查看网桥设置:
>
sudo
nmcli -f bridge connection show bridge-br0 bridge.mac-address: -- bridge.stp: yes bridge.priority: 32768 bridge.forward-delay: 15 bridge.hello-time: 2 bridge.max-age: 20 bridge.ageing-time: 300 bridge.group-forward-mask: 0 bridge.multicast-snooping: yes bridge.vlan-filtering: no bridge.vlan-default-pvid: 1 bridge.vlans: --将网桥设备链接到物理以太网设备
eth0
:>
sudo
nmcli connection add type bridge-slave ifname eth0 master br0禁用
eth0
接口并启用新网桥:>
sudo
nmcli connection down "Ethernet connection 1">
sudo
nmcli connection up bridge-br0 Connection successfully activated (master waiting for slaves) \ (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
9.1.1.4 使用 VLAN 接口 #
有时需要在两台 VM 主机服务器之间或者 VM Guest 系统之间创建私用连接。例如,将 VM Guest 迁移到其他网段中的主机时,或者创建只有 VM Guest 系统能够连接到的私用网桥(即使是在不同 VM 主机服务器系统上运行)时。构建此类连接的简单方法是设置 VLAN 网络。
VLAN 接口通常在 VM 主机服务器上设置。它们可以将不同的 VM 主机服务器系统互连,或者可以设置为其他仅限虚拟连接的网桥的物理接口。甚至可以创建一个使用 VLAN 作为物理接口(该接口在 VM 主机服务器中没有 IP 地址)的网桥。这样,Guest 系统就无法通过此网络访问主机。
运行 YaST 模块
› 。执行以下过程设置 VLAN 设备:单击
以创建新网络接口。在
对话框中,选择 。将
的值更改为 VLAN 的 ID。请注意,VLAN ID1
通常用于管理目的。单击
。将 VLAN 设备应连接到的借口选择为下面的
。如果所需的接口未显示在列表中,请先在不指定 IP 地址的情况下设置此接口。选择将 IP 地址指派到 VLAN 设备的所需方法。
单击
完成配置。
还可将 VLAN 接口用作网桥的物理接口。这样便可以连接多个仅限 VM 主机服务器的网络,以及实时迁移与此类网络连接的 VM Guest 系统。
YaST 并非始终允许不设置 IP 地址。但有时可能需要这种功能,尤其是应该连接仅限 VM 主机服务器的网络时。在这种情况下,请使用特殊地址 0.0.0.0
和网络掩码 255.255.255.255
。系统脚本会将此地址当作未设置 IP 地址来处理。
9.1.2 虚拟网络 #
libvirt
管理的虚拟网络类似于桥接的网络,但通常不与 VM 主机服务器建立第 2 层连接。与 VM 主机服务器物理网络的连接通过第 3 层转发来实现,与第 2 层桥接网络相比,第 3 层转发在 VM 主机服务器上引入了额外的包处理。虚拟网络还为 VM Guest 提供 DHCP 和 DNS 服务。有关 libvirt
虚拟网络的详细信息,请参见 https://libvirt.org/formatnetwork.html 上的《Network XML
format》文档。
SUSE Linux Enterprise Server 上的标准 libvirt
安装中已预定义了一个名为 default
的虚拟网络。该虚拟网络提供网络的 DHCP 和 DNS 服务,并可使用网络地址转换 (NAT) 转发模式连接到 VM 主机服务器的物理网络。尽管 default
虚拟网络是预定义的,但它需要由管理员显式启用。有关 libvirt
支持的转发模式的详细信息,请参见 https://libvirt.org/formatnetwork.html#elementsConnect 上《Network
XML format》文档中的“Connectivity”一节。
libvirt
管理的虚拟网络可用于满足各种用例,但通常是在进行无线连接或动态/零星网络连接的 VM 主机服务器(例如便携式计算机)上使用。虚拟网络也适用于 VM 主机服务器网络的 IP 地址有限的情形,可用来在虚拟网络与 VM 主机服务器的网络之间转发包。不过,大多数服务器用例更适合网桥配置,其中的 VM Guest 会连接到 VM 主机服务器的 LAN。
在 libvirt
虚拟网络中启用转发模式会通过将 /proc/sys/net/ipv4/ip_forward
和 /proc/sys/net/ipv6/conf/all/forwarding
设置为 1 在 VM 主机服务器中启用转发,而这本质上是将 VM 主机服务器转变成路由器。重启动 VM 主机服务器的网络可能会重置值并禁用转发。要避免这种行为,请通过编辑 /etc/sysctl.conf
文件并添加以下设置,在 VM 主机服务器中显式启用转发:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
9.1.2.1 使用虚拟机管理器管理虚拟网络 #
您可以使用虚拟机管理器定义、配置和操作虚拟网络。
9.1.2.1.1 定义虚拟网络 #
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。右侧会显示选定虚拟网络的细节。图 9.1︰ 连接细节 #要添加新虚拟网络,请单击
。为新虚拟机指定名称。
图 9.2︰ 创建虚拟网络 #指定网络模式。对于
和 类型,可以指定要将网络通讯转发到的设备。 (网络地址转换)会重新映射虚拟网络地址空间并允许共享单个 IP 地址, 不会对来自虚拟网络的数据包进行任何转换即将其转发到 VM 主机服务器的物理网络。如果您需要 IPv4 网络,请选中
并指定 IPv4 网络地址。如果您需要 DHCP 服务器,请选中 并指定可指派的 IP 地址范围。如果您需要 IPv6 网络,请选中
并指定 IPv6 网络地址。如果您需要 DHCP 服务器,请选中 并指定可指派的 IP 地址范围。要指定与虚拟网络名称不同的域名,请在
下选择 ,并在此处输入所需的域名。单击
以创建新虚拟网络。VM 主机服务器上即会有一个新的虚拟网桥virbrX
,该网桥对应于新建的虚拟网络。可以使用bridge link
进行检查。libvirt
会自动添加 iptables 规则来允许传入/传出挂接到新 virbrX 设备的 Guest 的流量。
9.1.2.1.2 启动虚拟网络 #
要启动某个暂时停止的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。要启动虚拟网络,请单击
。
9.1.2.1.3 停止虚拟网络 #
要停止活动的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。选择要停止的虚拟网络,然后单击
。
9.1.2.1.4 删除虚拟网络 #
要删除 VM 主机服务器中的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。选择要删除的虚拟网络,然后单击
。
9.1.2.1.5 使用 nsswitch
获取 NAT 网络的 IP 地址(在 KVM 中) #
在 VM 主机服务器上,安装用来为 libvirt 提供 NSS 支持的 libvirt-nss:
>
sudo
zypper in libvirt-nss将
libvirt
添加到/etc/nsswitch.conf
:... hosts: files libvirt mdns_minimal [NOTFOUND=return] dns ...
如果 NSCD 正在运行,请将其重启动:
>
sudo
systemctl restart nscd
现在,您可以从主机按名称访问 Guest 系统了。
NSS 模块的功能有限。它会读取 /var/lib/libvirt/dnsmasq/*.status
文件,以在描述 dnsmasq
所提供的每个租约的 JSON 记录中查找主机名和对应的 IP 地址。只能使用受 dnsmasq
支持且由 libvirt 管理的桥接网络在这些 VM 主机服务器上执行主机名转换。
9.1.2.2 使用 virsh
管理虚拟网络 #
可以使用 virsh
命令行工具来管理 libvirt
提供的虚拟网络。要查看所有与网络相关的 virsh
命令,请运行以下命令
>
sudo
virsh help network Networking (help keyword 'network'): net-autostart autostart a network net-create create a network from an XML file net-define define (but don't start) a network from an XML file net-destroy destroy (stop) a network net-dumpxml network information in XML net-edit edit XML configuration for a network net-event Network Events net-info network information net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine an inactive network net-update update parts of an existing network's configuration net-uuid convert a network name to network UUID
要查看特定 virsh
命令的简要帮助信息,请运行 virsh help
VIRSH_COMMAND
:
>
sudo
virsh help net-create NAME net-create - create a network from an XML file SYNOPSIS net-create <file> DESCRIPTION Create a network. OPTIONS [--file] <string> file containing an XML network description
9.1.2.2.1 创建网络 #
要创建新的运行中虚拟网络,请运行以下命令
>
sudo
virsh net-create VNET_DEFINITION.xml
VNET_DEFINITION.xml XML 文件包含 libvirt
接受的虚拟网络的定义。
要定义新虚拟网络但不激活它,请运行以下命令
>
sudo
virsh net-define VNET_DEFINITION.xml
以下示例说明了不同类型的虚拟网络的定义。
下面的配置允许进行 VM Guest 传出连接(如果 VM 主机服务器上提供此功能)。当没有 VM 主机服务器网络时,此配置可让 Guest 互相直接通讯。
<network> <name>vnet_nated</name>1 <bridge name="virbr1"/>2 <forward mode="nat"/>3 <ip address="192.168.122.1" netmask="255.255.255.0">4 <dhcp> <range start="192.168.122.2" end="192.168.122.254"/>5 <host mac="52:54:00:c7:92:da" name="host1.testing.com" \ ip="192.168.1.101"/>6 <host mac="52:54:00:c7:92:db" name="host2.testing.com" \ ip="192.168.1.102"/> <host mac="52:54:00:c7:92:dc" name="host3.testing.com" \ ip="192.168.1.103"/> </dhcp> </ip> </network>
新虚拟网络的名称。 | |
用于构造虚拟网络的网桥设备的名称。定义 <forward> 模式为 | |
包含 <forward> 元素表示该虚拟网络将连接到物理 LAN。 | |
网桥的 IP 地址和网络掩码。 | |
为虚拟网络启用 DHCP 服务器,并提供 | |
可选的 <host> 元素指定内置 DHCP 服务器要为其分配名称和预定义 IP 地址的主机。任何 IPv4 host 元素都必须指定以下设置:要为其指派给定名称的主机的 MAC 地址、要指派到该主机的 IP,以及 DHCP 服务器要为该主机分配的名称。IPv6 host 元素与 IPv4 略有不同,它没有 |
下面的配置会在不应用任何 NAT 的情况下将流量从虚拟网络路由到 LAN。必须在 VM 主机服务器网络上的路由器的路由表中预定义 IP 地址范围。
<network>
<name>vnet_routed</name>
<bridge name="virbr1"/>
<forward mode="route" dev="eth1"/>1
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254"/>
</dhcp>
</ip>
</network>
Guest 流量只能通过 VM 主机服务器上的 |
此配置提供隔离的专用网络。Guest 可以相互通讯以及与 VM 主机服务器通讯,但无法访问 LAN 上的任何其他计算机,因为 XML 说明中没有 <forward> 元素。
<network> <name>vnet_isolated</name> <bridge name="virbr3"/> <ip address="192.168.152.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.152.2" end="192.168.152.254"/> </dhcp> </ip> </network>
此配置说明如何使用 VM 主机服务器的现有网桥 br0
。VM Guest 直接连接到物理网络。其 IP 地址全部都在物理网络的子网中,并且传入和传出连接不存在任何限制。
<network> <name>host-bridge</name> <forward mode="bridge"/> <bridge name="br0"/> </network>
9.1.2.2.2 列出网络 #
要列出 libvirt
可用的所有虚拟网络,请运行以下命令:
>
sudo
virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- crowbar active yes yes vnet_nated active yes yes vnet_routed active yes yes vnet_isolated inactive yes yes
要列出可用域,请运行以下命令:
>
sudo
virsh list Id Name State ---------------------------------------------------- 1 nated_sles12sp3 running ...
要获取运行中域的接口列表,请运行 domifaddr DOMAIN
,或选择性地指定接口,以在输出中仅列出此接口。默认情况下,会额外输出接口的 IP 和 MAC 地址:
>
sudo
virsh domifaddr nated_sles12sp3 --interface vnet0 --source lease Name MAC address Protocol Address ------------------------------------------------------------------------------- vnet0 52:54:00:9e:0d:2b ipv6 fd00:dead:beef:55::140/64 - - ipv4 192.168.100.168/24
要列显与指定域关联的所有虚拟接口的简要信息,请运行以下命令:
>
sudo
virsh domiflist nated_sles12sp3 Interface Type Source Model MAC --------------------------------------------------------- vnet0 network vnet_nated virtio 52:54:00:9e:0d:2b
9.1.2.2.3 获取有关网络的细节 #
要获取有关网络的详细信息,请运行以下命令:
>
sudo
virsh net-info vnet_routed Name: vnet_routed UUID: 756b48ff-d0c6-4c0a-804c-86c4c832a498 Active: yes Persistent: yes Autostart: yes Bridge: virbr5
9.1.2.2.4 启动网络 #
要启动某个已定义的非活动网络,请使用以下命令查找其名称(或唯一标识符,即 UUID):
>
sudo
virsh net-list --inactive Name State Autostart Persistent ---------------------------------------------------------- vnet_isolated inactive yes yes
然后运行:
>
sudo
virsh net-start vnet_isolated Network vnet_isolated started
9.1.2.2.5 停止网络 #
要停止某个活动的网络,请使用以下命令查找其名称(或唯一标识符,即 UUID):
>
sudo
virsh net-list --inactive Name State Autostart Persistent ---------------------------------------------------------- vnet_isolated active yes yes
然后运行:
>
sudo
virsh net-destroy vnet_isolated Network vnet_isolated destroyed
9.1.2.2.6 去除网络 #
要从 VM 主机服务器中永久去除某个非活动网络的定义,请运行以下命令:
>
sudo
virsh net-undefine vnet_isolated Network vnet_isolated has been undefined
9.2 配置存储池 #
在 VM 主机服务器本身上管理 VM Guest 时,您可以访问 VM 主机服务器的整个文件系统,以挂接或创建虚拟硬盘,或将现有映像挂接到 VM Guest。但通过远程主机管理 VM Guest 时无法做到这些。出于此原因,libvirt
支持可从远程计算机访问的所谓“存储池”。
如果希望能够从远程客户端访问 VM 主机服务器上的 CD/DVD ISO 映像,需要将这些映像也放在存储池中。
libvirt
可识别两种不同类型的存储资源:卷和池。
- 存储卷
存储卷是可指派到 Guest 的存储设备 — 虚拟磁盘或 CD/DVD/软盘映像。从物理上讲,它可以是块设备(例如分区或逻辑卷),也可以是 VM 主机服务器上的某个文件。
- 存储池
存储池是 VM 主机服务器上可用于存储卷的存储资源,类似于台式计算机的网络存储空间。从物理上而言,它可分为以下类型之一:
- 文件系统目录 ( )
用于存放映像文件的目录。文件可以是支持的磁盘格式之一(raw 或 qcow2),也可以是 ISO 映像。
- 物理磁盘设备 ( )
使用整个物理磁盘作为存储空间。系统会为添加到池的每个卷创建一个分区。
- 预格式化的块设备 ( )
指定要使用的分区,该分区与文件系统目录池(用于存放映像文件的目录)的使用方式相同。唯一的区别在于,使用文件系统目录时,
libvirt
会负责挂载设备。- iSCSI 目标 (iscsi)
在 iSCSI 目标上设置池。您需要先登录卷一次才能将卷用于
libvirt
。使用 YaST 来检测和登录卷,有关细节,请参见储存管理指南。不支持在 iSCSI 池中创建卷;每个现有逻辑单元号 (LUN) 都代表一个卷。每个卷/LUN 还需要一个有效的(空)分区表或磁盘标签,这样您才能使用该卷。如果没有分区表或磁盘标签,请使用fdisk
添加:>
sudo
fdisk -cu /dev/disk/by-path/ip-192.168.2.100:3260-iscsi-iqn.2010-10.com.example:[...]-lun-2 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xc15cdc4e. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.- LVM 卷组 (logical)
使用 LVM 卷组作为池。您可以使用预定义的卷组,或者通过指定要使用的设备来创建组。存储卷会创建为卷上的分区。
警告:删除基于 LVM 的池在存储管理器中删除基于 LVM 的池时,也会删除卷组。这会导致池中存储的所有数据丢失且不可恢复。
- 多路径设备 ( )
目前,多路径支持仅限于向 Guest 指派现有设备。不支持从
libvirt
内部创建卷或配置多路径。- 网络导出的目录 ( )
指定要使用的网络目录,该网络目录与文件系统目录池(用于存放映像文件的目录)的使用方式相同。唯一的区别在于,使用文件系统目录时,
libvirt
会负责挂载目录。支持的协议为 NFS。- SCSI 主机适配器 ( )
SCSI 主机适配器的使用方式与 iSCSI 目标基本相同。我们建议使用基于
/dev/disk/by-*
的设备名称,而不要使用/dev/sdX
。后者可能会发生变化(例如,添加或拆除硬盘时)。不支持在 iSCSI 池中创建卷。每个现有 LUN(逻辑单元号)都代表一个卷。
为了避免数据丢失或损坏,请不要尝试使用也用于在 VM 主机服务器上构建存储池的资源,例如 LVM 卷组、iSCSI 目标等。无需从 VM 主机服务器连接到这些资源,也无需在 VM 主机服务器上挂载这些资源 — libvirt
将负责这些事项。
不要在 VM 主机服务器上按标签挂载分区。在某些情况下,分区可能是从 VM Guest 内部使用 VM 主机服务器上的现有名称标记的。
9.2.1 使用 virsh
管理存储 #
也可以使用 virsh
通过命令行管理存储。不过,SUSE 目前不支持创建存储池。因此,本节仅会介绍启动、停止和删除池以及卷管理等功能。
运行 virsh help pool
和 virsh help volume
可分别获取用于管理池和卷的所有 virsh
子命令的列表。
9.2.1.1 列出池和卷 #
执行以下命令可以列出当前处于活动状态的所有池。要同时列出非活动池,请添加选项 --all
:
>
virsh pool-list --details
可以使用 pool-info
子命令获取有关特定池的细节:
>
virsh pool-info POOL
默认情况下,只能按池列出卷。要列出某个池中的所有卷,请输入以下命令。
>
virsh vol-list --details POOL
目前,virsh
不提供任何可显示某个卷是否已由 Guest 使用的工具。下面的过程说明如何列出所有池中当前已被 VM Guest 使用的卷。
将以下内容保存到某个文件(例如 ~/libvirt/guest_storage_list.xsl)来创建一个 XSLT 样式表:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="text()"/> <xsl:strip-space elements="*"/> <xsl:template match="disk"> <xsl:text> </xsl:text> <xsl:value-of select="(source/@file|source/@dev|source/@dir)[1]"/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
在外壳中运行以下命令:假设 Guest 的 XML 定义全部存储在默认位置 (
/etc/libvirt/qemu
)。xsltproc
由软件包libxslt
提供。SSHEET="$HOME/libvirt/guest_storage_list.xsl" cd /etc/libvirt/qemu for FILE in *.xml; do basename $FILE .xml xsltproc $SSHEET $FILE done
9.2.1.2 启动、停止和删除池 #
使用 virsh
pool 子命令来启动、停止或删除池。在以下示例中,请将 POOL 替换为池的名称或其 UUID:
- 停止池
>
virsh pool-destroy POOL注意:池的状态不会影响挂接的卷无论池处于什么状态(
(已停止)或 (已启动)),池中挂接到 VM Guest 的卷都始终可用。池的状态只会影响到能否通过远程管理将卷挂接到 VM Guest。- 删除存储池
>
virsh pool-delete POOL警告:删除存储池请参见警告:删除存储池
- 启动池
>
virsh pool-start POOL- 启用池自动启动功能
>
virsh pool-autostart POOL只有标记为 autostart 的池才会自动在 VM 主机服务器重引导时启动。
- 禁用池自动启动功能
>
virsh pool-autostart POOL --disable
9.2.1.3 将卷添加到存储池 #
virsh
提供了两种将卷添加到存储池的方法:在 XML 定义中使用 vol-create
和 vol-create-from
添加,或者使用 vol-create-as
通过命令行参数添加。SUSE 目前不支持前一种方法,因此本节重点介绍 vol-create-as
子命令。
要将卷添加到现有池,请输入以下命令:
>
virsh vol-create-as POOL1NAME2 12G --format3raw|qcow24 --allocation 4G5
卷要添加到的池的名称 | |
卷的名称 | |
卷的大小,在本示例中为 12 GB。使用后缀 k、M、G、T 来分别表示千字节、兆字节、千兆字节和万亿字节。 | |
卷的格式。SUSE 目前支持 | |
可选的参数。默认情况下,
如果不指定此参数,将生成不包含分配量的稀疏映像文件。要创建非稀疏卷,请使用此参数指定整个映像大小(在本示例中为 |
9.2.1.3.1 克隆现有卷 #
将卷添加到池的另一种方法是克隆现有卷。请始终在原始实例所在的同一个池中创建新实例。
>
virsh vol-clone NAME_EXISTING_VOLUME1NAME_NEW_VOLUME2 --pool POOL3
9.2.1.4 从存储池中删除卷 #
要从池中永久删除某个卷,请使用 vol-delete
子命令:
>
virsh vol-delete NAME --pool POOL
--pool
是可选的。libvirt
会尝试自动查找卷。如果找不到,请指定此参数。
无论卷当前是否已在活动或非活动的 VM Guest 中使用,都将一律被删除。无法恢复已删除的卷。
只能使用过程 9.2 “列出 VM 主机服务器上当前使用的所有存储卷”中所述的方法来检测某个卷是否已由 VM Guest 使用。
9.2.1.5 将卷挂接到 VM Guest #
按照第 9.2.1.3 节 “将卷添加到存储池”中所述创建卷后,可将其挂接到虚拟机并作为硬盘使用:
>
virsh attach-disk DOMAIN SOURCE_IMAGE_FILE TARGET_DISK_DEVICE
例如:
>
virsh attach-disk sles12sp3 /virt/images/example_disk.qcow2 sda2
要检查是否已挂接新磁盘,请检查 virsh dumpxml
命令的结果:
#
virsh dumpxml sles12sp3
[...]
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/virt/images/example_disk.qcow2'/>
<backingStore/>
<target dev='sda2' bus='scsi'/>
<alias name='scsi0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
[...]
9.2.1.5.1 热插入或持久更改 #
可将磁盘挂接到活动和非活动的域。挂接操作由 --live
和 --config
选项控制:
--live
将磁盘热插入到活动域。挂接操作不会保存在域配置中。对非活动域使用
--live
会出错。--config
持久更改域配置。下一次启动域后,挂接的磁盘将可用。
--live
--config
热插入磁盘并将其添加到持久域配置中。
virsh attach-device
virsh attach-device
是 virsh attach-disk
的更通用形式。可以使用此命令将其他类型的设备挂接到域。
9.2.1.6 从 VM Guest 分离卷 #
要从域中分离磁盘,请使用 virsh
detach-disk
:
#
virsh detach-disk DOMAIN TARGET_DISK_DEVICE
例如:
#
virsh detach-disk sles12sp3 sda2
可以按照第 9.2.1.5 节 “将卷挂接到 VM Guest”中所述,使用 --live
和 --config
选项来控制挂接操作。
9.2.2 使用虚拟机管理器管理存储设备 #
虚拟机管理器提供了一个图形界面,即存储管理器,用于管理存储卷和池。要访问存储管理器,请右键单击某个连接并选择
,或者高亮显示某个连接并选择 › 。选择 选项卡。9.2.2.1 添加存储池 #
要添加存储池,请执行以下操作:
单击左下角的
。 对话框即会显示。提供池的
(只能包含字母数字字符以及_
、-
或.
),然后选择一种 。在下面指定所需的细节。具体的值取决于您要创建的池类型。
重要不支持 ZFS 池。
- 类型:
- 类型:
parted
-l
获取所需的格式。/dev/disk/by-*
的设备名称而不是简单的/dev/sdX
,因为后者可能会发生变化(例如,添加或拆除硬盘时)。您需要指定类似整个磁盘而不是磁盘上的分区(如果存在)的路径。
- 类型:
auto
应该不会有问题。/dev/disk/by-*
的设备名称而不是/dev/sdX
,因为后者可能会发生变化(例如,添加或拆除硬盘时)。
- 类型:
通过在 VM 主机服务器上运行以下命令来获取所需的数据:
>
sudo
iscsiadm --mode node此命令将返回采用以下格式的 iSCSI 卷列表。以粗体文本显示的元素是必需的:
IP_ADDRESS:PORT,TPGT TARGET_NAME_(IQN)
/dev/disk/by-path
(默认值)或/dev/disk/by-id
。
- 类型:
- 类型:
- 类型:
- 类型:
- 类型:
/dev/disk/by-path
(默认值)或/dev/disk/by-id
。
注意:文件浏览从远程位置操作时,无法通过单击
使用文件浏览器。单击
以添加存储池。
9.2.2.2 管理存储池 #
您可以通过虚拟机管理器的存储管理器在池中创建或删除卷。您还可以暂时停用或永久删除现有的存储池。SUSE 目前不支持更改池的基本配置。
9.2.2.2.1 启动、停止和删除池 #
存储池的用途是提供 VM 主机服务器上的块设备,远程管理 VM Guest 时,可将这些设备添加到其中。要暂时禁止远程访问某个池,请单击存储管理器左下角的
。停止的池标记为 ,并在列表窗格中灰显。默认情况下,新建的池在 VM 主机服务器 时会自动启动。要启动某个非活动的池并再次使其可从远程位置使用,请单击存储管理器左下角的
。无论池处于什么状态(
(已停止)或 (已启动)),池中挂接到 VM Guest 的卷都始终可用。池的状态只会影响到能否通过远程管理将卷挂接到 VM Guest。要永久禁止访问某个池,请单击存储管理器左下角的
。您只能删除非活动的池。删除某个池不会实际擦除其在 VM 主机服务器上的内容,而只会删除池配置。不过,在删除池时需要额外小心,尤其是删除基于 LVM 卷组的工具时:删除基于本地文件系统目录、本地分区或磁盘的存储池不会影响到这些池中当前挂接到 VM Guest 的卷的可用性。
如果删除 iSCSI、SCSI、LVM 组或网络导出的目录这些类型的池,将无法再从 VM Guest 访问这些池中的卷。尽管卷本身不会被删除,但 VM 主机服务器将不再可以访问这些资源。
创建足够大的新池或者直接从主机系统挂载/访问这些资源时,iSCSI/SCSI 目标或网络导出的目录中的卷将再次可供访问。
删除基于 LVM 组的存储池时,将擦除 LVM 组定义,并且该 LVM 组将不再存在于主机系统上。其配置将不可恢复,并且此池中的所有卷都会丢失。
9.2.2.2.2 将卷添加到存储池 #
借助虚拟机管理器,您可以在所有存储池(多路径、iSCSI 或 SCSI 类型的池除外)中创建卷。这些池中的卷相当于 LUN,无法从 libvirt
内部更改。
可以使用存储管理器创建新卷,或者在将新存储设备添加到 VM Guest 时创建新卷。在以上任一情况下,请从左侧面板中选择一个存储池,然后单击
。指定映像的
并选择映像格式。SUSE 目前仅支持
raw
或qcow2
映像。后一个选项在基于 LVM 组的池中不可用。在
的旁边,指定允许磁盘映像达到的最大大小。除非您使用qcow2
映像,否则还可以设置最初应该分配的 量。如果这两个值不同,将会创建一个按需增长的稀疏映像文件。对于
qcow2
映像,可以使用一个构成基本映像的 (也称为“后备文件”)。这样,新建的qcow2
映像便只会记录对基本映像所做的更改。单击
开始创建卷。
9.2.2.2.3 从存储池中删除卷 #
只能在存储管理器中删除卷:选择相应卷并单击
。单击 确认。即使活动或非活动的 VM Guest 中当前正在使用卷,也能将卷删除。无法恢复已删除的卷。
存储管理器中的
列会指示某个卷是否已由 VM Guest 使用。