蚊章汇 - KVM
type: channel
link: https://linuxcn.bwsl.wang/tag/KVM/
items: 如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹
items: 如何在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM
items: Ubuntu 22.04 之 KVM 安装手札
items: 在 Ubuntu 18.04 LTS 上使用 KVM 配置无头虚拟化服务器
items: 如何在 Ubuntu 18.04 服务器上安装和配置 KVM
items: 在 KVM 中测试 IPv6 网络：第 2 部分
items: 如何使用 virsh 命令创建、还原和删除 KVM 虚拟机快照
items: 在 KVM 中测试 IPv6 网络（第 1 部分）
items: 如何在 Ubuntu Linux 上使用 KVM 云镜像
items: 如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM

如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹
type: item
date: 2023-07-22T23:59:00+08:00
description: 在本指南中，你将了解如何在 Linux 主机（例如使用 KVM 的 Fedora、Ubuntu 或 Linux Mint）下运行的 Windows 客户机之间共享文件夹。virt-manager 应用（带有 libvirt）和软件包提供了一组灵活的工具来管理 Linux 中的虚拟机。它是自由开源的，用于 KVM 虚拟机和其他虚拟机管理程序。在上一篇文章中，我解释了 如何在 Linux 客户机和 Linux 主机之间共享文件夹。然而，当你尝试使用 Windows 客户机和 Linux 主机创建共享文件夹时，这是一个有点困难和复杂的过程。因为两种操作系统的工作方式不同，需要进行大量配置。按照下面提到的说明在 Windows 客户机和 Linux 主机之间共享文件夹。关于 virtiofs 的说明共享文件和文件夹由名为 virtiofs 的 libvirt 共享文件系统提供支持。它提供了访问主机上目录树的所有功能和参数。由于大多数 virt-manager 虚拟机配置都会转换为 XML，因此共享文件/文件夹也可以由 XML 文件指定。注意：如果你正在寻求在两台 Linux 计算机（客户机和主机）之间使用 KVM 进行文件共享，请 阅读此文。使用 KVM 在 Windows 客户机和 Linux 主机之间共享文件夹以下说明假设你已在任何 Linux 主机的 virt-manager 中安装了 Windows。如果没有，你可以阅读有关如何在 Linux 中安装 Windows 的完整指南。在 virt-manager 中设置挂载标签首先，确保你的客户虚拟机已关闭。从 virt-manager GUI 中，选择虚拟机并单击“ 打开 Open ”以调出控制台设置。单击工具栏中显示虚拟硬件详细信息的图标。然后单击左侧面板上的“ 内存 Memory ”。选择选项“ 启用共享内存 Enable shared memory ”。单击“ 应用 Apply ”。确保 XML 在 XML 选项卡中显示 <access mode="shared"/>，如下所示。<memoryBacking> <access mode="shared"/> </memoryBacking> 单击底部的“ 添加硬件 Add hardware ”。从添加新硬件窗口的左侧面板中选择“ 文件系统 Filesystem ”。然后在详细信息选项卡中选择 “ 驱动 Driver ” 为 “virtiofs”。单击“ 浏览 browse > 浏览本地 browse local ”并从 Linux 系统中选择主机路径。在“ 目标路径 Target path ”中，输入你想要的任何名称。它只是一个文件标签，将在挂载过程中使用。目标路径中的此名称将作为 Windows 中的驱动器挂载，即资源管理器中的我的电脑。我已添加 “linux\_pictures” 作为目标挂载标签。因此，如果我想访问图片文件夹（/home/debugpoint/Pictures），示例设置可能如下：单击“ 完成 Finish ”。上述配置的 XML 设置如下。你可以在 XML 选项卡中找到它。<filesystem type="mount" accessmode="passthrough"> <driver type="virtiofs"/> <target dir="linux_pictures"/> </filesystem> 在 virt-manager 主窗口中，右键单击 Windows 虚拟机，然后单击“ 运行 Run ”启动虚拟机。如果未显示虚拟机，请单击“显示图形控制台”（工具栏中的监视器图标）。设置 WinFSP – 适用于 Windows 的 FUSE确保 Windows 虚拟机（客户机）正在运行。首先，我们需要安装 WinFSP（Windows File System Proxy）– FUSE for Windows。这使你能够毫无困难地挂载任何类 UNIX 文件系统。从客户 Windows 计算机打开 WinFSP 的 GitHub 页面。下载 WinFSP 安装程序下载 WinFSP .msi 安装程序。在 Windows 虚拟机上安装软件包。安装软件包时请确保选择 “Core”。完成安装。创建 VirtIO-FS 服务进入 stable-virtio 文件夹，从以下地址下载 virtio-win-guest-tools.exe。下载 virtio-win-guest-tools在 Windows 虚拟机上安装软件包。安装完成后，重启 Windows 虚拟机。重启后，在开始菜单中搜索打开“设备管理器”。进入系统设备并查找 “VirtIO FS 设备”。它应该被识别并且驱动程序应该由 Red Hat…

