这里写自定义目录标题

  • 一.KVM简介
  • 二.KVM虚拟化平台构建
  • 三.创建虚拟机并安装CentOS7

一.KVM简介

KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

关于KVM:

1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

KVM 与 vbox的区别:
vbox 是由 qemu 改写而成,包含大量qemu 代码。

1).可以使用于"不支持"虚拟化技术的cpu。
2).值得说的一点:vbox 在图形方面比较好,能进行2D 3D加速;但cpu控制不理想(估计是因为图形支持的缘故);操作上有独立的图形界面,易于上手。

kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。

1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。

总体而言:在支持虚拟化的情况下,vbox 和 kvm 的性能差不多,主要是面向对象不同:kvm适用于服务器,vbox适用于桌面应用

qemu 全称Quick Emulator。是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。所以,大家不要把概念弄错了,盲目的安装qemu和kqemu。

KVM内存管理:
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。

二.KVM虚拟化平台构建

1.安装准备
查看硬件是否支持虚拟化。命令:

[root@localhost ~]# egrep ‘(vmx|svm)’ /proc/cpuinfo


注意:要有 vmx 或 svm 的标识才行。vmx标识intel,svm代表AMD。

2.安装KVM
由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用KVM即可:
启用KVM模块:

[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm

3.KVM虚拟机创建和管理所依赖的组件介绍

KVM虚拟机的创建依赖qemu-kvm:
虽然kvm的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而qemu-kvm则是这样一种技术。它补充了kvm技术的不足,而且在性能上对kvm进行了优化。

我们还可以使用virt-manager,virt-viewer来管理虚拟机;

我们在创建和管理KVM虚拟机时还需要libvirt这个重要的组件:

它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,都可以调用libvirt提供的api对虚拟机进行管理。有这么多的虚拟机技术,它为何能提供这么多的管理功能那。是因为它的设计理念,它是面向驱动的架构设计。对任何一种虚拟机技术都开发设计相对于该技术的驱动。这样不同虚拟机技术就可以使用不同驱动,而且相互直接不会影响,方便扩展。而且libvirt提供了多种语言的编程接口,可以直接通过编程,调用libvirt提供的对外接口实现对虚拟机的操作。如今流行的云计算中的IaaS是与该库联系相当密切的。通过下图可以看出它的架构设计思想。

4.安装KVM所需组件

[root@localhost ~]# yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm

安装完成后启动libvirtd服务:

[root@localhost ~]# service libvirtd start

查看是否安装正确

使用网桥管理命令查看:

像VMware Workstation中我们需要创建物理桥接设备,可以使用virsh创建桥设备关联网卡到桥接设备上:
需要将NetworkManager服务关闭,开机启动也关闭:

[root@localhost ~]# chkconfig NetworkManager off
[root@localhost ~]# service NetworkManager stop

然后在创建桥接设备及关联网卡到桥接设备上:

[root@localhost ~]# virsh iface-bridge enp61s0f0 br0


查看桥接设备:


列表中多了br0,说明桥接成功。

三.创建虚拟机并安装CentOS7

将服务成功启动后,我们就可以使用KVM安装虚拟机了,首先需要准备一个操作系统的镜像文件,我这里用的是CentOS7的镜像文件:

[root@localhost ~]# mkdir kvm_data
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ls |grep Cent
CentOS-7-x86_64-DVD-1708.iso
[root@localhost tmp]#

使用命令行安装这个CentOS7镜像文件:

创建一个名为gurobi的1个8核cpu,内存容量为512M的,硬盘容量为1TB
[root@localhost ~]# virt-install --name=gurobi --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/kvm_data/gurobi.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args=“console=tty0 console=ttyS0”

命令说明:

–name 指定虚拟机的名称
–memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
–vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
–os-type 指定虚拟机安装的操作系统类型
–os-variant 指定系统的发行版本
–location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
–disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
–bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
–graphics 指定是否开启图形
–console 定义终端的属性,target_type 则是定义终端的类型
–extra-args 定义终端额外的参数

附录:virt-install参数说明

usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]从指定安装源创建新虚拟机。optional arguments:-h, --help            show this help message and exit--version             show program's version number and exit--connect URI         通过 libvirt URI 连接到虚拟机管理程序通用选项:-n NAME, --name NAME  客户机实例名称--memory MEMORY       Configure guest memory allocation. Ex:--memory 1024 (in MiB)--memory 512,maxmemory=1024--memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2--vcpus VCPUS         配置客户机虚拟 CPU(vcpu) 数量。例如:--vcpus 5--vcpus 5,maxcpus=10,cpuset=1-4,6,8--vcpus sockets=2,cores=4,threads=2--cpu CPU             CPU model and features. Ex:--cpu coreduo,+x2apic--cpu host-passthrough--cpu host--metadata METADATA   配置客户机元数据。例如:--metadata name=foo,title="My pretty title",uuid=...--metadata description="My nice long description"安装方法选项:--cdrom CDROM         光驱安装介质-l LOCATION, --location LOCATION安装源 (例如:nfs:host:/path, http://host/path,ftp://host/path)--pxe                 使用 PXE 协议从网络引导--import              在已有的磁盘镜像中构建客户机--livecd              将光驱介质视为 Live CD-x EXTRA_ARGS, --extra-args EXTRA_ARGS将附加参数添加到由 --location引导的内核中--initrd-inject INITRD_INJECT添加指定文件到由 --location 指定的 initrd根中--os-variant DISTRO_VARIANT在客户机上安装的操作系统,例如:'fedora18'、'rhel6'、'winxp' 等。--boot BOOT           配置客户机引导设置。例如:--boot hd,cdrom,menu=on--boot init=/sbin/init (针对容器)--idmap IDMAP         为 LXC 容器启用用户名称空间。例如:--idmap uid_start=0,uid_target=1000,uid_count=10设备选项:--disk DISK           指定存储的各种选项。例如:--disk size=10 (在默认位置创建 10GiB 镜像)--disk /my/existing/disk,cache=none--disk device=cdrom,bus=scsi--disk=?-w NETWORK, --network NETWORK配置客户机网络接口。例如:--network bridge=mybr0--network network=my_libvirt_virtual_net--network network=mynet,model=virtio,mac=00:11...--network none--network help--graphics GRAPHICS   配置客户机显示设置。例如:--graphics vnc--graphics spice,port=5901,tlsport=5902--graphics none--graphics vnc,password=foobar,port=5910,keymap=ja--controller CONTROLLER配置客户机控制器设备。例如:--controller type=usb,model=ich9-ehci1--input INPUT         配置客户机输入设备。例如:--input tablet--input keyboard,bus=usb--serial SERIAL       配置客户机串口设备--parallel PARALLEL   配置客户机并口设备--channel CHANNEL     配置客户机通信通道--console CONSOLE     配置文本控制台连接主机与客户机--hostdev HOSTDEV     配置物理 USB/PCI 等主机设备与客户机共享--filesystem FILESYSTEM传递主机目录到客户机。例如:--filesystem /my/source/dir,/dir/in/guest--filesystem template_name,/,type=template--sound [SOUND]       配置客户机声音设备仿真--watchdog WATCHDOG   配置客户机 watchdog 设备--video VIDEO         配置客户机视频硬件。--smartcard SMARTCARD配置客户机智能卡设备。例如:--smartcard mode=passthrough--redirdev REDIRDEV   配置客户机重定向设备。例如:--redirdev usb,type=tcp,server=192.168.1.1:4000--memballoon MEMBALLOON配置客户机 memballoon 设备。例如:--memballoon model=virtio--tpm TPM             配置客户机 TPM 设备。例如:--tpm /dev/tpm--rng RNG             Configure a guest RNG device. Ex:--rng /dev/urandom--panic PANIC         配置客户机 panic 设备。例如:--panic default--memdev MEMDEV       Configure a guest memory device. Ex:--memdev dimm,target_size=1024客户机配置选项:--security SECURITY   设置域安全驱动配置。--cputune CPUTUNE     Tune CPU parameters for the domain process.--numatune NUMATUNE   为域进程调整 NUMA 策略。--memtune MEMTUNE     为域进程调整内存策略。--blkiotune BLKIOTUNE为域进程调整 blkio 策略。--memorybacking MEMORYBACKING为域进程设置内存后备策略。例如:--memorybacking hugepages=on--features FEATURES   设置域 <features> XML。例如:--features acpi=off--features apic=on,eoi=on--clock CLOCK         设置域 <clock> XML。例如:--clock offset=localtime,rtc_tickpolicy=catchup--pm PM               配置 VM 电源管理功能--events EVENTS       配置 VM 生命周期管理策略--resource RESOURCE   配置 VM 资源分区(cgroups)--sysinfo SYSINFO     Configure SMBIOS System Information. Ex:--sysinfo emulate--sysinfo host--sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...--sysinfo system_manufacturer=System_Corp.,system_product=Computer,...--sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...--qemu-commandline QEMU_COMMANDLINEPass arguments directly to the qemu emulator. Ex:--qemu-commandline='-display gtk,gl=on'--qemu-commandline env=DISPLAY=:0.1虚拟化平台选项:-v, --hvm             这个客户机应该是一个全虚拟化客户机-p, --paravirt        这个客户机应该是一个半虚拟化客户机--container           这个客户机应该是一个容器客户机--virt-type HV_TYPE   要使用的管理程序名称 (kvm, qemu, xen, ...)--arch ARCH           模拟 CPU 架构--machine MACHINE     机器类型为仿真类型其它选项:--autostart           主机启动时自动启动域。--transient           Create a transient domain.--wait WAIT           请等待数分钟以便完成安装。--noautoconsole       不要自动尝试连接到客户端控制台--noreboot            安装完成后不启动客户机。--print-xml [XMLONLY]打印生成的 XML 域,而不是创建客户机。--dry-run             运行安装程序,但不创建设备或定义客户机。--check CHECK         启用或禁用验证检查。例如:--check path_in_use=off--check all=off-q, --quiet           抑制非错误输出-d, --debug           输入故障排除信息

