十三、Linux中虚拟化的使用

2023-11-10

十三、Linux中虚拟化的使用

13.1、Linux中kvm虚拟化软件的安装及硬件设定

安装条件:
对于Intel的cpu,要有vmx
对于amd的cpu,要有svm

执行cat /proc/cpuinfo | grep vmx查看
在这里插入图片描述
(1)搭建好软件仓库之后,执行
dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools” -y
(2)virt-manager查看虚拟机
(3)systemctl enable --now libvirtd启动虚拟化服务
(4)设定虚拟化服务
在这里插入图片描述
在这里插入图片描述
选择镜像文件
在这里插入图片描述
输入8.0的版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
语言为英语
时区为上海
分区如下
在这里插入图片描述
所有设置完成进入安装界面,等待安装完成。
在这里插入图片描述

13.2、Linux系统中虚拟机中的快照

例:创建虚拟机中的快照node1
虚拟机中快照所在目录/var/lib/libvirt/images/test.qcow2
在这里插入图片描述
cd /var/lib/libvirt/images/test.qcow2然后执行ls查看
在这里插入图片描述
创建快照qemu-img create -f qcow2 -b test.qcow2 node1.qcow2
执行ls可以看到快照node1
在这里插入图片描述
快照创建完成。
例:使用快照node1
在这里插入图片描述
在这里插入图片描述
选择镜像
在这里插入图片描述

13.3、Linux中虚拟机命令管理方式

virt-manager    #查看虚拟机
virsh list      #查看运行的虚拟机
virsh list --all     #列出正在运行和没有运行的虚拟机
virsh start node1    #开启虚拟机node1
virsh shutdown node1 #关闭虚拟机node1,遇到关闭不了的情况点Force Off
virsh destory node1  #直接关闭虚拟机node1,等同于手动点Force Off
virsh-viewer node1   #显示node1

13.4、Linux中虚拟机的迁移

虚拟机中硬件信息目录:/etc/libvirt/qemu/

cd /etc/libvirt/qemu/
vim test.xml

在这里插入图片描述
远程拷贝虚拟机的时候需要拷硬盘和硬件信息。

实验:
真机为Windows
(1)

mv /var/lib/libvirt/images/test.qcow2 /mnt/
mv /etc/libvirt/qemu/test.xml /mnt/

(2)删除之前建立的虚拟机test
在这里插入图片描述
(3)

mv /mnt/test.* /var/lib/libvirt/images/
cd /var/lib/libvirt/images/
virsh create test.xml      #一次性恢复

在这里插入图片描述
但关闭之后test消失。若要永久恢复

virsh define test.xml    #永久恢复

13.5、在vmware中做虚拟化实验

(1)在原有虚拟机基础上添加一块20G的硬盘,硬盘类型为SATA。
在这里插入图片描述
添加完成
在这里插入图片描述
(2)开启虚拟机,在右下角光盘图标右键进行管理,选中以下几项。
在这里插入图片描述
执行df可以看到镜像路径:
/run/media/root/RHEL-8-0-0-BaseOS-x86_64
在这里插入图片描述
(3)

cd /etc/yum.repos.d/
vim fake.repo

内容为

  1 [fake1]
  2 name=AppStream
  3 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/AppStream
  4 gpgcheck=0
  5 
  6 [fake2]
  7 name=BaseOS
  8 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/BaseOS
  9 gpgcheck=0

(3)执行 dnf group list --hidden
(4)安装虚拟化软件
dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools”
(5)开启两个服务 libvirtd 和 libvirt-guests.service
systemctl enable --now libvirtd libvirt-guests.service
(6)对设备进行分区,执行 fdisk /dev/sdb 然后输入两次回车,wq再回车。
在这里插入图片描述
(7)对上设备进行格式化,执行 mkfs.xfs /dev/sdb1 -K
挂载 mount /dev/sdb1 /var/lib/libvirt/images/
注:此挂载为临时挂载,开机无效,临时挂载方法为 vim /etc/rc.d/rc.local输入挂载指令mount /dev/sdb1 /var/lib/libvirt/images/
在这里插入图片描述
然后执行chmod a+x /etc/rc.d/rc.local

