跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.5

8 准备虚拟机宿主机 编辑源文件

在安装访客虚拟机之前,您需要准备 VM 主机服务器,以便为访客提供它们运行所需资源。具体来说,您需要配置

  • 网络,以便客户机可以使用宿主机提供的网络连接。

  • 一个存储池,可被宿主机访问,以便客户机可以存储其磁盘镜像。

8.1 配置网络 编辑源文件

有两种常见的网络配置,可以为虚拟机客户机提供网络连接

  • 一个网络桥接。这是默认且推荐的为客户机提供网络连接的方式。

  • 一个虚拟网络,并启用转发。

8.1.1 网络桥接 编辑源文件

网络桥接配置为虚拟机客户机提供了一个二层交换机,根据与端口关联的 MAC 地址在桥接端口之间交换二层以太网数据包。这使得虚拟机客户机可以访问虚拟机宿主服务器的网络的二层。该配置类似于将虚拟机客户机的虚拟以太网电缆连接到与宿主机和其他在宿主机上运行的虚拟机客户机共享的集线器。该配置通常被称为共享物理设备

当配置为 KVM 或 Xen 虚拟机管理程序时,openSUSE Leap 的网络桥接配置是默认配置。当您只想将虚拟机客户机连接到虚拟机宿主服务器的局域网时,它是首选配置。

用于创建网络桥接的工具取决于用于管理虚拟机宿主机上网络连接的服务

  • 如果网络连接由 wicked 管理,请使用 YaST 或命令行创建网络桥接。wicked 是服务器宿主机的默认配置。

  • 如果网络连接由 NetworkManager 管理,请使用 NetworkManager 命令行工具 nmcli 创建网络桥接。NetworkManager 是桌面和笔记本电脑的默认配置。

8.1.1.1 使用 YaST 管理网络桥接 编辑源文件

本节包含使用 YaST 添加或删除网络桥接的步骤。

8.1.1.1.1 添加网络桥接 编辑源文件

要在虚拟机宿主机上添加网络桥接,请按照以下步骤操作

  1. 启动 YaST › 系统 › 网络设置

  2. 激活 概述 选项卡,然后单击 添加

  3. 设备类型 列表中选择 桥接,并在 配置名称 条目中输入桥接设备接口名称。单击 下一步 继续。

  4. 地址 选项卡中,指定网络详细信息,例如 DHCP/静态 IP 地址、子网掩码或主机名。

    仅当也为连接到 DHCP 服务器的桥接分配设备时,使用 动态地址 才有用。

    如果您打算创建一个没有连接到真实网络设备的虚拟桥接,请使用 静态分配的 IP 地址。在这种情况下,最好使用来自私有 IP 地址范围的地址,例如 192.168.0.0/16172.16.0.0/1210.0.0.0/8

    要创建一个仅用作不同客户机之间连接的桥接,而无需连接到宿主机系统,请将 IP 地址设置为 0.0.0.0,将子网掩码设置为 255.255.255.255。网络脚本将此特殊地址视为未设置的 IP 地址。

  5. 激活 桥接设备 选项卡,并激活您想要包含在网络桥接中的网络设备。

  6. 单击 下一步 返回 概述 选项卡,并使用 确定 确认。新的网络桥接现在应该在虚拟机宿主机上处于活动状态。

8.1.1.1.2 删除网络桥接 编辑源文件

要删除现有的网络桥接,请按照以下步骤操作

  1. 启动 YaST › 系统 › 网络设置

  2. 概述 选项卡中的列表中选择要删除的桥接设备。

  3. 使用 删除 删除桥接,并使用 确定 确认。

8.1.1.2 从命令行管理网络桥接 编辑源文件

本节包含使用命令行添加或删除网络桥接的步骤。

8.1.1.2.1 添加网络桥接 编辑源文件