开始安装后,正常的情况下会进入到这样一个界面:

这是让你配置语言、时区、安装源、网络、密码等信息,就和我们在VMware里安装CentOS虚拟机是一样的,只不过这个是命令行形式,而VMware里是图形界面罢了。

首先设置语言,按数字1,回车进入以下界面:

例如我要选Chinese就按数字68并回车即可,回车之后会让你选择是中文简体还是繁体,也是按下相应的数字并回车即可:

配置完成之后又会再次回到配置界面,设置时区:



设置root密码:

开始安装系统:

一切顺利,安装成功!

这时我们是处于一个虚拟终端的,如果要退出来虚拟机,应该说是切出来,按Ctrl + ] 即可。
切出虚拟机后,可以看到/kvm_data/目录下多了一个虚拟机的磁盘目录:

管理虚拟机的一些常用命令:

[root@localhost ~]# virsh console xxx # 进入指定的虚拟机,进入的时候还需要按一下回车
[root@localhost ~]# virsh start xxx # 启动虚拟机
[root@localhost ~]# virsh shutdown xxx # 关闭虚拟机
[root@localhost ~]# virsh destroy xxx # 强制停止虚拟机
[root@localhost ~]# virsh undefine xxx # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@localhost ~]# virsh autostart xxx # 设置宿主机开机时该虚拟机也开机
[root@localhost ~]# virsh autostart --disable xxx # 解除开机启动
[root@localhost ~]# virsh suspend xxx # 挂起虚拟机
[root@localhost ~]# virsh resume xxx # 恢复挂起的虚拟机

