1.KVM是Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20以後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,因此相對於Xen,其核心源碼不多。KVM已成爲學術界的主流VMM之一node
2.KVM的虛擬化須要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的徹底虛擬化。而Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的徹底虛擬化。但Xen自己有本身的進程調度器,存儲管理模塊等,因此代碼較爲龐大。廣爲流傳的商業系統虛擬化軟件VMware ESX系列是基於軟件模擬的Full-Virtualizationlinux
IDC數據中心設備租用 → 提出虛擬化方案,出現OpenVZ → 共享優化出現Xen,提出半虛架構,可是操做複雜 → 進入全虛KVM,不須要和內核接觸,只須要安裝管理工具vim
1.公司部分Linux服務器利用率不高,爲充分利用這些Linux服務器,能夠部署KVM,在物理機上運行多個業務系統
2.例如在運行Nginx的服務器.上部署KVM,而後在虛擬機上運行Tomcatbash
KVM模塊直接整合在Linux內核中服務器
1.虛擬機建立
2.虛擬機內存分配
3.虛擬CPU寄存器讀寫
4.虛擬CPU運行網絡
1.模擬PC硬件的用戶控件組件
2.提供I/O設備模型及訪問外設的途徑架構
1.客戶模式(虛擬機)
2.用戶模式(工具)
3.內核模式ide
1.須要先添加一塊磁盤:大小爲20G工具
2.處理器的設置:虛擬化引擎的選項所有勾優化
[root@client ~]# cd /dev [root@client dev]# ls sda sda1 sda2 sda3 sda4 sda5 sdb #此時有sdb硬盤
[root@client dev]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0xba1e8e30 建立新的 DOS 磁盤標籤。
命令(輸入 m 獲取幫助):n #輸入n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #輸入p
分區號 (1-4,默認 1):
起始 扇區 (2048-41943039,默認爲 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認爲 41943039):
將使用默認值 41943039
分區 1 已設置爲 Linux 類型,大小設爲 20 GiB
命令(輸入 m 獲取幫助):w #輸入w保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盤。
[root@client dev]# mkfs /dev/sdb1 #格式化
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在寫入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@client dev]# mkdir /data #建立掛載
[root@client dev]# mount /dev/sdb1 /data/
[root@client data]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/sdb1 ext2 20G 44M 19G 1% /data
#此時顯示已經掛載
#電腦中有CentOS 7鏡像文件的文件夾須要進行共享,設置帳戶Everyone能夠進行讀取,而後使用smbclient -L查看掛載
[root@client data]# smbclient -L //192.168.10.190/
Enter SAMBA\root's password:
OS=[Windows 10 Home China 18363] Server=[Windows 10 Home China 6.3]
Sharename Type Comment --------- ---- ------- database Disk F$ Disk 默認共享 gfs Disk IPC$ IPC 遠程 IPC ISO Disk rpm Disk
#此時顯示ISO文件夾被共享
[root@client data]# mount.cifs //192.168.10.190/ISO /mnt
Password for root@//192.168.10.190/ISO:
[root@client data]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/sdb1 20G 44M 19G 1% /data
//192.168.10.190/ISO 226G 173G 54G 77% /mnt
#此時顯示文件成功掛載在mnt目錄下
[root@client data]# cd /mnt/
[root@client mnt]# ls
CentOS-7-x86_64-DVD-1708.iso
#### 安裝KVM: ```bash [root@client mnt]# yum list #進行自檢 [root@client mnt]# yum groupinstall "GNOME Desktop" -y #桌面環境 [root@client mnt]# yum install qemu-kvm -y #KVM模塊 [root@client mnt]# yum install qemu-kvm-tools -y #KVM調試工具 [root@client mnt]# yum install virt-install -y #構建虛擬機的命令工具 [root@client mnt]# yum install qemu-img -y #qemu組件,建立磁盤,啓動虛擬機 [root@client mnt]# yum install bridge-utils -y #網絡支持工具 [root@client mnt]# yum install libvirt -y #虛擬機管理工具 [root@client mnt]# yum install virt-manager -y #圖像化管理虛擬機 [root@client mnt]# egrep '(vmx|svm)' /proc/cpuinfo #查看是否支持虛擬化 [root@client mnt]# lsmod | grep kvm #檢查KVM是否安裝 kvm_intel 170086 0 kvm 566340 1 kvm_intel irqbypass 13503 1 kvm [root@client mnt]# systemctl start libvirtd [root@client mnt]# systemctl enable libvirtd #開機自啓動
[root@client mnt]# cd /data/ [root@client data]# mkdir vdisk viso [root@client data]# ls lost+found vdisk viso [root@client data]# cp -r /mnt/CentOS-7-x86_64-DVD-1708.iso /data/viso/ [root@client data]# ls viso/ CentOS-7-x86_64-DVD-1708.iso [root@client data]# cd /etc/sysconfig/network-scripts/ [root@client network-scripts]# cp -p ifcfg-ens33 ifcfg-br0 [root@client network-scripts]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.18.145 netmask 255.255.255.0 broadcast 192.168.18.255 inet6 fe80::6a0c:e6a0:7978:3543 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a4:cb:c7 txqueuelen 1000 (Ethernet) RX packets 6559352 bytes 9624037086 (8.9 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 364406 bytes 30690747 (29.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ......此處省略多行 [root@client network-scripts]# vim ifcfg-ens33 #在末行按o轉下行插入 BRIDGE=br0 #插入完成後按Esc退出插入模式,輸入:wq保存退出 [root@client network-scripts]# vim ifcfg-br0 TYPE="bridge" #Ethernet改成bridge PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" #dhcp改成static DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="br0" #ens33改成br0 DEVICE="br0" #ens33改成br0 ONBOOT="yes" IPADDR=192.168.18.145 #輸入ens33的IP地址 NETMASK=255.255.255.0 #輸入子網掩碼 GATEWAY=192.168.18.1 #輸入網關 #修改退出插入模式,輸入:wq保存退出 [root@client network-scripts]# service network restart #重啓網絡服務 Restarting network (via systemctl): [ 肯定 ] [root@client network-scripts]# ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.18.145 netmask 255.255.255.0 broadcast 192.168.18.255 inet6 fe80::e169:c641:eeea:50f7 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:a4:cb:c7 txqueuelen 1000 (Ethernet) RX packets 20 bytes 1298 (1.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 35 bytes 4588 (4.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:a4:cb:c7 txqueuelen 1000 (Ethernet) RX packets 6559967 bytes 9624087097 (8.9 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 364793 bytes 30733147 (29.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ......如下省略多行 #橋接以後原來ens33的網卡IP到br0上了
[root@client ~]# virt-manager