Press "Enter" to skip to content

Tag: 虚拟化

Fix ‘libguestfs launch fail’

在小破本Thinkpad X200s升级为X201s之后,我将其重新安装了Ubuntu 16.04.3 LTS版本并将其升级到最新版本。在兴冲冲搭建完成KVM虚拟化环境之后,并成功完成Centos7和Ubuntu虚拟机的样本之后,我打算对其副本进行sysprep操作的时候,提示'export LIBGUESTFS_TRACE=1 LIBGUESTFS_DEBUG=1',无法进行操作。
进行了libguest-test-tool进行了检查操作之后,系统提示‘libguestfs launch fail’错误。在排除了网上列出的库文件错误、版本bug和supermin配置文件错误之后,我把怀疑方向转向了内核,原因是有内核风暴的错误出现。
首先,安装了linux-generic-hwe-16.04-edge这个服务器内核,然后问题依旧。
然后,把hwe内核和最后升级得来的4.13版本内核卸载并重启之后,问题解决。

$ sudo virt-sysprep -d centos7
[   0.0] Examining the guest ...
[   6.9] Performing "abrt-data" ...
[   6.9] Performing "bash-history" ...
[   7.0] Performing "blkid-tab" ...
[   7.0] Performing "crash-data" ...
[   7.0] Performing "cron-spool" ...
[   7.0] Performing "dhcp-client-state" ...
[   7.0] Performing "dhcp-server-state" ...
[   7.0] Performing "dovecot-data" ...
[   7.0] Performing "logfiles" ...
[   7.1] Performing "machine-id" ...
[   7.1] Performing "mail-spool" ...
[   7.1] Performing "net-hostname" ...
[   7.1] Performing "net-hwaddr" ...
[   7.1] Performing "pacct-log" ...
[   7.1] Performing "package-manager-cache" ...
[   7.1] Performing "pam-data" ...
[   7.1] Performing "puppet-data-log" ...
[   7.1] Performing "rh-subscription-manager" ...
[   7.1] Performing "rhn-systemid" ...
[   7.1] Performing "rpm-db" ...
[   7.1] Performing "samba-db-log" ...
[   7.1] Performing "script" ...
[   7.1] Performing "smolt-uuid" ...
[   7.1] Performing "ssh-hostkeys" ...
[   7.1] Performing "ssh-userdir" ...
[   7.1] Performing "sssd-db-log" ...
[   7.1] Performing "tmp-files" ...
[   7.1] Performing "udev-persistent-net" ...
[   7.1] Performing "utmp" ...
[   7.1] Performing "yum-uuid" ...
[   7.1] Performing "customize" ...
[   7.1] Setting a random seed
[   7.2] Performing "lvm-uuids" ...

虚拟机的mac地址也得到更新,避免了删除网卡再新重建网卡的麻烦。
macdiff
最后,使用apt-mark来保留旧内核以解决使用apt upgrade会升级内核的问题。

$ sudo apt-mark hold linux-image-4.10.0-28-generic
linux-image-4.10.0-28-generic 设置为保留。
$ sudo apt-mark hold linux-image-extra-4.10.0-28-generic
linux-image-extra-4.10.0-28-generic 设置为保留。

Fix “network ‘default’ is not active”

在笔记本上的Ubuntu桌面版中使用NAT模式的虚拟机时,会出现如下情况。
network_default_not_active
在Ubuntu的KVM虚拟化环境中,默认(default)NAT网络是由libvirtd虚拟化管理程序自动创建的。由于默认情况下,这个NAT网络是指向有线网卡的,如果只使用无线网卡的话,就会出现上述虚机无法启动的情况。
解决问题的方法就是重新手动启动default NAT 网络。

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              不活跃  否           是

$ sudo virsh net-start  default

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     否           是

$ sudo virsh net-autostart default
网络default标记为自动启动

$ sudo virsh net-list --all
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是

然后就可以启动使用default网络NAT模式的虚机了。

使用virsh console管理虚机

在KVM的虚拟化实践中,使用终端状态的虚机管理软件virsh可以完成创建、删除、管理等一系列动作。但在默认情况下,virsh使用virsh console连接虚机会出现卡住的情况。这是由于virsh console连接不上虚机的虚拟串行端口所致。

对于Ubuntu虚机,解决的方式如下:

首先,KVM环境中的虚机开启相关服务:

$ sudo systemctl start serial-getty@ttyS0
$ sudo systemctl enable serial-getty@ttyS0
Created symlink /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service → /lib/systemd/system/serial-getty@.service.

然后,无需重启客户机就可以在管理端可以看到结果

root@tc8304:~# virsh start ubuntu
域 ubuntu 已开始

root@tc8304:~# virsh console ubuntu
连接到域 ubuntu
换码符为 ^]

Ubuntu 17.04 ubuntu ttyS0

ubuntu login: 

对于CentOS7的虚机而言,则需要执行如下命令:

root# grubby --update-kernel=ALL --args="console=ttyS0"
root# reboot

CentOS虚拟化实验环境搭建

为了准备RHCE考试,我把一台i7-2600k、16G内存、120Gssd的闲置主机刷成了CentOS7.下面是具体环境搭建的细节。


首先是系统的准备工作

su

yum update -y
yum install -y epel-release
yum makecache

yum install -y bash-completion network-tool sysfsutils 
yum install -y htop vim ctags curl wget mlocate lftp
curl https://raw.githubusercontent.com/wklken/vim-for-server/master/vimrc > ~/.vimrc

配置虚拟化环境

#安装kvm
yum -y install qemu-kvm libvirt virt-install bridge-utils
yum -y install libguestfs-tools virt-top

#启动虚拟化管理服务
systemctl start libvirtd
systemctl enable libvirtd

#开启kvm嵌套
echo "options kvm-intel nested=1" >> /etc/modprobe.d/kvm-intel.conf

#重新加载kvm模块
modprobe -r kvm_intel
modprobe kvm_intel

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#关闭selinux
vi /etc/selinux/config 
>SELINUX=disabled

reboot