如何在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM
type: item
date: 2023-05-25T23:59:00+08:00
description: 在本指南中，我们演示了如何在 Rocky Linux 9 / Alma Linux 9 上安装 KVM。KVM 是 内核虚拟机 Kernel Virtualization Machine 的简称，是一个为 Linux 内核设计的开源虚拟化平台。它是一种 1 类管理程序，或通常称为裸机管理程序。它允许用户创建和管理多台客户机，这些可以在 Linux 或 Windows 操作系统中创建。与大多数虚拟化平台一样，它将硬件资源（如 CPU、内存、存储、网络、图形等）抽象化，并将它们分配给独立于宿主机运行的客户机。先决条件预装 Rocky Linux 9 / AlmaLinux 9具有管理员权限的 sudo 用户互联网连接1、验证是否启用了硬件虚拟化首先，你需要验证你的系统是否启用了虚拟化功能。在大多数现代系统上，此功能已在 BIOS 中启用。但可以肯定的是，你可以验证是否如图所示启用了虚拟化。该命令探测是否存在 VMX（ 虚拟机扩展 Virtual Machine Extension ），它是英特尔硬件虚拟化的 CPU 标志，或 SVM，它是 AMD 硬件虚拟化的标志。$ cat /proc/cpuinfo | egrep "vmx|svm" 从以下输出中，你可以看到我们的系统启用了英特尔硬件虚拟化：2、在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM确保启用虚拟化后，下一步就是安装 KVM 和管理工具。为此，请运行以下 dnf 命令。$ sudo dnf install qemu-kvm virt-manager libvirt virt-install virt-viewer virt-top bridge-utils bridge-utils virt-top libguestfs-tools -y 安装完成后，运行以下命令检查是否已加载所需的 KVM 模块。$ lsmod | grep kvm 你应该得到以下输出以确认已加载必要的模块：3、启动并启用 libvirtd 守护进程在下一步中，一定要启动 libvirtd 守护进程。这是一个服务器端守护程序组件，可在虚拟化的客户机上运行和管理任务。它用于管理虚拟化技术，例如 Xen、KVM 和 ESXi 等等。要启动 libvirtd 守护进程，请运行以下命令：$ sudo systemctl start libvirtd 请务必启用该服务以在引导时启动：$ sudo systemctl enable --now libvirtd 验证 libvirtd 守护进程是否正在运行，如下所示：$ sudo systemctl status libvirtd 4、设置桥接接口到目前为止，我们已经安装了 KVM 和所有管理工具，事实上，我们可以继续启动虚拟机。但是，如果我们可以从管理程序网络外部访问虚拟机，那就太好了。为此，我们需要创建一个桥接接口。首先，确定系统上的网络接口。$ sudo nmcli connection show 从输出来看，ens160 是活动的网络接口，请务必注意你的情况下的接口，因为你将一路使用它。要开始创建网桥，首先，使用以下语法用其 UUID 删除连接：$ sudo nmcli connection delete UUID 在我们的例子中，命令将是：$ sudo nmcli connection delete 19e98123-9a84-30a6-bc59-a7134446bb26 你将收到连接已成功删除的确认信息。在继续进行之前，最好准备好以下详细信息：网桥名称 – 新网桥的首选名称（例如 br1）设备名称 – 这是你的网络接口的名称。它将作为网桥的从属设备（例如，ens160）IP 地址/子网 – 桥接网络的 IP 地址和子网（例如 192.168.2.50/24）。请注意，这应该与你的网络子网和 IP 地址相对应。网关 – 你网络的默认网关地址（例如 192.168.2.1）DNS1 和 DNS2 – 首选 DNS 地址（例如 8.8.8.8 和 8.8.4.4）继续，使用以下语法创建一个新的桥接接口。$ sudo nmcli connection add type bridge autoconnect yes con-name BRIDGE NAME ifname BRIDGE NAME 在我们的例子中，br1 是首选的网桥接口名称。因此，命令将如图所示：$ sudo nmcli connection add type bridge autoconnect yes con-name br1 ifname br1 在接下来的步骤中，你将通过指定 IP 子网、网关和 DNS 值来修改网桥。首先使用以下语法指定 IP 子网：$ sud…