(8)对虚拟机硬件信息进程调整让虚拟机可以支持虚拟化
编辑虚拟机设置
在这里插入图片描述
内存大小改为4096MB

13.6、利用网络源安装虚拟机

(1)完成以下设置

dnf install httpd -y
systemctl disable --now firewalld
systemctl enable --now httpd
mkdir /var/www/html/fake
umount dev/sr0
mount /dev/sr0 /var/www/html/fake
chown qemu.qemu /var/lib/libvirt/images/   #恢复之前的权限

(2)安装虚拟机在这里插入图片描述
在这里插入图片描述
进入安装界面
在这里插入图片描述

13.7、虚拟机中网桥网络配置

linux中使用虚拟化默认没有桥接模式,虚拟机配置完成启动后会生成一个接口叫vnet0。
在这里插入图片描述
使用的网络模式为NAT模式,并且选项里没有网桥模式。
在这里插入图片描述

例:在虚拟机中进行网桥网络配置
(1)网卡配置目录:/etc/sysconfig/network-scripts/
执行cd /etc/sysconfig/network-scripts/ 然后复制一份网卡配置文件 cp ifcfg-ens160 ifcfg-br0

vim ifcfg-ens160

  1 TYPE=Ethernet
  2 BOOTPROTO=none
  3 NAME=ens160
  4 DEVICE=ens160
  5 ONBOOT=yes
  6 BRIDGE=br0

vim ifcfg-br0

  1 TYPE=Bride
  2 BOOTPROTO=none
  3 IPADDR=192.168.1.4
  4 NETMASK=255.255.255.0
  5 NAME=br0
  6 DEVICE=br0
  7 ONBOOT=yes

(2)重新加载网络配置

nmcli connection reload
nmcli connection down ens160
nmcli connection up ens160
nmcli connection down br0
nmcli connection up br0
nmcli connection show

在这里插入图片描述
执行virt-manager查看网桥,搭建成功。
在这里插入图片描述
(3)删除之前的虚拟机,新建一个虚拟机,网络模式默认为网桥模式
在这里插入图片描述
finish完成安装。

结论:
如果默认NAT模式,虚拟机的安装会连接virbr0,从virbr路由器获取ip。
如果用网桥模式,则使用br0放到物理网卡ens160,会导致主机安装时候网络获取不到ip的情况,解决方案如下。

例:使用dhcp服务给虚拟机分配ip
(1)安装dhcp服务

dnf install dhcp-server -y

(2)执行

 cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
 vim /etc/dhcp/dhcpd.conf

三处更改

  6 # option definitions common to all supported networks...
  7 option domain-name "fake.org";
  8 option domain-name-servers 114.114.114.114

 30 subnet 192.168.1.0 netmask 255.255.255.0 {
 31   range 192.168.1.0 192.168.1.40;
 32   }

删除32行之后内容。

注:以上三步操作可参照dhcpd服务设置
(3)打开dhcpd服务

systemctl enable --now dhcpd

(4)此时再使用网桥的方式安装虚拟机不会报错,因为dhcp会给虚拟机分配ip
在这里插入图片描述

13.8、虚拟机硬件设定脚本

在虚拟机创建过程中每次都需要做大量硬件设定工作,那么可以考虑用脚本代替手动设定,从而简化安装过程。

例:创建虚拟机设定脚本(以利用网络源安装虚拟机为例)
(1)执行cd /mnt 切换目录进行实验,执行man virt-install 查看安装虚拟机的帮助,然后执行/EXAMPLE 查找相关安装实例。
在这里插入图片描述
(2)编辑脚本文件vim fake.sh