要在虚拟机宿主机上添加新的网络桥接设备,请按照以下步骤操作

  1. root 用户身份登录到您想要创建新网络桥接的虚拟机宿主机。

  2. 为新的桥接选择一个名称——在我们的示例中为 virbr_test——并运行

    # ip link add name VIRBR_TEST type bridge
  3. 检查桥接是否在虚拟机宿主机上创建

    # bridge vlan
    [...]
    virbr_test  1 PVID Egress Untagged

    virbr_test 存在,但未与任何物理网络接口关联。

  4. 启动网络桥接并将网络接口添加到桥接

    # ip link set virbr_test up
    # ip link set eth1 master virbr_test
    Important
    重要:网络接口必须未被使用

    您只能分配尚未被另一个网络桥接使用的网络接口。

  5. 可选地,启用 STP(请参阅 生成树协议

    # bridge link set dev virbr_test cost 4
8.1.1.2.2 删除网络桥接 编辑源文件

要从命令行删除虚拟机宿主机上的现有网络桥接设备,请按照以下步骤操作

  1. root 用户身份登录到您想要删除现有网络桥接的虚拟机宿主机。

  2. 列出现有的网络桥接,以识别要删除的桥接的名称

    # bridge vlan
    [...]
    virbr_test  1 PVID Egress Untagged
  3. 删除桥接

    # ip link delete dev virbr_test

8.1.1.3 使用 nmcli 添加网络桥接 编辑源文件

本节包含使用 NetworkManager 的命令行工具 nmcli 添加网络桥接的步骤。

  1. 列出活动的网络连接

    > sudo nmcli connection show --active
    NAME                   UUID                                  TYPE      DEVICE
    Ethernet connection 1  84ba4c22-0cfe-46b6-87bb-909be6cb1214  ethernet  eth0
  2. 添加名为 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
  3. 可选地,您可以查看桥接设置

    > 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:                           --
  4. 将桥接设备链接到物理以太网设备 eth0

    > sudo nmcli connection add type bridge-slave ifname eth0 master br0
  5. 禁用 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)

8.1.1.4 使用 VLAN 接口 编辑源文件

有时有必要在两个虚拟机宿主机之间或在虚拟机客户机之间创建私有连接。例如,为了将虚拟机客户机迁移到不同网络段的主机。或者,为了创建一个只有虚拟机客户机才能连接的私有桥接(即使它们在不同的虚拟机宿主机系统上运行)。设置 VLAN 网络是一种简单的方法来构建此类连接。

VLAN 接口通常在虚拟机宿主机上设置。它们要么互连不同的虚拟机宿主机系统,要么可以设置为连接到物理接口的虚拟桥接。甚至可以创建一个带有 VLAN 作为物理接口的桥接,该接口在虚拟机宿主机中没有 IP 地址。这样,客户机系统将无法通过此网络访问宿主机。

运行 YaST 模块 系统 › 网络设置。按照以下步骤设置 VLAN 设备

过程 8.1:使用 YaST 设置 VLAN 接口
  1. 单击 添加 以创建新的网络接口。

  2. 硬件对话框 中,选择 设备类型 VLAN

  3. 配置名称 的值更改为您的 VLAN 的 ID。请注意,VLAN ID 1 通常用于管理目的。

  4. 单击 下一步

  5. VLAN 的真实接口 下方选择 VLAN 设备应连接到的接口。如果所需的接口未出现在列表中,请先设置此接口,而无需 IP 地址。

  6. 选择将 IP 地址分配给 VLAN 设备的所需方法。

  7. 单击 下一步 以完成配置。

也可以将 VLAN 接口用作桥接的物理接口。这样可以连接多个仅限虚拟机宿主机的网络,并允许连接到此类网络的虚拟机客户机的实时迁移。

YaST 并不总是允许设置无 IP 地址。但是,这可能是期望的特性,特别是当应连接仅限虚拟机宿主机的网络时。在这种情况下,使用特殊地址 0.0.0.0 和子网掩码 255.255.255.255。系统脚本将此地址视为未设置的 IP 地址。

8.1.2 虚拟网络 编辑源文件