Ubuntu 22.04 之 KVM 安装手札
type: item
date: 2022-06-02T01:16:38+08:00
description: KVM 是 基于内核的虚拟机 Kernel-based Virtual Machine 的首字母缩写，这是一项集成在内核中的开源虚拟化技术。它是一种类型一（裸机）的 管理程序 hypervisor ，可以使内核能够作为一个 裸机管理程序 bare-metal hypervisor 。在 KVM 之上可以运行 Windows 和 Liunx 虚拟机。每个虚拟机都独立于其它虚拟机和底层操作系统（宿主机系统），并拥有自己的 CPU、内存、网络接口、存储设备等计算资源。本文将介绍在 Ubuntu 22.04 LTS（Jammy Jellyfish）中如何安装 KVM 。在文末，我们也将演示如何在安装 KVM 完成之后创建一台虚拟机。1、更新 Ubuntu 22.04在一切开始前，打开终端并通过如下命令更新本地的软件包索引：$ sudo apt update 2、检查虚拟化是否开启在进一步行动之前，首先需要检查你的 CPU 是否支持 KVM 虚拟化，确保你系统中有 VT-x（ vmx）英特尔处理器或 AMD-V（svm）处理器。你可以通过运行如下命令，如果输出值大于 0，那么虚拟化被启用。否则，虚拟化被禁用，你需要启用它：$ egrep -c '(vmx|svm)' /proc/cpuinfo 根据上方命令输出，你可以推断出虚拟化功能已经启用，因为输出结果大于 0。如果虚拟化功能没有启用，请确保在系统的 BIOS 设置中启用虚拟化功能。另外，你可以通过如下命令判断 KVM 虚拟化是否已经在运行：$ kvm-ok 运行该命令之前，请确保你已经安装了 cpu-checker 软件包，否则将提示未找到该命令的报错。直接就在下面，你会得到如何解决这个问题的指示，那就是安装 cpu-checker 包。随后，通过如下命令安装 cpu-checker 软件包：$ sudo apt install -y cpu-checker 接着再运行 kvm-ok 命令，如果 KVM 已经启动，你将看到如下输出：$ kvm-ok 3、在 Ubuntu 22.04 上安装 KVM随后，通过如下命令在 Ubuntu 22.04 中安装 KVM 以及其他相关虚拟化软件包：$ sudo apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-utils 以下为你解释刚刚安装了哪些软件包：qemu-kvm – 一个提供硬件仿真的开源仿真器和虚拟化包virt-manager – 一款通过 libvirt 守护进程，基于 QT 的图形界面的虚拟机管理工具libvirt-daemon-system – 为运行 libvirt 进程提供必要配置文件的工具virtinst – 一套为置备和修改虚拟机提供的命令行工具libvirt-clients – 一组客户端的库和API，用于从命令行管理和控制虚拟机和管理程序bridge-utils – 一套用于创建和管理桥接设备的工具4、启用虚拟化守护进程（libvirtd）在所有软件包安装完毕之后，通过如下命令启用并启动 libvirt 守护进程：$ sudo systemctl enable --now libvirtd $ sudo systemctl start libvirtd 你可以通过如下命令验证该虚拟化守护进程是否已经运行：$ sudo systemctl status libvirtd 另外，请将当前登录用户加入 kvm 和 libvirt 用户组，以便能够创建和管理虚拟机。$ sudo usermod -aG kvm $USER $ sudo usermod -aG libvirt $USER $USER 环境变量引用的即为当前登录的用户名。你需要重新登录才能使得配置生效。5、创建网桥（br0）如果你打算从本机（Ubuntu 22.04）之外访问 KVM 虚拟机，你必须将虚拟机的网卡映射至网桥。virbr0 网桥是 KVM 安装完成后自动创建的，仅做测试用途。你可以通过如下内容在 /etc/netplan 目录下创建文件 01-netcfg.yaml 来新建网桥：$ sudo vi /etc/netplan/01-netcfg.yaml network: ethernets: enp0s3: dhcp4: false dhcp6: false # add configuration for bridge interface bridges: br0: interfaces: [enp0s3] dhcp4: false addresses: [192.168.1.162/24] macaddress: …

