通过QEMU的IP-KVM



在没有KVM的服务器上加载操作系统时,进行故障排除并非易事。 我们使用恢复映像和虚拟机创建IP上的KVM。

如果远程服务器上的操作系统出现问题,管理员将下载恢复映像并执行必要的工作。 当已知故障原因并且恢复映像和服务器上安装的操作系统来自同一系列时,此方法可以正常工作。 如果故障原因尚不清楚,则需要监视加载操作系统的进度。

远程KVM


您可以使用内置工具(例如IPMI或Intel®vPro™)或使用称为IP-KVM的外部设备来访问服务器控制台。 在某些情况下,所有列出的技术都不可用。 但是,这还没有结束。 如果可以将服务器远程重启到基于Linux操作系统的恢复映像中,则可以快速组织IP KVM。

恢复映像是驻留在RAM中的完整操作系统。 因此,我们可以运行任何软件,包括虚拟机(VM)。 也就是说,您可以启动VM,服务器操作系统将在其中运行。 例如,可以通过VNC安排对VM控制台的访问。

要在VM内启动服务器操作系统,必须将服务器磁盘指定为VM磁盘。 在Linux系列操作系统上,物理磁盘以/ dev / sdX形式的块设备表示,可以像常规文件一样进行处理

一些虚拟机管理程序(例如QEMU和VirtualBox)允许您以原始格式存储VM数据,即,仅存储没有虚拟机管理程序元数据的数据。 因此,可以使用服务器的物理磁盘启动VM。

此方法需要资源来运行恢复映像和其中的VM。 但是,具有四个或更多GB的RAM,这将不是问题。

环境准备


作为虚拟机,您可以使用轻量级且简单的QEMU程序,该程序通常不是恢复映像的一部分,因此必须单独安装。 我们为客户提供的恢复映像基于Arch Linux ,该系统使用pacman软件包管理器。

首先,您需要确保恢复映像正在使用最新的软件。 您可以使用以下命令检查和更新所有操作系统组件:

pacman -Suy

更新之后,必须安装QEMU。 通过pacman进行的安装命令如下所示:

pacman -S qemu

检查qemu是否正确安装:

root@sel-rescue ~ # qemu-system-x86_64 --version
QEMU emulator version 4.0.0
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers


如果是这样,则恢复映像已准备就绪。

虚拟机启动


首先,您需要确定分配给VM的资源量,并找出到物理磁盘的路径。 在本例中,我们将为虚拟机分配两个内核和两个GB的RAM,并且磁盘位于路径/ dev / sda/ dev / sdb上 。 运行VM:

qemu-system-x86_64 \
-m 2048M \
-net nic -net user \
-enable-kvm \
-cpu host,nx \
-M pc \
-smp 2 \
-vga std \
-drive file=/dev/sda,format=raw,index=0,media=disk \
-drive file=/dev/sdb,format=raw,index=1,media=disk \
-vnc :0,password \
-monitor stdio


关于每个参数的含义:

  • -m 2048M-每个VM分配2 GB的RAM;
  • -net nic -net用户 -使用NAT(网络地址转换)通过管理程序添加简单的网络连接;
  • -enable-kvm-启用完整的KVM虚拟化(内核虚拟机);
  • -cpu host-告诉虚拟处理器获取所有服务器处理器功能;
  • -M pc -PC设备类型;
  • -smp 2-虚拟处理器必须是双核;
  • -vga std-选择不支持大屏幕分辨率的标准视频卡;
  • -驱动器文件= / dev / sda,格式=原始,索引= 0,媒体=磁盘
    • file = / dev / sdX-代表服务器磁盘的块设备的路径;
    • 格式=原始 -在指定文件中标记所有数据均以“原始”格式,即磁盘上的格式;
    • index = 0-磁盘号,每个下一个磁盘应增加一个;
    • media = disk-虚拟机应将此存储识别为磁盘;
  • -vnc:0,密码 -运行默认的VNC服务器0.0.0.0:5900,使用密码作为授权;
  • -monitor stdio-管理员将通过标准输入/输出流与qemu通信。

如果一切正常,则QEMU监视器将启动:

QEMU 4.0.0 monitor - type 'help' for more information
(qemu)


我们指出授权是使用密码进行的,但未指定密码本身。 您可以通过将change vnc password命令发送到QEMU监视器来执行此操作。 重要说明:密码​​不能超过8个字符。

(qemu) change vnc password
Password: ******


之后,我们可以使用您指定的密码通过服务器的IP地址与任何VNC客户端(例如Remmina)连接。





现在,我们不仅在加载阶段看到了可能的错误,而且可以对付它们。

在工作结束时,您必须完成虚拟机。 可以在操作系统内部通过发送关闭信号来完成此操作,也可以将system_powerdown命令提供给QEMU监视器。 这等效于单击关闭按钮:虚拟机内部的操作系统将平稳关闭。

操作系统安装


虚拟机具有对服务器磁盘的完全访问权限,因此可用于手动安装操作系统。 唯一的限制是RAM的数量:并非总是可以将ISO映像放置在RAM中。 我们选择四个GB的RAM将图像存储在/ mnt中

mount -t tmpfs -o size=4G tmpfs /mnt

我们还将加载FreeBSD 12.0操作系统的安装映像:

wget -P /mnt ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso

现在,您可以启动VM:

qemu-system-x86_64 \
-m 2048M \
-net nic -net user \
-enable-kvm \
-cpu host,nx \
-M pc \
-smp 2 \
-vga std \
-drive file=/dev/sda,format=raw,index=0,media=disk \
-drive file=/dev/sdb,format=raw,index=1,media=disk \
-vnc :0,password \
-monitor stdio \
-cdrom /mnt/FreeBSD-12.0-RELEASE-amd64-bootonly.iso \
-boot d


-boot d标志设置从CD驱动器的引导。 我们通过VNC客户端连接,我们看到了FreeBSD加载器。



由于使用DHCP来访问Internet,因此在配置之后,有必要引导到新安装的系统并更正网络设置。 在某些情况下,可能需要安装网络适配器驱动程序,因为服务器中安装的网卡和VM中模拟的网卡是不同的。

结论


这种对服务器控制台进行远程访问的组织方法消耗了服务器的部分资源,但是,它对服务器的硬件组件没有任何特殊要求,因此几乎可以在任何条件下执行。 使用此解决方案可以极大地促进软件故障的诊断并恢复远程服务器的运行状况。

Source: https://habr.com/ru/post/zh-CN464565/


All Articles