配置虚拟机里IP:

[root@localhost ~]# virsh console study01
Connected to domain study01
Escape character is ^]

[root@localhost ~]# ip addr # 此时还没有能联网的IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:65:d3:3f brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# dhclient eth0 # 获取IP地址
[root@localhost ~]# ip addr # 此时可以看到已经有IP地址了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:65:d3:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.77.140/24 brd 192.168.77.255 scope global dynamic eth0
valid_lft 1793sec preferred_lft 1793sec
inet6 fe80::5054:ff:fe65:d33f/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# yum install -y net-tools # 获取到IP能联网后安装网络管理工具
[root@localhost ~]# ifconfig # 安装完之后就可以使用ifconfig命令了
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.77.140 netmask 255.255.255.0 broadcast 192.168.77.255
inet6 fe80::5054:ff:fe65:d33f prefixlen 64 scopeid 0x20
ether 52:54:00:65:d3:3f txqueuelen 1000 (Ethernet)
RX packets 4404 bytes 13614102 (12.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2480 bytes 139445 (136.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]#
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vi ifcfg-eth0 # 修改ONBOOT的值为yes
ONBOOT=yes
[root@localhost network-scripts]# systemctl restart network # 重启网卡服务

以上就完成了一台虚拟机的搭建和配置工作。
感谢:https://blog.51cto.com/zero01/2083896
https://www.cnblogs.com/luckyall/p/6203008.html

cento7安装kvm并通过kvm命令行安装centos7相关推荐

  1. matlab2016b ubuntu命令行安装 + matconvnet的安装

    0. 下载安装包 下载的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso. 1. 拷贝 ...

  2. 客户端dmesg_linux命令行安装oracle客户端 - 卡饭网

    linux安装oracle客户端 linux安装oracle客户端 1.准备好所需要的安装包 oracle-instantclient-basic-10.2.0.5-1.i386.rpm oracle ...

  3. Ubuntu 14.04使用命令行安装VirtualBox

    Ubuntu 14.04使用命令行安装VirtualBox 基本安装命令: #sudo sh -c 'echo "deb http://download.virtualbox.org/vir ...

  4. linux添加磁盘后进入grub,从硬盘安装 Linux 和从 GRUB 命令行启动操作系统

    标题 +=================================================+ |  从硬盘安装 Linux 和从 GRUB 命令行启动操作系统  | +======== ...

  5. 安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法

    安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法 参考文章: (1)安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法 (2)https:// ...

  6. mysql命令行安装报错_centos命令行安装mysql随机密码查看方法(遇到问题及其解决办法)...

    mysql初次命令行安装登录时报错: 未输入密码:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwo ...

  7. websphere7 linux 命令行安装(静默安装)

    1 登陆root用户,解压该安装包 was.cd.70011.trial.base.opt.linux.ia32.tar.gz 2.编辑配置文件responsefile.nd.txt. respons ...

  8. Appium 命令行安装教程

    本文仅供学习交流使用,如侵立删!demo下载见文末 命令行安装Appium 安装node.js:必须安装12.0版本以上 Node.js官网 : http://nodejs.cn/ 安装淘宝npm(c ...

  9. androidsdktools安装_如何命令行安装Android SDK Build Tools(构建工具)?

    Android构建工具安装的问题 我想从命令行建立Android开发环境,遇到了如下问题: wget http://dl.google.com/android/android-sdk_r22.0.5- ...

最新文章

  1. python解多项式方程_python – SymPy不能求解四阶多项式方程
  2. 五个最佳案例带你解读Node.js的前后之道
  3. 获取文件名称的两个函数
  4. java网络编程(五)
  5. centos进入单用户模式
  6. 谓词筛选表达式的扩展库PredicateLib
  7. 燕山大学数字通信计算机仿真课程设计,燕山大学数字通信计算机仿真课程设计模板...
  8. menu什么意思中文意思_pipeline什么意思
  9. Java JDBC Druid
  10. 可变集合和不可变集合
  11. verilog中阻塞赋值与 非阻塞赋值的区别
  12. 接活,你为啥不行,之懒
  13. 关于恶意DNS请求监控的一点小思路
  14. 苹果手机网速慢_都2020年了,该不该换5G手机?
  15. C++ emplace_back用法介绍
  16. pandas DataFrame数据重命名列名的几种方式
  17. 知云文献翻译打不开_最新版知云文献翻译 | 内附软件安装包
  18. 主菜单在c语言中的作用,C语言 如何实现返回主菜单????
  19. 程序员潜规则之痛——“JAVA 之父”也遭遇过
  20. Linux 单独编译驱动模块(ko文件)

热门文章

  1. 2022全球智博会如约将至 新设工业视觉重磅展区
  2. OAK拖拽式图形化编程使用教程
  3. 全志h6对比晶晨s905_全志H6,最强画质4K机顶盒解决方案
  4. 【智能优化算法】基于人工蜂群算法求解多目标优化问题附matlab代码
  5. android 根据正则将字符串分割成数组(包含规则中的字符)
  6. 微信跳一跳辅助脚本(神奇的战士版本)安装过程的各种问题合集(附教程连接)
  7. JSON编辑工具绿色版
  8. ofd格式文档和pdf的区别
  9. ArcGIS在城乡规划中的应用【1】——地形分析
  10. next()和nextLine()区别