在 Ubuntu 18.04 LTS 上使用 KVM 配置无头虚拟化服务器
type: item
date: 2018-10-16T19:19:10+08:00
description: 我们已经讲解了 在 Ubuntu 18.04 无头服务器上配置 Oracle VirtualBox 。在本教程中，我们将讨论如何使用 KVM 去配置无头虚拟化服务器，以及如何从一个远程客户端去管理访客系统。正如你所知道的，KVM（Kernel-based virtual machine）是开源的，是 Linux 上的全虚拟化。使用 KVM，我们可以在几分钟之内，很轻松地将任意 Linux 服务器转换到一个完全的虚拟化环境中，以及部署不同种类的虚拟机，比如 GNU/Linux、*BSD、Windows 等等。使用 KVM 配置无头虚拟化服务器我在 Ubuntu 18.04 LTS 服务器上测试了本指南，但是它在其它的 Linux 发行版上也可以使用，比如，Debian、CentOS、RHEL 以及 Scientific Linux。这个方法完全适合哪些希望在没有任何图形环境的 Linux 服务器上，去配置一个简单的虚拟化环境。基于本指南的目的，我将使用两个系统。KVM 虚拟化服务器：宿主机操作系统 – 最小化安装的 Ubuntu 18.04 LTS（没有 GUI）宿主机操作系统的 IP 地址：192.168.225.22/24访客操作系统（它将运行在 Ubuntu 18.04 的宿主机上）：Ubuntu 16.04 LTS server远程桌面客户端：操作系统 – Arch Linux安装 KVM首先，我们先检查一下我们的系统是否支持硬件虚拟化。为此，需要在终端中运行如下的命令：$ egrep -c '(vmx|svm)' /proc/cpuinfo假如结果是 zero (0)，说明系统不支持硬件虚拟化，或者在 BIOS 中禁用了虚拟化。进入你的系统 BIOS 并检查虚拟化选项，然后启用它。假如结果是 1 或者 更大的数，说明系统将支持硬件虚拟化。然而，在你运行上面的命令之前，你需要始终保持 BIOS 中的虚拟化选项是启用的。或者，你也可以使用如下的命令去验证它。但是为了使用这个命令你需要先安装 KVM。$ kvm-ok示例输出：INFO: /dev/kvm exists KVM acceleration can be used如果输出的是如下这样的错误，你仍然可以在 KVM 中运行访客虚拟机，但是它的性能将非常差。INFO: Your CPU does not support KVM extensions INFO: For more detailed results, you should run this as root HINT: sudo /usr/sbin/kvm-ok当然，还有其它的方法来检查你的 CPU 是否支持虚拟化。更多信息参考接下来的指南。如何知道 CPU 是否支持虚拟技术（VT）接下来，安装 KVM 和在 Linux 中配置虚拟化环境所需要的其它包。在 Ubuntu 和其它基于 DEB 的系统上，运行如下命令：$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checkerKVM 安装完成后，启动 libvertd 服务（如果它没有启动的话）：$ sudo systemctl enable libvirtd $ sudo systemctl start libvirtd创建虚拟机所有的虚拟机文件和其它的相关文件都保存在 /var/lib/libvirt/ 下。ISO 镜像的默认路径是 /var/lib/libvirt/boot/。首先，我们先检查一下是否有虚拟机。查看可用的虚拟机列表，运行如下的命令：$ sudo virsh list --all示例输出：Id Name State ----------------------------------------------------正如上面的截屏，现在没有可用的虚拟机。现在，我们来创建一个。例如，我们来创建一个有 512 MB 内存、1 个 CPU 核心、8 GB 硬盘的 Ubuntu 16.04 虚拟机。$ sudo virt-install --name Ubuntu-16.04 --ram=512 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-16.04-vm1,size=8 --cdrom /var/lib/libvirt/boot/ubuntu-16.04-server-amd64.iso --graphics vnc请确保在路径 /var/lib/libvirt/boot/ 中有一个 Ubuntu 16.04 的 ISO 镜像文件，或者在上面命令中给定的其它路…