#!/bin/bash
virt-install \
        --location http://192.168.1.4/fake \
        --os-variant rhel8.0 \
        --vcpus 1 \
        --memory 1024 \
        --disk /var/lib/libvirt/images/fake.qcow2,size=8,bus=virtio \
        --name fake \
        --network bridge=br0,model=virtio

(3)删除之前的虚拟机,执行脚本sh fake.sh直接创建出虚拟机fake
在这里插入图片描述
但是这种方法只能一次性用于建立一个名为fake的虚拟机,如何使用脚本建立多个不同名字的虚拟机?步骤如下

(1)如果我们建立一个名为test的脚本,脚本内容为echo hello wold。那么在执行sh test.sh时的效果为
在这里插入图片描述

此时执行sh test.sh haha 无论后面跟什么输出皆为hello world
在这里插入图片描述
(2)test脚本内容改为echo $1保存退出之后执行sh test.sh haha则输出为haha,即脚本的输出为执行脚本指令后跟的字符。
在这里插入图片描述
(3)那么如果把fake.test脚本内容换做

#!/bin/bash
virt-install \   #虚拟机安装命令
        --location http://192.168.1.4/fake \  #指定安装源
        --os-variant rhel8.0 \  #指定安装系统版本
        --vcpus 1 \  #cpu核心数量
        --memory 1024 \  #内存大小
        --disk /var/lib/libvirt/images/$1.qcow2,size=8,bus=virtio \  #硬盘位置,硬盘大小,硬盘工作总线
        --name $1 \   #虚拟机名称
        --network bridge=br0,model=virtio  #虚拟网卡为桥接,网卡工作模式为虚拟输入输出      
                                         
#注意每一行命令和换行符“\”之前要有空格m,且换行符后不能存在字符。

(4)此时执行sh fake.sh test会新建一个名为test的虚拟机
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十三、Linux中虚拟化的使用 的相关文章

  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https