libvirt 管理的虚拟网络类似于桥接网络,但通常没有与虚拟机宿主机网络的二层连接。通过三层转发实现与虚拟机宿主机物理网络的连接,与二层桥接网络相比,这会在虚拟机宿主机上引入额外的包处理。虚拟网络还为虚拟机客户机提供 DHCP 和 DNS 服务。有关 libvirt 虚拟网络的更多信息,请参阅 https://libvirt.org/formatnetwork.html 处的 网络 XML 格式 文档。

openSUSE Leap 上安装的标准 libvirt 已经预配置了一个名为 default 的预定义虚拟网络。它为网络提供 DHCP 和 DNS 服务,以及使用网络地址转换 (NAT) 转发模式与虚拟机宿主机物理网络的连接。虽然它是预定义的,但 default 虚拟网络需要由管理员显式启用。有关 libvirt 支持的转发模式的更多信息,请参阅 https://libvirt.org/formatnetwork.html#elementsConnect 处的 网络 XML 格式 文档的 连接性 部分。

libvirt管理的虚拟网络可以满足各种各样的使用场景,但通常用于具有无线连接或动态/间歇性网络连接的虚拟机宿主机,例如笔记本电脑。当虚拟机宿主机的网络具有有限的IP地址时,虚拟网络也很有用,允许在虚拟网络和虚拟机宿主机网络之间转发数据包。但是,大多数服务器用例更适合网络桥接配置,在这种配置中,虚拟机客户机连接到虚拟机宿主机的局域网。

Warning
警告:启用转发模式

libvirt虚拟网络中启用转发模式,会通过将/proc/sys/net/ipv4/ip_forward/proc/sys/net/ipv6/conf/all/forwarding设置为1来启用虚拟机宿主机上的转发,从而将虚拟机宿主机变成路由器。重启虚拟机宿主机的网络可能会重置这些值并禁用转发。为了避免此行为,请通过编辑/etc/sysctl.conf文件并添加来显式启用虚拟机宿主机上的转发

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

8.1.2.1 使用虚拟机管理器管理虚拟网络 编辑源代码

您可以使用虚拟机管理器定义、配置和操作虚拟网络。

8.1.2.1.1 定义虚拟网络 编辑源代码
  1. 启动虚拟机管理器。在可用连接列表中,右键单击需要配置虚拟网络的连接的名称,然后选择详细信息

  2. 连接详细信息窗口中,单击虚拟网络选项卡。您可以查看当前连接可用的所有虚拟网络的列表。在右侧,有选中虚拟网络的详细信息。

    Connection details
    图 8.1: 连接详细信息
  3. 要添加新的虚拟网络,请单击添加

  4. 为新的虚拟网络指定一个名称。

    Create virtual network
    图 8.2: 创建虚拟网络
  5. 指定网络模式。对于NATRouted类型,您可以指定将网络通信转发到哪个设备。虽然NAT(网络地址转换)重新映射虚拟网络地址空间并允许共享单个IP地址,但Routed会将虚拟网络的数据包转发到虚拟机宿主机的物理网络,而无需进行转换。

  6. 如果您需要IPv4网络,请激活启用IPv4并指定IPv4网络地址。如果您需要DHCP服务器,请激活启用DHCPv4并指定可分配的IP地址范围。

  7. 如果您需要IPv6网络,请激活启用IPv6并指定IPv6网络地址。如果您需要DHCP服务器,请激活启用DHCPv6并指定可分配的IP地址范围。

  8. 要指定与虚拟网络名称不同的域名,请在DNS域名下选择自定义并在此处输入它。

  9. 单击完成以创建新的虚拟网络。在虚拟机宿主机上,将提供一个新的虚拟网络桥接virbrX,它对应于新创建的虚拟网络。您可以使用bridge link进行检查。libvirt会自动添加iptables规则以允许进出连接到新virbrX设备的流量。

8.1.2.1.2 启动虚拟网络 编辑源代码

要启动一个暂时停止的虚拟网络,请执行以下步骤

  1. 启动虚拟机管理器。在可用连接列表中,右键单击需要配置虚拟网络的连接的名称,然后选择详细信息

  2. 连接详细信息窗口中,单击虚拟网络选项卡。您可以查看当前连接可用的所有虚拟网络的列表。

  3. 要启动虚拟网络,请单击启动

