2499

ubuntu/debian安装kvm

乐果   发表于   2015 年 05 月 20 日 标签:debianubuntukvm

安装kvm虚拟机

官方文档: kvm

apt-get install qemu-kvm 
apt-get install libvirt-daemon-system

在服务器上安装时,可以添加——no-install- recommended apt选项,以防止安装多余的图形包:

apt install --no-install-recommends qemu-system libvirt-clients libvirt-daemon-system virtinst

为了以普通用户管理虚拟机,需要将该用户添加到libvirt组中:

# adduser <youruser> libvirt

设置网桥网络

安装桥接工具包

apt install bridge-utils

创建网桥配置

brctl addbr br0

下一步就是配置已经创建好的网桥,即修改位于 /etc/network/interfaces 的配置文件。我们需要将该桥接网卡设置成开机启动。为了修改该配置文件,你需要关闭你的操作系统上的网络管理器(如果你在使用它的话)。

例如 debian 关闭网络管理器:

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

其他系统关闭网络管理器的方法参考:操作指南

配置 /etc/network/interfaces 文件(假如原来主网卡是enp89s0):

source /etc/network/interfaces.d/*

# The loopback network interface
#auto lo
#iface lo inet loopback

# The primary network interface
#allow-hotplug enp89s0
#iface enp89s0 inet static
#address 192.168.2.200
#network 192.168.2.0
#netmask 255.255.255.0
#gateway 192.168.2.1

auto br0
iface br0 inet dhcp
bridge_ports enp89s0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

如果之前主网卡enp89s0是dhcp来获取的ip,重启网卡即可生效:

/etc/init.d/networking restart
ip a

如果是静态获取的ip, 可能需要reboot重启系统生效。

生效后如下:

xiao@xiao-001:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp89s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether 1c:69:7a:a4:fc:d2 brd ff:ff:ff:ff:ff:ff
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 70:9c:d1:20:33:a7 brd ff:ff:ff:ff:ff:ff
    altname wlp0s20f3
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 82:31:86:14:9c:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.213/24 brd 192.168.2.255 scope global dynamic br0
       valid_lft 42774sec preferred_lft 42774sec
    inet6 fd00:ab:cd:0:8031:86ff:fe14:9cdc/64 scope global dynamic mngtmpaddr 
       valid_lft forever preferred_lft forever
    inet6 fe80::8031:86ff:fe14:9cdc/64 scope link 
       valid_lft forever preferred_lft forever

用命令行创建一个虚拟机

对于虚拟机来说,它的配置信息被存储在它对应的xml文件中。因此,创建一个虚拟机的第一步就是准备一个与虚拟机对应的 xml 文件。

下面是一个示例 xml 文件,你可以根据需要手动修改它。

<domain type='kvm'>
  <name>alice</name>
  <uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='cdrom'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2"/>
      <source file="/data/kvm/images/vm-test001.img"/>
      <target dev="vda" bus="virtio"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <source file="/data/kvm/iso/debian-12.5.0-amd64-netinst.iso"/>
      <target dev="hdc" bus="ide"/>
      <readonly/>
      <address type="drive" controller="0" bus="1" target="0" unit="0"/>
    </disk>
    <interface type='bridge'>
      <source bridge='br0'/>
      <mac address="00:00:A3:B0:56:10"/>
    </interface>
    <controller type="ide" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/>
    <console type='pty'>
      <target port='0'/>
    </console>
  </devices>
</domain>

上面的主机xml配置文件定义了如下的虚拟机内容。

  • 1GB内存,一个虚拟cpu和一个硬件驱动
  • 磁盘镜像:/data/kvm/images/vm-test001.img
  • 从 CD-ROM 引导(/home/dev/iso/CentOS-6.5-x86_64-minomal.iso
  • 网络:一个桥接到 br0 的虚拟网卡
  • 通过 VNC 远程访问
  • 改成

<uuid></uuid> 中的 UUID 字符串可以随机生成。为了得到一个随机的 uuid 字符串,你可能需要使用 uuid 命令行工具。

apt-get install uuid
uuid

生成一个主机 xml 配置文件的方式就是通过一个已经存在的虚拟机来导出它的 xml 配置文件。如下所示:

virsh dumpxml vm-test001 > aaa.xml

使用命令行启动虚拟机

在启动虚拟机之前,我们需要创建它的初始磁盘镜像。为此,你需要使用 qemu-img 命令来生成一个 qemu-kvm 镜像。下面的命令将会创建 10 GB 大小的空磁盘,并且它是 qcow2 格式的。

qemu-img create -f qcow2 /data/kvm/images/vm-test001.img 10G

使用 qcow2 格式的磁盘镜像的好处就是它在创建之初并不会给它分配全部大小磁盘容量(这里是 10 GB),而是随着虚拟机中文件的增加而逐渐增大。因此,它对空间的使用更加有效。

现在,你可以通过使用之前创建的 xml 配置文件启动你的虚拟机了。下面的命令将会创建一个虚拟机,然后自动启动它。

$ virsh create vm-test001.xml
Domain vm-test001 created from vm-test001.xml

注意: 如果你对一个已经存在的虚拟机执行了了上面的命令,那么这个操作将会在没有任何警告的情况下抹去那个已经存在的虚拟机的全部信息。如果你已经创建了一个虚拟机,你可能会使用下面的命令来启动虚拟机:

virsh start vm-test001.xml

使用如下命令确认一个新的虚拟机已经被创建并成功的被启动:

virsh list

同样,使用如下命令确认你的虚拟机的虚拟网卡已经被成功的添加到了你先前创建的 br0 网桥中:

brctl show

安装vnc客户端

以ubuntu为例:

apt install vncviewer

使用 virsh 管理虚拟机

下面列出了 virsh 命令的常规用法:

创建客户机并且启动虚拟机:

$ virsh create alice.xml

停止虚拟机并且删除客户机:

$ virsh destroy alice

关闭虚拟机(不用删除它):

$ virsh shutdown alice

暂停虚拟机:

$ virsh suspend alice

恢复虚拟机:

$ virsh resume alice

访问正在运行的虚拟机的控制台:

$ virsh console alice

设置虚拟机开机启动:

$ virsh autostart alice

查看虚拟机的详细信息:

$ virsh dominfo alice

编辑虚拟机的配置文件:

$ virsh edit alice

上面的这个命令将会使用一个默认的编辑器来调用主机配置文件。该配置文件中的任何改变都将自动被libvirt验证其正确性。

查看虚拟机的ip

virsh list 命令查看虚拟机列表:

root@vm00-hosts:~# virsh list
 Id   Name                    State
---------------------------------------
 1    pposV2-dev-node01       running
 2    pposV2-dev-node00       running
 3    pposV2-dev-node02-dbs   running
 30   debian11-aarch64        running
 31   java-dev01              running
 32   java-dev00              running

virsh dumpxml 命令查看mac地址:

root@vm00-hosts:~# virsh dumpxml pposV2-dev-node02-dbs | grep mac
    <partition>/machine</partition>
    <type arch='x86_64' machine='pc-i440fx-5.2'>hvm</type>
      <mac address='52:54:00:e1:9c:c8'/>

arp -n命令查看ip:

root@vm00-hosts:~# arp -n | grep '52:54:00:e1:9c:c8'
192.168.1.233            ether   52:54:00:e1:9c:c8   C                     vmbr211

遇到的问题

  1. 通过ios引导安装系统后,又进入引导安装界面。

原因:kvm软件的缺陷 解决办法:编辑xml配置文件,把 cd 光驱(引入ios文件)的那段去掉,然后重启。

  1. virsh shutdown 命令不起作用

原因: virsh通过reboot、shutdown来重启或关闭对应的虚拟机,其原理是host通过发送acpi指令来控制虚拟机的电源,如果guest系统没有安装acpi服务器或该服务器没有启动,那么虚拟机将不会重启或关闭,那么只有使用destroy 来强制关闭。

解决办法:进入虚拟机系统 安装 acpid服务 apt-get install acpid

  1. virsh shutdown 后 虚拟机消失不见(virsh list --all 命令查看不到 )

原因:暂时未知

解决办法:virsh define --validate /data/kvm/config/vm-test001.xml 命令后就正常了

虚拟机导出/导入

可以用virt-clone 命令克隆一个一模一样的主机,网上有很多资料,略。。。

还有一种更快捷的方式,当cd虚拟光驱安装好一个虚拟机后,将它作为“母虚拟机”,方法如下(以制作好的vm-test001为例):

# 复制虚拟磁盘
cp /data/kvm/images/vm-test001.img /data/kvm/images/vm-test002.img

# 导出虚拟机的配置
virsh dumpxml vm-test001>/data/kvm/config/vm-test002.xml

# uuid命令生产心的uid
uuid

# 编辑vm-test002.xml,保证uuid唯一,vnc端口唯一,把<disk>里的磁盘地址更换成vm-test002.img
vim /data/kvm/config/vm-test002.xml

# 注册vm-test002新主机
virsh define /data/kvm/config/vm-test002.xml

# 启动vm-test002新主机
virsh start vm-test002
克隆虚拟机
#克隆之前,必须先把被克隆的vm-test001虚拟机关掉
virsh shutdown vm-test001
#克隆开始
virt-clone -o vm-test001 -n vm-test002 -f /data/kvm/images/vm-test002.img
#因为克隆之后vm-test002配置跟vm-test001一模一样,因此需要修改vm-test002配置
virsh edit vm-test002
挂载磁盘
#创建磁盘
qemu-img  create -f qcow2 /data/vms/backup_exx_mysql_3.qcow2   -o size=10G,preallocation=metadata
#编辑虚拟机(例如:vm-test001虚拟机),添加硬盘
virsh edit vm-test001
#复制<disk>标签 ......

乐果   发表于   2015 年 05 月 20 日 标签:debianubuntukvm

0

文章评论