随机推荐

  • ROS Qt环境的搭建及基础知识介绍

    ROS Qt环境的搭建及基础知识介绍 文章目录 ROS Qt环境的搭建及基础知识介绍 1 开发环境搭建 1 1 qtcreator安装 1 2 catkin create qt pkg环境配置 1 3 配置功能包 2 Qt基础 3 Qt编译
  • Python知识点(史上最全)

    Python期末考试知识点 史上最全 python简介 Python是一种解释型语言 Python使用缩进对齐组织代码执行 所以没有缩进的代码 都会在载入时自动执行 数据类型 整形 int 无限大 浮点型 float 小数 复数 compl
  • 区块链节点和用户的介绍

    用户身份 用户身份的概念 用户身份是由用户的公钥地址 用户私钥共同组成 私钥签名 公钥验签 公钥加密 私钥解密 公钥是对外公布的密钥 私钥由用户个人保存 发送交易时用接收方公钥进行加密 发送方私钥进行签名 接收交易时用接收方私钥进行解密 发
  • 【项目实战】基于python+pycharm+OpenCV的信用卡数字识别

    一 pycharm实现参数配置 直接运行程序会报错 usage ocr template match py h i IMAGE t TEMPLATE ocr template match py error the following arg
  • 当AI遇到IoT:开启智能生活的无限可能

    文章目录 1 AI和IoT的融合 1 1 什么是人工智能 AI 1 2 什么是物联网 IoT 1 3 AI和IoT的融合 2 智能家居 2 1 智能家居安全 2 2 智能家居自动化 3 医疗保健 3 1 远程监护 3 2 个性化医疗 4 智
  • 泰勒(Taylor)公式

    泰勒公式 如果函数f x 在含的某个开区间 a b 内具有直到 n 1 阶导数 则可以用泰勒展开公式去逼近原函数 麦克劳林公式 特殊 0 几个常见的初等函数的带有佩亚诺余项的麦克劳林公式
  • Windows10本地搭建网站教程 - 内网穿透发布公网访问

    文章目录 概述 1 搭建一个静态Web站点 2 本地浏览测试站点是否正常 3 本地站点发布公网可访问 3 1 安装cpolar内网穿透 3 2 创建隧道映射公网地址 3 3 获取公网URL地址 4 公网远程访问内网web站点 5 配置固定二
  • 硬件3D加速指南

    硬件3D加速指南 内容 1 解释 2 安装Xorg和配置内核 3 配置直接渲染 4 测试3D加速 5 疑难解答 6 参考 1 解释 什么是硬件3D加速 为什么我需要它 使用硬件3D加速 三维渲染将会使用显卡上的图形处理器来进行 而不会占据宝
  • macOS 软件推荐&避雷指南 - 让 mac 更像 windows 的装机必备软件

    网络上有很多 macOS 软件推荐的文章 但是那些文章大部分有下面的问题 没有结合使用场景 没有差评 从来不会说一个软件有什么缺点 是否稳定 所以这篇文章就围绕下面 2 点展开 安装哪些软件 可以让 macOS 的体验更加接近 window
  • 解决maven依赖冲突,这篇就够了!

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Python电脑随机生成1~100之间的整数, 让用户来猜,猜错时,会提示猜的数 字是大了还是小了,直到用户猜对为止,游戏结束

    定义一个函数 完成用户输入的三个数字的求和 以及在另一个函数求该和的平均值 用到函数传参 函数返回值 def sum num1 num2 num3 return num1 num2 num3 def average num1 num2 nu
  • AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置

    AD默认的丝印不大美观 那么多位号的丝印 想一个个单个去修改显得不现实 这里借助全局批量修改 快速更改丝印的字体 大小 显示中文 相对元件位置 AD20批量修改丝印大小 字体 选中其中一个丝印 右键 查找相似对象 将 Designator
  • COM读书笔记---- 编程工作的简化

    参考书籍 lt
  • Java中InputStream转化为MultipartFile类型

    由于工作需要 涉及到文件类型的转化 实际上MultipartFile有方法可以直接转化为InputStream 但是并没有办法可以从InputStream直接转化为MultipartFile 网上的资料大概看了下 有两种简单的方案Commo
  • ADC-dma死循环问题

    方法一 初始化dma时候 里面会先使能dma 然后打开相应的中断 然后结果会导致main函数中卡死 卡在箭头处 也就是打不开adc和dma 解决方案 全部注释 只留第一个配置dma的函数 11 16 补充 同样的现象 程序卡死在HAL AD
  • stm32Cubemx实用篇(一):PWM控制SG90舵机

    stm32Cubemx 一 PWM控制SG90舵机 本章将介绍使用stm32Cubemx软件配置PWM来控制SG90舵机角度 硬件平台 Stm32H743IIT6 舵机 SG90 0 180 旋转范围 网购5元一个 软件 Stmcubemx
  • [ 容器 ] Docker 基本管理

    目录 一 Docker 概述 1 1 Docker 是什么 1 2 Docker 的宗旨 1 3 容器的优点 1 4 Docker 与 虚拟机的区别 1 5 容器在内核中支持的两种技术 namespace的六大类型 二 Docker核心概念
  • ubuntu卸载软件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 打开终端 你将使用 apt get 命令 这是用于管理已安装程序的通用命令 在卸载程序时 你可能需要输入管理员密码 当你输入密码时 密码将不会被显示 完成输入后按回车即
  • PrintWriter返回乱码的分析及解决

    用response得到输出流 即response getOuptStream 返回值为ServletOutputStream 对象 即JSP的out对象 要么用response得到输出对象PrintWriter即response getWr
  • 十三、Linux中虚拟化的使用

    十三 Linux中虚拟化的使用 13 1 Linux中kvm虚拟化软件的安装及硬件设定 安装条件 对于Intel的cpu 要有vmx 对于amd的cpu 要有svm 执行cat proc cpuinfo grep vmx查看 1 搭建好软件