如何在 Ubuntu 18.04 服务器上安装和配置 KVM
type: item
date: 2018-06-03T16:51:00+08:00
description: KVM（基于内核的虚拟机）是一款为类 Linux 系统提供的开源的全虚拟化解决方案，KVM 使用虚拟化扩展（如 Intel VT 或 AMD-V）提供虚拟化功能。无论何时我们在任何 Linux 机器上安装 KVM，都会通过加载诸如 kvm-intel.ko（基于 Intel 的机器）和 kvm-amd.ko（基于 amd 的机器）的内核模块，使其成为 管理程序 hyervisor （LCTT 译注：一种监控和管理虚拟机运行的核心软件层）。KVM 允许我们安装和运行多个虚拟机（Windows 和 Linux）。我们可以通过 virt-manager 的图形用户界面或使用 virt-install 和 virsh 命令在命令行界面来创建和管理基于 KVM 的虚拟机。在本文中，我们将讨论如何在 Ubuntu 18.04 LTS 服务器上安装和配置 KVM 管理程序。我假设你已经在你的服务器上安装了 Ubuntu 18.04 LTS 。接下来登录到您的服务器执行以下步骤。第一步：确认您的硬件是否支持虚拟化执行 egrep 命令以验证您的服务器的硬件是否支持虚拟化，linuxtechi@kvm-ubuntu18-04:~$ egrep -c '(vmx|svm)' /proc/cpuinfo 1 如果输出结果大于 0，就意味着您的硬件支持虚拟化。重启，进入 BIOS 设置中启用 VT 技术。现在使用下面的命令安装 kvm-ok 实用程序，该程序用于确定您的服务器是否能够运行硬件加速的 KVM 虚拟机。linuxtechi@kvm-ubuntu18-04:~$ sudo apt install cpu-checker 运行 kvm-ok 命令确认输出结果，linuxtechi@kvm-ubuntu18-04:~$ sudo kvm-ok INFO: /dev/kvm exists KVM acceleration can be used 第二步：安装 KVM 及其依赖包运行下面的 apt 命令安装 KVM 及其依赖项：linuxtechi@kvm-ubuntu18-04:~$ sudo apt update linuxtechi@kvm-ubuntu18-04:~$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager 只要上图相应的软件包安装成功，那么你的本地用户（对于我来说是 linuxtechi）将被自动添加到 libvirtd 群组。第三步：启动并启用 libvirtd 服务我们在 Ubuntu 18.04 服务器上安装 qemu 和 libvirtd 软件包之后，它就会自动启动并启用 libvirtd 服务，如果 libvirtd 服务没有开启，则运行以下命令开启，linuxtechi@kvm-ubuntu18-04:~$ sudo service libvirtd start linuxtechi@kvm-ubuntu18-04:~$ sudo update-rc.d libvirtd enable 现在使用下面的命令确认 libvirtd 服务的状态，linuxtechi@kvm-ubuntu18-04:~$ service libvirtd status 输出结果如下所示：第四步：为 KVM 虚拟机配置桥接网络只有通过桥接网络，KVM 虚拟机才能访问外部的 KVM 管理程序或主机。在Ubuntu 18.04中，网络由 netplan 实用程序管理，每当我们新安装一个 Ubuntu 18.04 系统时，会自动创建一个名称为 /etc/netplan/50-cloud-init.yaml 文件，其配置了静态 IP 和桥接网络，netplan 实用工具将引用这个文件。截至目前，我已经在此文件配置了静态 IP，文件的具体内容如下：network: ethernets: ens33: addresses: [192.168.0.51/24] gateway4: 192.168.0.1 nameservers: addresses: [192.168.0.1] dhcp4: no optional: true version: 2 我们在这个文件中添加桥接网络的配置信息，linuxtechi@kvm-ubuntu18-04:~$ sudo vi /etc/netplan/50-cloud-init.yaml network: version: 2 ethernets: ens33: dhcp4: no dhcp6: no bridges: br0: interfaces: [ens33] dhcp4: no addresses: [192.168.0.…

在 KVM 中测试 IPv6 网络：第 2 部分
type: item
date: 2018-05-18T05:52:57+08:00
description: 我们又见面了，在上一篇 在 KVM 中测试 IPv6 网络：第 1 部分 中，我们学习了有关 IPv6 私有地址的内容。今天，我们将使用 KVM 创建一个网络，去测试上一星期学习的 IPv6 的内容。如果你想重新温习如何使用 KVM，可以查看 在 KVM 中创建虚拟机：第 1 部分 和 在 KVM 中创建虚拟机：第 2 部分— 网络。在 KVM 中创建网络在 KVM 中你至少需要两个虚拟机。当然了，如果你愿意，也可以创建更多的虚拟机。在我的系统中有 Fedora、Ubuntu、以及 openSUSE。去创建一个新的 IPv6 网络，在主虚拟机管理窗口中打开 “Edit > Connection Details > Virtual Networks”。点击左下角的绿色十字按钮去创建一个新的网络（图 1）。图 1：创建一个网络给新网络输入一个名字，然后，点击 “Forward” 按钮。如果你愿意，也可以不创建 IPv4 网络。当你创建一个新的 IPv4 网络时，虚拟机管理器将不让你创建重复网络，或者是使用了一个无效地址。在我的宿主机 Ubuntu 系统上，有效的地址是以绿色高亮显示的，而无效地址是使用高亮的玫瑰红色调。在我的 openSUSE 机器上没有高亮颜色。启用或不启用 DHCP，以及创建或不创建一个静态路由，然后进入下一个窗口。选中 “Enable IPv6 network address space definition”，然后输入你的私有地址范围。你可以使用任何你希望的 IPv6 地址类，但是要注意，不能将你的实验网络泄漏到公网上去。我们将使用非常好用的 IPv6 唯一本地地址（ULA），并且使用在 Simple DNS Plus 上的在线地址生成器，去创建我们的网络地址。拷贝 “Combined/CID” 地址到网络框中（图 2）。图 2：拷贝 "Combined/CID" 地址到网络框中虚拟机认为我的地址是无效的，因为，它显示了高亮的玫瑰红色。它做的对吗？我们使用 ipv6calc 去验证一下：$ ipv6calc -qi fd7d:844d:3e17:f3ae::/64 Address type: unicast, unique-local-unicast, iid, iid-local Registry for address: reserved(RFC4193#3.1) Address type has SLA: f3ae Interface identifier: 0000:0000:0000:0000 Interface identifier is probably manual set ipv6calc 认为没有问题。如果感兴趣，你可以改变其中一个数字为无效的东西，比如字母 g，然后再试一次。（问 “如果…？”，试验和错误是最好的学习方法）。我们继续进行，启用 DHCPv6（图 3）。你可以接受缺省值，或者输入一个你自己的设置值。图 3： 启用 DHCPv6我们将跳过缺省路由定义这一步，继续进入下一屏，在那里我们将启用 “Isolated Virtual Network” 和 “Enable IPv6 internal routing/networking”。虚拟机网络选择现在，你可以配置你的虚拟机去使用新的网络。打开你的虚拟机，然后点击顶部左侧的 “i” 按钮去打开 “Show virtual hardware details” 屏幕。在 “Add Hardware” 列点击 “NIC” 按钮去打开网络选择器，然后选择你喜欢的新的 IPv6 网络。点击 “Apply”，然后重新启动。（或者使用你喜欢的方法去重新启动网络，或者更新你的 DHCP 租期。）测试ifconfig 告诉我们它做了什么？$ ifconfig ens3: flags=4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet 192.168.30.207 netmask 255.255.255.0 broadcast 192.168.30.255 inet6 fd7d:844d:3e17:f3ae::6314 prefixlen 128 scopeid 0x0 inet6 fe80::4821:5ecb:e4b4:d5fc prefixlen 64 scopeid 0x20 这是我们新的 ULA，fd7d:844d:3e17:f3ae::6314，它是自动生成的本地链路地址。如果你有兴趣，可以 ping 一下，ping 网络上的其它虚拟机：vm1 ~$ ping6 -c2 fd7d:844d:3e17:f3ae::2c9f PING fd7d:844d:3e17:f3ae::2c9f(fd7…

如何使用 virsh 命令创建、还原和删除 KVM 虚拟机快照
type: item
date: 2018-05-08T06:19:00+08:00
description: 在虚拟化平台上进行系统管理工作时，经常需要在开始重大操作比如部署补丁和代码前先设置一个虚拟机 快照 snapshot 。虚拟机快照是特定时间点的虚拟机磁盘的副本。换句话说，快照保存了给定的时间点虚拟机的状态和数据。我们可以在哪里使用虚拟机快照？如果你在使用基于 KVM 的 虚拟机管理程序 （ hypervisor ） ，那么可以使用 virsh 命令获取虚拟机或域快照。快照在一种情况下变得非常有用，当你已经在虚拟机上安装或应用了最新的补丁，但是由于某些原因，虚拟机上的程序变得不稳定，开发团队想要还原所有的更改和补丁。如果你在应用补丁之前设置了虚拟机的快照，那么可以使用快照将虚拟机恢复到之前的状态。注意：我们只能对磁盘格式为 Qcow2 的虚拟机的进行快照，并且 kvm 的 virsh 命令不支持 raw 磁盘格式，请使用以下命令将原始磁盘格式转换为 qcow2。# qemu-img convert -f raw -O qcow2 image-name.img image-name.qcow2 创建 KVM 虚拟机（域）快照我假设 KVM 管理程序已经在 CentOS 7 / RHEL 7 机器上配置好了，并且有虚拟机正在运行。我们可以使用下面的 virsh 命令列出虚拟机管理程序中的所有虚拟机，[root@kvm-hypervisor ~]# virsh list --all Id Name State ---------------------------------------------------- 94 centos7.0 running 101 overcloud-controller running 102 overcloud-compute2 running 103 overcloud-compute1 running 114 webserver running 115 Test-MTN running 假设我们想创建 webserver 虚拟机的快照，运行下面的命令，语法：# virsh snapshot-create-as –domain {vm_name} –name {snapshot_name} –description “enter description here” [root@kvm-hypervisor ~]# virsh snapshot-create-as --domain webserver --name webserver_snap --description "snap before patch on 4Feb2018" Domain snapshot webserver_snap created 创建快照后，我们可以使用下面的命令列出与虚拟机相关的快照：[root@kvm-hypervisor ~]# virsh snapshot-list webserver Name Creation Time State ------------------------------------------------------------ webserver_snap 2018-02-04 15:05:05 +0530 running [root@kvm-hypervisor ~]# 要列出虚拟机快照的详细信息，请运行下面的 virsh 命令：[root@kvm-hypervisor ~]# virsh snapshot-info --domain webserver --snapshotname webserver_snap Name: webserver_snap Domain: webserver Current: yes State: running Location: internal Parent: - Children: 0 Descendants: 0 Metadata: yes 我们可以使用下面的 qemu-img 命令查看快照的大小：[root@kvm-hypervisor ~]# qemu-img info /var/lib/libvirt/images/snaptestvm.img 还原 KVM 虚拟机快照假设我们想要将 webserver 虚拟机还原到我们在上述步骤中创建的快照。使用下面的 virsh 命令将 Webserver 虚拟机恢复到其快照 webserver\_snap 时。语法：# virsh snapshot-revert {vm_name} {snapshot_name} [root@kvm-hypervisor ~]# virsh snapshot-revert webserver webserver_snap 删除 KVM 虚拟机快照要删除 KV…

在 KVM 中测试 IPv6 网络（第 1 部分）
type: item
date: 2018-05-01T04:07:30+08:00
description: 在这个两篇的系列当中，我们将学习关于 IPv6 私有地址的知识，以及如何在 KVM 中配置测试网络。要理解 IPv6 地址是如何工作的，没有比亲自动手去实践更好的方法了，在 KVM 中配置一个小的测试实验室非常容易 —— 也很有趣。这个系列的文章共有两个部分，我们将学习关于 IPv6 私有地址的知识，以及如何在 KVM 中配置测试网络。QEMU/KVM/虚拟机管理器我们先来了解什么是 KVM。在这里，我将使用 KVM 来表示 QEMU、KVM、以及虚拟机管理器的一个组合，虚拟机管理器在 Linux 发行版中一般都内置了。简单解释就是，QEMU 模拟硬件，而 KVM 是一个内核模块，它在你的 CPU 上创建一个 “访客领地”，并去管理它们对内存和 CPU 的访问。虚拟机管理器是一个涵盖虚拟化和管理程序的图形工具。但是你不能被图形界面下 “点击” 操作的方式 “缠住” ，因为，它们也有命令行工具可以使用 —— 比如 virsh 和 virt-install。如果你在使用 KVM 方面没有什么经验，你可以从 在 KVM 中创建虚拟机：第 1 部分 和 在 KVM 中创建虚拟机：第 2 部分 - 网络 开始学起。IPv6 唯一本地地址在 KVM 中配置 IPv6 网络与配置 IPv4 网络很类似。它们的主要不同在于这些怪异的长地址。上一次，我们讨论了 IPv6 地址的不同类型。其中有一个 IPv6 单播地址类，fc00::/7（详细情况请查阅 RFC 4193），它类似于 IPv4 中的私有地址 —— 10.0.0.0/8、172.16.0.0/12、和 192.168.0.0/16。下图解释了这个唯一本地地址空间的结构。前 48 位定义了前缀和全局 ID，随后的 16 位是子网，剩余的 64 位是接口 ID：| 7 bits |1| 40 bits | 16 bits | 64 bits | +--------+-+------------+-----------+----------------------------+ | Prefix |L| Global ID | Subnet ID | Interface ID | +--------+-+------------+-----------+----------------------------+ 下面是另外一种表示方法，它可能更有助于你理解这些地址是如何管理的：| Prefix | Global ID | Subnet ID | Interface ID | +--------+--------------+-------------+----------------------+ | fd | 00:0000:0000 | 0000 | 0000:0000:0000:0000 | +--------+--------------+-------------+----------------------+ fc00::/7 共分成两个 /8 地址块，fc00::/8 和 fd00::/8。fc00::/8 是为以后使用保留的。因此，唯一本地地址通常都是以 fd 开头的，而剩余部分是由你使用的。L 位，也就是第八位，它总是设置为 1，这样它可以表示为 fd00::/8。设置为 0 时，它就表示为 fc00::/8。你可以使用 subnetcalc 来看到这些东西：$ subnetcalc fd00::/8 -n Address = fd00:: fd00 = 11111101 00000000 $ subnetcalc fc00::/8 -n Address = fc00:: fc00 = 11111100 00000000 RFC 4193 要求地址必须随机产生。你可以用你选择的任何方法来造出个地址，只要它们以 fd 打头就可以，因为 IPv6 范围非常大，它不会因为地址耗尽而无法使用。当然，最佳实践还是按 RFC 的要求来做。地址不能按顺序分配或者使用众所周知的数字。RFC 4193 包含一个构建伪随机地址生成器的算法，或者你可以找到各种在线生成器。唯一本地地址不像全局单播地址（它由你的因特网服务提供商分配）那样进行中心化管理，即使如此，发生地址冲突的可能性也是非常低的。当你需要去合并一些本地网络或者想去在不相关的私有网络之间路由时，这是一个非常好的优势。在同一个子网中，你可以混用唯一本地地址和全局单播地址。唯一本地地址是可路由的，并且它并不会因此要求对路由器做任何调整。但是，你应该在你的边界路由器和防火墙上配置为不允许它们离开你的网络，除非是在不同位置的两个私有网络之间。RFC4193 建议，不要混用全局单播地址的 AAAA 和 PTR 记录，因为虽然它们重复的机率非…

如何在 Ubuntu Linux 上使用 KVM 云镜像
type: item
date: 2018-04-07T19:37:26+08:00
description: 如何下载并使用运行在 Ubuntu Linux 服务器上的 KVM 云镜像？如何在 Ubuntu Linux 16.04 LTS 服务器上无需完整安装即可创建虚拟机？如何在 Ubuntu Linux 上使用 KVM 云镜像？基于内核的虚拟机（KVM）是 Linux 内核的虚拟化模块，可将其转变为虚拟机管理程序。你可以在命令行使用 Ubuntu 为 libvirt 和 KVM 提供的虚拟化前端通过 KVM 创建 Ubuntu 云镜像。这个快速教程展示了如何安装和使用 uvtool，它为 Ubuntu 云镜像下载，libvirt 和 clout\_int 提供了统一的集成虚拟机前端。步骤 1 - 安装 KVM你必须安装并配置 KVM。使用 apt 命令/apt-get 命令，如下所示：$ sudo apt install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker $ kvm-ok ## [configure bridged networking as described here][3] $ sudo vi /etc/network/interfaces $ sudo systemctl restart networking $ sudo brctl show 参阅如何在 Ubuntu 16.04 LTS Headless 服务器上安装 KVM 以获得更多信息。（LCTT 译注：Headless 服务器是指没有本地接口的计算设备，专用于向其他计算机及其用户提供服务。）步骤 2 - 安装 uvtool键入以下 apt 命令/apt-get 命令：$ sudo apt install uvtool 示例输出：[sudo] password for vivek: Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: gksu libgksu2-0 libqt5designer5 libqt5help5 libqt5printsupport5 libqt5sql5 libqt5sql5-sqlite libqt5xml5 python3-dbus.mainloop.pyqt5 python3-notify2 python3-pyqt5 python3-sip Use 'sudo apt autoremove' to remove them. The following additional packages will be installed: cloud-image-utils distro-info python-boto python-pyinotify python-simplestreams socat ubuntu-cloudimage-keyring uvtool-libvirt Suggested packages: cloud-utils-euca shunit2 python-pyinotify-doc The following NEW packages will be installed: cloud-image-utils distro-info python-boto python-pyinotify python-simplestreams socat ubuntu-cloudimage-keyring uvtool uvtool-libvirt 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 1,211 kB of archives. After this operation, 6,876 kB of additional disk space will be used. Get:1 http://in.archive.ubuntu.com/ubuntu artful/main amd64 distro-info amd64 0.17 [20.3 kB] Get:2 http://in.archive.ubuntu.com/ubuntu artful/universe amd64 python-boto all 2.44.0-1ubuntu2 [740 kB] Get:3 http://in.archive.ubuntu.com/ubuntu artful/ma…

如何在 CentOS 7 / RHEL 7 终端服务器上安装 KVM
type: item
date: 2018-03-19T05:12:05+08:00
description: 如何在 CnetOS 7 或 RHEL 7（Red Hat 企业版 Linux）服务器上安装和配置 KVM（基于内核的虚拟机）？如何在 CentOS 7 上设置 KVM 并使用云镜像 / cloud-init 来安装客户虚拟机？基于内核的虚拟机（KVM）是 CentOS 或 RHEL 7 的虚拟化软件。KVM 可以将你的服务器变成虚拟机管理器。本文介绍如何在 CentOS 7 或 RHEL 7 中使用 KVM 设置和管理虚拟化环境。还介绍了如何使用命令行在物理服务器上安装和管理虚拟机（VM）。请确保在服务器的 BIOS 中启用了虚拟化技术(VT)。你也可以运行以下命令测试 CPU 是否支持 Intel VT 和 AMD\_V 虚拟化技术。$ lscpu | grep Virtualization Virtualization: VT-x 按照 CentOS 7/RHEL 7 终端服务器上的 KVM 安装步骤进行操作。步骤 1： 安装 kvm输入以下 yum 命令:# yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install 启动 libvirtd 服务：# systemctl enable libvirtd # systemctl start libvirtd 步骤 2： 确认 kvm 安装使用 lsmod 命令和 grep命令 确认加载了 KVM 模块：# lsmod | grep -i kvm 步骤 3： 配置桥接网络默认情况下，由 libvirtd 配置基于 dhcpd 的网桥。你可以使用以下命令验证：# brctl show # virsh net-list 所有虚拟机（客户机）只能对同一台服务器上的其它虚拟机进行网络访问。为你创建的私有网络是 192.168.122.0/24。验证：# virsh net-dumpxml default 如果你希望你的虚拟机可用于 LAN 上的其他服务器，请在连接到你的 LAN 的服务器上设置一个网桥。更新你的网卡配置文件，如 ifcfg-enp3s0 或 em1：# vi /etc/sysconfig/network-scripts/ifcfg-enp3s0 添加一行：BRIDGE=br0 使用 vi 保存并关闭文件。编辑 /etc/sysconfig/network-scripts/ifcfg-br0：# vi /etc/sysconfig/network-scripts/ifcfg-br0 添加以下内容：DEVICE="br0" # I am getting ip from DHCP server # BOOTPROTO="dhcp" IPV6INIT="yes" IPV6_AUTOCONF="yes" ONBOOT="yes" TYPE="Bridge" DELAY="0" 重新启动网络服务（警告：ssh 命令将断开连接，最好重新启动该设备）：# systemctl restart NetworkManager 用 brctl 命令验证它：# brctl show 步骤 4： 创建你的第一个虚拟机我将会创建一个 CentOS 7.x 虚拟机。首先，使用 wget 命令获取 CentOS 7.x 最新的 ISO 镜像：# cd /var/lib/libvirt/boot/ # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso 验证 ISO 镜像：# wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/sha256sum.txt # sha256sum -c sha256sum.txt 创建 CentOS 7.x 虚拟机在这个例子中，我创建了 2GB RAM，2 个 CPU 核心，1 个网卡和 40 GB 磁盘空间的 CentOS 7.x 虚拟机，输入：# virt-install \ --virt-type=kvm \ --name centos7 \ --ram 2048 \ --vcpus=1 \ --os-variant=centos7.0 \ --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \ --network=bridge=br0,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/centos7.qcow2,size…