[ kvm ] 学习笔记 7:KVM 虚拟机创建的几种方式
通过对 qemu-kvm、libvirt 的学习,总结三种创建虚拟机的方式:
(1)通过 qemu-kvm 创建
(2)通过 virt-install 创建
(3)通过 virt-manager 创建
在使用这三种创建虚拟机前提是 宿主机必须支持 cpu 的硬件虚拟化技术(Intel 是 vmx,AMD 是svm),通过下面方式进行查看是否支持:
[root@192.168.118.14 ~]#lscpu | egrep Virtualization
Virtualization: VT-x
Virtualization type: full
通过上面查看,宿主机支持 VT-x 虚拟化技术
创建网桥网络:
[root@192.168.118.14 ~]#yum install libvirt -y
[root@192.168.118.14 ~]#mv /etc/libvirt/qemu/networks/default.xml /tmp/
[root@192.168.118.14 ~]#systemctl stop NetworkManager ; systemctl start libvirtd
# 创建网桥设备:br0
[root@192.168.118.14 ~]#virsh iface-bridge eth0 br0
1. qemu-kvm 创建虚拟机
在 qemu-kvm 创建虚拟机中,又分为:
(1) 直接启动虚拟磁盘文件为虚拟机
(2)通过iso镜像文件安装虚拟机
(1)通过虚拟磁盘文件直接启动的方式
[root@192.168.118.14 ~]#yum install qemu-kvm -y
[root@192.168.118.14 ~]#ln -vs /usr/libexec/qemu-kvm /usr/bin/
[root@192.168.118.14 ~]#mkdir /images
[root@192.168.118.14 ~]#cd /images/
[root@192.168.118.14 /images]#wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-i386-disk.img
# 编写桥接使用的脚本 [root@192.168.118.14 ~]#cat /etc/qemu-ifup
#!/bin/bash
#
BRIDGE=br0
if [ -n $1 ]; then
ifconfig $1 up
brctl addif $BRIDGE $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
[root@192.168.118.14 /images]#qemu-kvm -cpu host -smp 1 -m 512m -drive file=/images/cirros-0.3.5-i386-disk.img,if=virtio,cache=writeback \
-net nic,model=virtio,macaddr=52:54:00:bb:d2:88 -net tap,ifname=vnet0.0,script=/etc/qemu-ifup -daemonize
说明:
-name 虚拟机名称
-cpu 执行虚拟机cpu类型,可通过 -cpu ? 查看支持的cpu类型
-smp 虚拟机cpu数,支持多核心多线程设置 -smp n[,scores=scores][,threads=threads][,sockets=sockets]
-drive 指定虚拟磁盘文件属性设置
file: 指定具体虚拟磁盘文件目录
if: 设置虚拟磁盘文件类型,virtio 为半虚拟化类型
cache: 虚拟磁盘文件属性,是回写(writeback) 还是 透写(writethrough) -nographic 设置虚拟机工作方式
不写直接在前台执行,Ctrl + C 会终止虚拟机运行
-nographic 直接命令行显示在控制端
-daemonize 后台执行虚拟机进程 /etc/qemu-ifup 脚本:
#!/bin/bash
#
BRIDGE=br0
if [ -n $1 ]; then
ip link set $1 up
sleep 1
brctl addif $BRIDGE $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no interface specified."
exit 1
fi
(2) 通过 iso 文件安装虚拟机
# 自行准备 iso 镜像文件
[root@192.168.118.14 ~]#ls /mnt/iso/
CentOS-7-x86_64-DVD-1511.iso # 安装 vnc 客户端 和 x11 需要的插件
[root@192.168.118.14 ~]#yum install tigervnc xorg-x11-xauth -y
[root@192.168.118.14 ~]#qemu-img create -f qcow2 -o size=20G,preallocation=metadata /images/Centos7.qcow2
[root@192.168.118.14 ~]#qemu-kvm -name 'centos7' -cpu host -smp 1 -m 1024m -drive file=/images/Centos7.qcow2 -cdrom /mnt/iso/CentOS-7-x86_64-DVD-1511.iso -daemonize
# 如果这里召唤不出界面,建议重新开启一个终端执行
[root@192.168.118.14 ~]#vncviewer :5900
如图:
2. virt-install 创建虚拟机
在使用 virt-install 创建虚拟机的时候,首先把一些要使用的程序包安装:
yum install virt-viewer dejavu-sans-fonts.noarch xorg-x11-xauth -y 说明:
virt-viewer 用于通过vnc直接查看虚拟机控制台
dejavu-sans-fonts.noarch xorg-x11-xauth 用于通过 xmanager直接界面访问
在 virt-install 中创建虚拟机的方式有以下几种:
(1)直接启动虚拟磁盘文件为虚拟机
virt-install --name test --memory 512 --disk /images/cirros-0.3.5-i386-disk.img --import --network bridge=br0 --graphics=vnc
--name 虚拟机名
--memory 内存(默认单位: MB)
--disk 指定虚拟磁盘文件
--import 导入虚拟磁盘文件
--network 执行网络,不指定网络是无法启动的。bridge 执行网桥设备
--graphics 通过什么方式访问界面,这里使用 vnc ,否则无法输入。
(2)通过 iso 文件安装虚拟机
首先通过 qemu-img 创建虚拟磁盘文件
#qemu-img create -f qcow2 -o size=20G,preallocation=metadata CentOS7.qcow2
#virt-install --name centos --vcpus 2 --memory 2048 --disk /images/CentOS7.qcow2,format=qcow2,bus=virtio,cache=writeback \
--network bridge=br0,model=virtio --cdrom /usr/local/src/CentOS-7-x86_64-Minimal-1708.iso --graphics vnc --noautoconsole --name 虚拟机名
--memory 内存(默认单位: MB)
--disk 指定虚拟磁盘文件,format指定虚拟磁盘格式,bus 指定半虚拟化(virtio) cache 指定磁盘缓存(回写)
--network 执行网络,不指定网络是无法启动的。bridge 执行网桥设备 model 指定虚拟网卡为半虚拟化,优化性能
--graphics 通过什么方式访问界面,这里使用 vnc ,否则无法输入。
--noautoconsole 不用在界面直接弹出安装界面,后面可以通过 virt-view centos 唤出图形界面
3. virt-manager 创建虚拟机
virt-manager 是通过图形界面直接鼠标选择安装,这个不再演示。注意以下几个点:
(1)通过命令 virt-manager 无法唤出界面,需要安装 xorg-x11-xauth , 然后重新开启一个会话执行 virt-manger
(2)如果 virt-manager 出现乱码,需要安装 dejavu-sans-mono-fonts
(3)注意防火墙和 selinux
[ kvm ] 学习笔记 7:KVM 虚拟机创建的几种方式的更多相关文章
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
---------------------------------------------------------------------------------------------------- ...
- 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象
一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...
- Android学习笔记_74_Android回调函数触发的几种方式 广播 静态对象
一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...
- Android(java)学习笔记191:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- react学习笔记1之声明组件的两种方式
//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- Qt学习笔记----信号与槽实现的四种方式
1.以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked() 2.选择菜单“编辑”,找 ...
- V-rep学习笔记:机器人模型创建3—搭建动力学模型
接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierar ...
随机推荐
- commons-dbutils 字段名称转换,支持驼峰字段名
你能遇到的问题,只要是普遍存在的,大家都会遇到,那么,就一定有现成的解决方案. 在阅读 commons-dbutils 的文档时, BeanHandler 的第二个参数可以达到这个目的.只需传入一个实 ...
- hibernate之关联关系一对多
什么是关联(association) 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如: public class B{ private St ...
- 高级接口--OAuth2.0网页授权
官方文档 Auth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某以网站,移动或桌面应用上存储的司名的资源(如用户个人信息,照片,视频,联系人列表),而无需将用户名和密码提供给第三 ...
- AttributeError: module 'tensorflow' has no attribute 'set_random_seed'
anaconda3 python3.7 安装好tensorflow 后出现上面的问题,原因是安装的tensorflow版本是2.0的,所以使用以前的代码tensorflow中的函数不兼容.
- Day12:H5
掌握HTML+CSS+JavaScript相关知识 了解HTML5的结构标签: 掌握新增和删去的标签及相关属性 运用HTML5相关知识进行实际开发 下面哪种语法中是对大小写进行区分的? XHTML H ...
- mysql创建账号、授权、数据导出、导入
1.账号创建及授权 grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant opti ...
- 模板 - 字符串/数据结构 - 字典树/Trie
使用静态数组的nxt指针的设计,大概比使用map作为nxt指针的设计要快1倍,但空间花费大概也大1倍.在数据量小的情况下,时间和空间效率都不及map<vector,int>.map< ...
- 【CSP模拟赛】坏天平(数学&思维)
蹭兄弟学校的题目做还不用自己出题的感觉是真的爽 题目描述 nodgd有一架快要坏掉的天平,这架天平右边的支架有问题,如果右边的总重量比左边多太多,天平就彻底坏掉了.现在nodgd手上有n种砝码,质量分 ...
- React.createElement 与 JSX
DOM 向JSX的演进 网页由 DOM 元素构成.React DOM 并不是浏览器的 DOM,而React DOM 只是用来告诉浏览器如何创建 DOM 的方法.通常情况下,我们并不需要 React 就 ...
- springMvc---WebMvcConfigurationSupport
该类提供了主要的 MVC 配置方法,通过直接继承 WebMvcConfiguration ,并在继承类上 加上 @EnableWebMvc 和 @Configuration 注解之后.便可以在子类中实 ...