8.1.2.1.3 停止虚拟网络 编辑源代码

要停止一个活动的虚拟网络,请执行以下步骤

  1. 启动虚拟机管理器。在可用连接列表中,右键单击需要配置虚拟网络的连接的名称,然后选择详细信息

  2. 连接详细信息窗口中,单击虚拟网络选项卡。您可以查看当前连接可用的所有虚拟网络的列表。

  3. 选择要停止的虚拟网络,然后单击停止

8.1.2.1.4 删除虚拟网络 编辑源代码

要从虚拟机宿主机删除虚拟网络,请执行以下步骤

  1. 启动虚拟机管理器。在可用连接列表中,右键单击需要配置虚拟网络的连接的名称,然后选择详细信息

  2. 连接详细信息窗口中,单击虚拟网络选项卡。您可以查看当前连接可用的所有虚拟网络的列表。

  3. 选择要删除的虚拟网络,然后单击删除

8.1.2.1.5 使用nsswitch获取NAT网络的IP地址(在KVM中) 编辑源代码
  • 在虚拟机宿主机上,安装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

现在您可以从主机按名称访问客户机系统。

NSS模块具有有限的功能。它读取/var/lib/libvirt/dnsmasq/*.status文件以查找主机名和相应的IP地址,这些地址记录在JSON记录中,描述了dnsmasq提供的每个租约。主机名转换只能在那些使用由dnsmasq支持的桥接网络作为后端的虚拟机宿主机上完成。

8.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
8.1.2.2.1 创建网络 编辑源代码

要创建一个新的正在运行的虚拟网络,请运行

> sudo virsh net-create VNET_DEFINITION.xml

VNET_DEFINITION.xml XML文件包含libvirt接受的虚拟网络的定义。

要定义一个新的虚拟网络而不激活它,请运行

> sudo virsh net-define VNET_DEFINITION.xml

以下示例说明了不同类型虚拟网络的定义。

示例 8.1: 基于NAT的网络

以下配置允许虚拟机客户机在虚拟机宿主机上可用时进行传出连接。如果没有虚拟机宿主机网络,它允许客户机直接相互通信。

<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>

1

新虚拟网络的名称。

2

用于构建虚拟网络的桥接设备的名称。在定义具有"nat""route"模式(或没有元素的情况下隔离的网络)的"forward"模式的新网络时,如果未提供,libvirt会自动为桥接设备生成一个唯一的名称。

3

包含元素表示虚拟网络连接到物理LAN。 mode属性指定转发方法。最常见的模式是"nat"(网络地址转换,默认)、"route"(直接转发到物理网络,无地址转换)和"bridge"(在libvirt外部配置的网络桥接)。如果未指定元素,则虚拟网络将与其他网络隔离。有关完整的转发模式列表,请参见https://libvirt.org/formatnetwork.html#elementsConnect

4

网络桥接的IP地址和子网掩码。

5

启用虚拟网络的DHCP服务器,提供从指定的startend属性范围内的IP地址。

6

可选的元素指定主机,这些主机被赋予名称和预定义的IP地址,由内置的DHCP服务器提供。任何IPv4主机元素都必须指定以下内容:要分配给定名称的host的MAC地址、要分配给该host的IP以及DHCP服务器要赋予该host的名称。IPv6主机元素与IPv4主机元素略有不同:由于MAC地址在IPv6中没有定义的含义,因此没有mac属性。相反,name属性用于标识要分配IPv6地址的host。对于DHCPv6,name是客户端发送给服务器的客户端host的普通名称。可以使用这种方法分配特定的IP地址,而不是IPv4的mac属性。

示例 8.2: Routed网络

以下配置将虚拟网络上的流量路由到LAN,而无需应用任何NAT。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>

1

客户机流量可能只能通过虚拟机宿主机上的eth1网络设备发出。

示例 8.3: 隔离网络

此配置提供了一个隔离的专用网络。客户机可以相互通信,也可以与虚拟机宿主机通信,但无法访问LAN上的任何其他机器,因为XML描述中缺少元素。

<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>
示例 8.4: 使用虚拟机宿主机上的现有桥接

此配置显示了如何使用虚拟机宿主机现有的网络桥接br0。虚拟机客户机直接连接到物理网络。它们的IP地址都在物理网络的子网上,并且没有传入或传出连接的限制。

<network>
        <name>host-bridge</name>
        <forward mode="bridge"/>
        <bridge name="br0"/>
</network>
8.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
8.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
8.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
8.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
8.1.2.2.6 删除网络 编辑源代码

要永久从虚拟机宿主机删除非活动网络的定义,请运行

> sudo virsh net-undefine vnet_isolated
Network vnet_isolated has been undefined

8.2 配置存储池 编辑源代码

当在虚拟机宿主机本身上管理虚拟机客户机时,您可以访问虚拟机宿主机完整的的文件系统,以附加或创建虚拟硬盘,或将现有的镜像附加到虚拟机客户机。但是,当从远程主机管理虚拟机客户机时,这是不可能的。因此,libvirt支持所谓的““存储池””,这些存储池可以从远程机器访问。

Tip
提示:CD/DVD ISO镜像

为了能够从远程客户端访问虚拟机宿主机上的CD/DVD ISO镜像,它们也需要放置在存储池中。

libvirt知道两种不同类型的存储:卷和池。

存储卷

存储卷是可以分配给客户机的存储设备——虚拟磁盘或CD/DVD/软盘镜像。从物理上讲,它可以是块设备——例如,分区或逻辑卷——或虚拟机宿主机上的文件。

存储池

存储池是虚拟机宿主机上的存储资源,可用于存储卷,类似于桌面机器的网络存储。从物理上讲,它可以是以下类型之一:

文件系统目录(dir

用于托管镜像文件的目录。这些文件可以是受支持的磁盘格式之一(raw或qcow2),或ISO镜像。

物理磁盘设备(disk

将整个物理磁盘用作存储。为添加到池的每个卷创建一个分区。

预格式化的块设备(fs

指定要以与文件系统目录池(用于托管镜像文件的目录)相同的方式使用的分区。使用文件系统目录与使用文件系统目录的唯一区别在于,libvirt负责挂载设备。

iSCSI目标(iscsi)

在 iSCSI 目标上设置一个池。在使用 libvirt 之前,您需要先登录到卷一次。使用 YaST iSCSI Initiator 检测并登录到卷。不支持在 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 卷组(逻辑)

使用 LVM 卷组作为池。您可以选择使用预定义的卷组,或者通过指定要使用的设备来创建组。存储卷作为卷上的分区创建。

Warning
警告:删除基于 LVM 的池

在存储管理器中删除基于 LVM 的池时,卷组也会被删除。这将导致池上存储的所有数据无法恢复地丢失。

多路径设备 (mpath)

目前,多路径支持仅限于将现有设备分配给客户机。不支持从 libvirt 内部创建卷或配置多路径。

网络导出目录 (netfs)

指定一个网络目录,其使用方式与文件系统目录池(用于托管镜像文件的目录)相同。与使用文件系统目录的唯一区别在于,libvirt 会负责挂载该目录。支持的协议是 NFS。

SCSI 主机适配器 (scsi)

以与 iSCSI 目标几乎相同的方式使用 SCSI 主机适配器。我们建议使用来自 /dev/disk/by-* 的设备名称,而不是 /dev/sdX。后者可能会更改(例如,在添加或删除硬盘时)。不支持在 iSCSI 池上创建卷。相反,每个现有的 LUN(逻辑单元号)代表一个卷。

Warning
警告:安全注意事项

为避免数据丢失或数据损坏,请勿尝试使用也用于构建 VM 主服务器上存储池的资源,例如 LVM 卷组、iSCSI 目标等。无需从 VM 主服务器连接到这些资源,或将它们挂载到 VM 主服务器上——libvirt 会负责处理这些操作。

请勿按标签挂载 VM 主服务器上的分区。在某些情况下,分区可能会从 VM 客户机内部以 VM 主服务器上存在的名称进行标记。

8.2.1 使用 virsh 管理存储 编辑源代码

也可以使用 virsh 从命令行管理存储。但是,SUSE 目前不支持创建存储池。因此,本节仅限于记录诸如启动、停止和删除池以及卷管理之类的功能。

可以通过运行 virsh help poolvirsh help volume 分别获取用于管理池和卷的所有 virsh 子命令的列表。

8.2.1.1 列出池和卷 编辑源代码

通过执行以下命令列出当前活动的所有池。要列出非活动池,请添加选项 --all

> virsh pool-list --details

可以使用 pool-info 子命令获取有关特定池的详细信息

> virsh pool-info POOL

默认情况下,卷只能按池列出。要列出池中的所有卷,请输入以下命令。

> virsh vol-list --details POOL

目前 virsh 没有工具可以显示卷是否被客户机使用。以下过程描述了一种列出当前被 VM 客户机使用的所有池中卷的方法。

过程 8.2: 列出 VM 主服务器上当前使用的所有存储卷
  1. 通过将以下内容保存到文件(例如,~/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>&#10;</xsl:text>
      </xsl:template>
    </xsl:stylesheet>
  2. 在 shell 中运行以下命令。假定客户机的 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

8.2.1.2 启动、停止和删除池 编辑源代码

使用 virsh 池子命令来启动、停止或删除池。在以下示例中,将 POOL 替换为池的名称或其 UUID

停止池
> virsh pool-destroy POOL
Note
注意:池的状态不影响附加的卷

附加到 VM 客户机的池中的卷始终可用,无论池的状态如何(Active(停止)或 Inactive(启动))。池的状态仅影响通过远程管理将卷附加到 VM 客户机的能力。

删除池
> virsh pool-delete POOL
Warning
警告:删除存储池

请参阅 警告:删除存储池

启动池
> virsh pool-start POOL
启用池的自动启动
> virsh pool-autostart POOL

只有标记为自动启动的池才会在 VM 主服务器重新启动时自动启动。

禁用池的自动启动
> virsh pool-autostart POOL --disable

8.2.1.3 将卷添加到存储池 编辑源代码

virsh 提供两种将卷添加到存储池的方法:使用带有 vol-createvol-create-from 的 XML 定义,或使用带有 vol-create-as 的命令行参数。前两种方法目前不被 SUSE 支持,因此本节重点介绍子命令 vol-create-as

要将卷添加到现有池,请输入以下命令

> virsh vol-create-as POOL1NAME2 12G --format3raw|qcow24 --allocation 4G5

1

要将卷添加到的池的名称

2

卷的名称

3

镜像的大小,在本例中为 12 千兆字节。使用后缀 k、M、G、T 表示千字节、兆字节、千兆字节和太字节。

4

卷的格式。SUSE 当前支持 rawqcow2

5

可选参数。默认情况下,virsh 创建一个按需增长的稀疏镜像文件。使用此参数指定应分配的空间量(本例中为 4 千兆字节)。使用后缀 k、M、G、T 表示千字节、兆字节、千兆字节和太字节。

如果不指定此参数,则将生成一个没有分配的稀疏镜像文件。要创建非稀疏卷,请使用此参数指定整个镜像大小(在本例中将为 12G)。

8.2.1.3.1 克隆现有卷 编辑源代码

将卷添加到池的另一种方法是克隆现有卷。新实例始终创建在与原始卷相同的池中。

> virsh vol-clone NAME_EXISTING_VOLUME1NAME_NEW_VOLUME2 --pool POOL3

1

应克隆的现有卷的名称

2

新卷的名称

3

可选参数。libvirt 尝试自动找到现有卷。如果失败,请指定此参数。

8.2.1.4 从存储池中删除卷 编辑源代码

要永久从池中删除卷,请使用子命令 vol-delete

> virsh vol-delete NAME --pool POOL

--pool 是可选的。libvirt 尝试自动找到卷。如果失败,请指定此参数。

Warning
警告:删除卷时没有检查

无论卷当前是否在活动或非活动 VM 客户机中使用,都会删除卷。无法恢复已删除的卷。

只能使用 过程 8.2,“列出 VM 主服务器上当前使用的所有存储卷” 中描述的方法检测卷是否被 VM 客户机使用。

8.2.1.5 将卷附加到 VM 客户机 编辑源代码

在按照 第 8.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>
[...]
8.2.1.5.1 热插拔或持久更改 编辑源代码

您可以将磁盘附加到活动和非活动域。附件由 --live--config 选项控制

--live

将磁盘热插拔到活动域。附件未保存在域配置中。在非活动域上使用 --live 是一个错误。

--config

持久更改域配置。然后,在下一次域启动后,将提供附加的磁盘。

--live--config

热插拔磁盘并将其添加到持久域配置。

Tip
提示:virsh attach-device

virsh attach-devicevirsh attach-disk 的更通用的形式。您可以使用它将其他类型的设备附加到域。

8.2.1.6 从 VM 客户机分离卷 编辑源代码

要从域分离磁盘,请使用 virsh detach-disk

# virsh detach-disk DOMAIN TARGET_DISK_DEVICE

例如

# virsh detach-disk sles12sp3 sda2

可以使用 --live--config 选项来控制附件,如 第 8.2.1.5 节,“将卷附加到 VM 客户机” 中所述。

8.2.2 使用虚拟机管理器管理存储 编辑源代码

虚拟机管理器提供了一个图形界面——存储管理器——来管理存储卷和池。要访问它,请右键单击连接并选择 Details,或突出显示连接并选择 Edit › Connection Details。选择 Storage 选项卡。

8.2.2.1 添加存储池 编辑源代码

要添加存储池,请按以下步骤操作

  1. 单击左下角的 Add。对话框 Add a New Storage Pool 出现。

  2. 提供池的 Name(仅包含字母数字字符和 _-.),并选择 Type

  3. 下面指定所需详细信息。它们取决于您创建的池的类型。

    Important
    重要提示

    不支持 ZFS 池。

    类型 dir
    • Target Path:指定现有的目录。

    类型 disk
    • Format:设备分区表的格式。使用 auto 通常可以正常工作。如果不行,请通过在 VM 主服务器上运行命令 parted -l 获取所需的格式。

    • Source Path:设备的路径。建议使用来自 /dev/disk/by-* 的设备名称,而不是简单的 /dev/sdX,因为后者可能会更改(例如,在添加或删除硬盘时)。您需要指定类似于整个磁盘的路径,而不是磁盘上的分区(如果存在)。

    类型 fs
    • Target Path:VM 主服务器文件系统上的挂载点。

    • Format: 设备的 文件系统格式。默认值 auto 应该可以工作。

    • 源路径: 设备文件的路径。建议使用 /dev/disk/by-* 中的设备名称,而不是 /dev/sdX,因为后者可能会改变(例如,在添加或删除硬盘时)。

    类型 iscsi

    在 VM 主机服务器上运行以下命令以获取必要的数据

    > sudo iscsiadm --mode node

    它会返回一个 iSCSI 卷的列表,格式如下。加粗文本中的元素是必需的

    IP_ADDRESS:PORT,TPGT TARGET_NAME_(IQN)
    • 目标路径: 包含设备文件的目录。使用 /dev/disk/by-path(默认)或 /dev/disk/by-id

    • 主机名: iSCSI 服务器的主机名或 IP 地址。

    • 源 IQN: iSCSI 目标名称(iSCSI 认证名称)。

    • 发起者 IQN: iSCSI 发起者名称。

    类型 logical
    • 卷组名称: 指定现有卷组的设备路径。

    类型 mpath
    • 目标路径: 目前,多路径支持仅限于使所有多路径设备可用。因此,在此处指定任意字符串。路径是必需的,否则 XML 解析器将失败。

    类型 netfs
    • Target Path:VM 主服务器文件系统上的挂载点。

    • 主机名: 导出网络文件系统的服务器的 IP 地址或主机名。

    • 源路径: 服务器上正在导出的目录。

    类型 rbd
    • 主机名: 具有导出 RADOS 块设备的服务器的主机名。

    • 源名称: 服务器上 RADOS 块设备的名称。

    类型 scsi
    • 目标路径: 包含设备文件的目录。使用 /dev/disk/by-path(默认)或 /dev/disk/by-id

    • 源路径: SCSI 适配器的名称。

    Note
    注意:文件浏览

    远程操作时,无法通过单击 浏览 使用文件浏览器。

  4. 单击 完成 以添加存储池。

8.2.2.2 管理存储池 编辑源文件

虚拟机器管理器存储管理器允许您在池中创建或删除卷。您还可以临时停用或永久删除现有的存储池。目前,SUSE 不支持更改池的基本配置。

8.2.2.2.1 启动、停止和删除池 编辑源文件

存储池的目的是提供位于 VM 主机服务器上的块设备,这些设备可以在从远程管理 VM 来宾时添加到 VM 来宾。要使池暂时从远程不可访问,请单击存储管理器左下角的 停止。停止的池用 状态:非活动 标记,并在列表窗格中以灰色显示。默认情况下,新创建的池会在 VM 主机服务器 启动 时自动启动。

要启动非活动池并使其再次从远程可用,请单击存储管理器左下角的 启动

Note
注意:池的状态不影响附加的卷

附加到 VM 客户机的池中的卷始终可用,无论池的状态如何(Active(停止)或 Inactive(启动))。池的状态仅影响通过远程管理将卷附加到 VM 客户机的能力。

要永久使池不可访问,请单击存储管理器左下角的 删除。只能删除非活动池。删除池不会物理擦除 VM 主机服务器上的内容,只会删除池配置。但是,在删除池时,尤其是在删除基于 LVM 卷组的工具时,需要格外小心

Warning
警告:删除存储池

删除基于 本地 文件系统目录、本地分区或磁盘的存储池对当前附加到 VM 来宾的池中的卷的可用性没有影响。

位于 iSCSI、SCSI、LVM 组或网络导出目录类型的池中的卷在删除池时将从 VM 来宾中不可访问。虽然卷本身不会被删除,但 VM 主机服务器将无法再访问这些资源。

当创建适当的新池或从主机系统直接挂载/访问这些资源时,iSCSI/SCSI 目标或网络导出目录上的卷将再次可访问。

删除基于 LVM 组的存储池时,将擦除 LVM 组定义,并且 LVM 组不再存在于主机系统上。配置无法恢复,并且此池中的所有卷都将丢失。

8.2.2.2.2 将卷添加到存储池 编辑源文件

虚拟机器管理器允许您在所有存储池中创建卷,但多路径、iSCSI 或 SCSI 类型的池除外。这些池中的卷等同于 LUN,无法从 libvirt 内部更改。

  1. 可以使用存储管理器或在将新存储设备添加到 VM 来宾时创建新卷。在任何一种情况下,从左侧面板选择一个存储池,然后单击 创建新卷

  2. 为镜像指定一个 名称,并选择一个镜像格式。

    SUSE 目前仅支持 rawqcow2 镜像。后者选项在基于 LVM 卷组的池中不可用。

    最大容量 旁边,指定磁盘镜像允许达到的最大大小。除非您正在使用 qcow2 镜像,否则还可以为最初应分配的 分配 设置一个量。如果这两个值不同,则会创建一个稀疏镜像文件,该文件会按需增长。

    对于 qcow2 镜像,可以使用 备份存储(也称为 备份文件),它构成一个基本镜像。新创建的 qcow2 镜像然后仅记录对基本镜像所做的更改。

  3. 单击 完成 以启动卷创建。

8.2.2.2.3 从存储池中删除卷 编辑源文件

只能从存储管理器中删除卷,方法是选择一个卷并单击 删除卷。使用 确认。

Warning
警告:即使在使用中也可以删除卷

即使卷当前正在活动或非活动的 VM 来宾中使用,也可以删除它们。无法恢复已删除的卷。

卷是否被 VM 来宾使用在存储管理器中的 由...使用 列中指示。

打印此页面