当前位置: 首页 > article >正文

告别手动配置!用virt-install一键创建KVM虚拟机的5个实战脚本(附CentOS/Ubuntu示例)

告别手动配置用virt-install一键创建KVM虚拟机的5个实战脚本附CentOS/Ubuntu示例在虚拟化技术日益普及的今天KVM作为Linux内核原生支持的虚拟化解决方案凭借其高性能和低开销成为众多运维工程师的首选。然而每次创建虚拟机时重复输入冗长的命令行参数不仅效率低下还容易出错。本文将带你探索如何通过精心设计的virt-install脚本实现虚拟机创建的自动化彻底告别手动配置的繁琐。无论你是需要快速部署测试环境还是构建标准化的生产虚拟机模板这些经过实战检验的脚本都能大幅提升工作效率。我们将从基础配置到高级技巧逐步拆解每个脚本的设计思路和关键参数让你在15分钟内掌握批量创建虚拟机的核心方法。1. 环境准备与基础概念在开始编写自动化脚本之前确保你的系统已正确配置KVM环境。运行以下命令检查虚拟化支持egrep -c (vmx|svm) /proc/cpuinfo # 应返回大于0的值 lsmod | grep kvm # 应显示kvm_intel或kvm_amd模块KVM虚拟化的核心优势在于其接近原生性能的特性和紧密的内核集成。与容器技术相比虚拟机提供了完整的系统隔离特别适合需要独立内核或特定系统配置的场景。virt-install作为创建虚拟机的命令行工具相比图形界面操作具有以下不可替代的优势可重复性脚本化配置确保每次创建的虚拟机参数一致批量化通过循环或变量替换实现批量部署自动化集成可无缝嵌入CI/CD流程或配置管理系统远程执行通过SSH即可完成全部操作无需图形界面提示虽然本文示例基于CentOS和Ubuntu但脚本逻辑适用于任何支持KVM的Linux发行版。建议使用最新稳定版的libvirt和qemu组件以获得最佳兼容性。2. 基础虚拟机创建脚本解析让我们从一个最基础的本地ISO安装脚本开始这是大多数用户接触KVM虚拟化的起点。以下示例展示了如何创建2核CPU、4GB内存的Ubuntu 22.04虚拟机#!/bin/bash VM_NAMEubuntu22-base ISO_PATH/var/lib/libvirt/images/ubuntu-22.04-live-server-amd64.iso DISK_PATH/var/lib/libvirt/images/${VM_NAME}.qcow2 virt-install \ --name ${VM_NAME} \ --ram 4096 \ --vcpus 2 \ --disk path${DISK_PATH},size20,formatqcow2 \ --os-type linux \ --os-variant ubuntu22.04 \ --network bridgevirbr0 \ --graphics spice \ --cdrom ${ISO_PATH}这个脚本中的每个参数都有其特定作用--disk使用qcow2格式的稀疏磁盘实际占用空间随使用量增长--os-variant优化虚拟机配置以获得更好的性能表现--network连接到默认的NAT网络桥接virbr0--graphics启用SPICE协议实现高性能远程桌面对于需要频繁创建相似配置虚拟机的场景可以将上述脚本保存为create_vm.sh并添加可执行权限。更高级的做法是使用变量替换实现参数化#!/bin/bash read -p Enter VM name: VM_NAME read -p Enter RAM in MB: RAM_SIZE read -p Enter vCPU count: CPU_COUNT virt-install \ --name ${VM_NAME} \ --ram ${RAM_SIZE} \ --vcpus ${CPU_COUNT} \ ...3. 高级网络与存储配置生产环境往往需要更复杂的网络和存储配置。下表对比了三种常见的网络连接方式及其适用场景网络类型配置参数IP分配外部访问典型用途NAT默认--network bridgevirbr0DHCP端口转发开发测试桥接网络--network bridgebr0DHCP/静态直接访问生产环境隔离网络--network networkprivate手动配置不可访问安全测试对于需要高性能磁盘IO的场景virtio驱动配合raw格式磁盘是最佳选择。以下脚本展示了如何创建使用virtio设备和桥接网络的CentOS 8虚拟机#!/bin/bash VM_NAMEcentos8-prod ISO_PATH/var/lib/libvirt/images/CentOS-8-x86_64-minimal.iso DISK_PATH/var/lib/libvirt/images/${VM_NAME}.raw virt-install \ --name ${VM_NAME} \ --ram 8192 \ --vcpus 4 \ --disk path${DISK_PATH},size50,formatraw,busvirtio \ --controller typescsi,modelvirtio-scsi \ --network bridgebr0,modelvirtio \ --os-variant centos8 \ --location ${ISO_PATH} \ --extra-argsinst.kshttp://kickstart.example.com/centos8.cfg关键优化点包括使用raw格式避免qcow2的元数据开销busvirtio参数启用高性能虚拟IO设备--location支持网络安装源而非本地ISO--extra-args传递Kickstart自动安装配置注意桥接网络要求主机物理网卡已配置为桥接模式。使用前请确保br0等桥接接口已正确设置。4. 自动化安装与配置对于需要批量部署的场景结合Kickstart或Cloud-Init实现完全无人值守安装至关重要。以下是通过HTTP获取Kickstart配置的自动化示例#!/bin/bash VM_NAMEcentos7-auto KS_URLhttp://192.168.1.100/ks/centos7-minimal.cfg virt-install \ --name ${VM_NAME} \ --ram 2048 \ --vcpus 2 \ --disk path/var/lib/libvirt/images/${VM_NAME}.qcow2,size15 \ --os-variant centos7.0 \ --location http://mirrors.aliyun.com/centos/7/os/x86_64/ \ --network bridgevirbr0 \ --graphics none \ --console pty,target_typeserial \ --extra-argsks${KS_URL} consolettyS0,115200n8这个脚本有几个值得注意的细节--graphics none禁用图形控制台纯文本安装--console配置串行控制台用于文本输出--extra-args传递内核参数指定Kickstart位置和串行控制台对于Ubuntu系统可以使用Cloud-Init实现类似的自动化。准备一个包含配置的ISO镜像后通过以下方式附加--disk path/path/to/cloud-init.iso,devicecdrom \5. 性能优化与特殊场景针对不同工作负载虚拟机参数需要相应调整。以下表格总结了常见应用场景的优化建议应用类型vCPU建议内存建议磁盘格式网络模型数据库固定分配大页内存rawvirtio桥接virtioWeb服务超额分配常规分配qcow2默认NATCI/CD节点动态调整按需分配qcow2zstd隔离网络开发环境1-2核心2-4GBqcow2默认NAT对于需要GPU加速的场景可以添加以下参数--hostdev pci_0000_0b_00_0 \ --features kvm_hiddenon \ --video qxl内存大页配置示例--memorybacking hugepagesyes \ --memory 16384,hugepagesz1GB最后一个完整的删除虚拟机脚本同样重要特别是当需要频繁创建和销毁测试环境时#!/bin/bash VM_NAME$1 virsh destroy ${VM_NAME} 2/dev/null virsh undefine --remove-all-storage ${VM_NAME}将这些脚本与版本控制系统结合可以构建出灵活高效的虚拟化管理体系。例如将常用脚本存放在Git仓库中配合简单的包装函数实现快速调用function create_ubuntu() { local vm_name$1 local ram${2:-4096} local vcpus${3:-2} # 调用预先准备好的脚本模板 ./ubuntu_template.sh ${vm_name} ${ram} ${vcpus} }在实际使用中发现将磁盘存放在/dev/shm/下可以显著提升IO性能特别适合临时测试环境。但需要注意这种配置会在重启后丢失所有数据。

相关文章:

告别手动配置!用virt-install一键创建KVM虚拟机的5个实战脚本(附CentOS/Ubuntu示例)

告别手动配置!用virt-install一键创建KVM虚拟机的5个实战脚本(附CentOS/Ubuntu示例) 在虚拟化技术日益普及的今天,KVM作为Linux内核原生支持的虚拟化解决方案,凭借其高性能和低开销成为众多运维工程师的首选。然而&…...

别傻傻手敲了!用C++文件读写自动生成OpenJudge NOI 1.1超级玛丽游戏代码

用C文件操作自动化生成OpenJudge NOI超级玛丽游戏代码 在信息学竞赛中,我们经常会遇到需要输出固定字符图案的题目,比如OpenJudge NOI 1.1中的超级玛丽游戏题目。手动编写这些图案的打印代码不仅耗时耗力,还容易出错。本文将介绍如何利用C的文…...

基于多AI智能体协同的内容工厂:从架构原理到部署实践

1. 项目概述:一个由五个AI智能体协同工作的内容工厂如果你在内容创作领域摸爬滚打过,肯定遇到过这样的困境:想一个爆款选题、写一篇抓人的文案、设计一张吸睛的封面、再制定一套推广策略,整个过程下来,精力被撕扯得七零…...

Sass迁移实战:告别node-sass,拥抱现代前端工具链

1. 为什么前端开发者都在抛弃node-sass? 最近两年,但凡你打开一个前端项目的package.json,十有八九会发现依赖项里已经找不到node-sass的身影了。这不是巧合,而是整个前端生态的一次集体升级。作为一个经历过多次技术栈迁移的老前…...

AMD显卡运行CUDA应用终极指南:ZLUDA完整安装与优化教程

AMD显卡运行CUDA应用终极指南:ZLUDA完整安装与优化教程 【免费下载链接】ZLUDA CUDA on AMD GPUs 项目地址: https://gitcode.com/gh_mirrors/zlu/ZLUDA 你是否曾因为手头的AMD显卡无法运行心爱的CUDA应用而感到困扰?无论是深度学习训练、3D渲染还…...

别只怪代码!当STM32遇到XCOM串口助手‘沉默’,试试从这3个硬件与软件交互的隐藏问题入手

STM32与XCOM串口通信故障的深度排查指南 1. 供电不足的幽灵:那些被忽视的硬件细节 当你面对STM32开发板与XCOM串口助手通信失败时,第一反应往往是检查代码和配置参数。但现实中,许多问题根源隐藏在硬件与软件的灰色地带。供电稳定性就是这样一…...

电动汽车大电池技术瓶颈与成本挑战:从续航焦虑到理性发展

1. 大电池电动汽车面临的现实拷问 最近关于电动汽车的新闻,对电池制造商来说可不算友好。丰田宣布下调其纯电动城市车eQ的销售目标,这本身或许不算大新闻,毕竟eQ的预期销量本就有限。但真正引人深思的,是丰田副董事长内山田竹志在…...

Ubuntu系统下Chisel开发环境一站式配置指南

1. 环境准备:从零搭建基础工具链 第一次接触Chisel开发的朋友可能会被复杂的依赖关系吓到,特别是当看到需要同时处理Java、Scala、SBT三个层级的环境配置时。不过别担心,我去年在团队内部做过二十多台Ubuntu工作站的统一部署,这套…...

告别PyCharm导包烦恼:一劳永逸配置Python虚拟环境(含venv/pipenv对比)

彻底告别Python依赖混乱:虚拟环境配置全指南与PyCharm深度整合 每次打开PyCharm准备大干一场时,却被各种"ModuleNotFoundError"打断思路?明明用pip安装的包,在IDE里却死活找不到?这些问题背后往往隐藏着一个…...

基于GPT的学术论文智能阅读工具:ChatGPT-Paper-Reader实战指南

1. 项目概述与核心价值如果你和我一样,经常需要阅读大量的学术论文,尤其是那些动辄十几页、公式图表密布的PDF文件,那你一定体会过那种“望文生畏”的感觉。一篇论文的核心创新点、实验细节、数据对比,往往散落在各个章节&#xf…...

利用模型广场为stm32项目选择合适的大模型平衡性能与成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用模型广场为STM32项目选择合适的大模型平衡性能与成本 在STM32等嵌入式项目中集成AI功能时,开发者常常面临一个核心…...

如何用magnetW实现23个磁力站点的聚合搜索?一站式桌面应用完全指南

如何用magnetW实现23个磁力站点的聚合搜索?一站式桌面应用完全指南 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW magnetW是一款基于Electron框架开发的跨平台磁力链接聚合搜索工具&#xff…...

FPGA显示驱动避坑指南:RGB888转RGB565的时序与色彩处理实战

FPGA显示驱动避坑指南:RGB888转RGB565的时序与色彩处理实战 当你在FPGA项目中遇到24位色深屏幕却受限于引脚资源,或是需要兼容16位色深屏幕时,RGB888到RGB565的色彩转换就成了一个绕不开的技术挑战。这不仅关系到显示效果的真实性&#xff0c…...

欧姆龙PLC虚拟实验室:从零搭建FinsTCP通信仿真与自动化测试

1. 为什么需要欧姆龙PLC虚拟实验室 在工业自动化领域,PLC(可编程逻辑控制器)的开发测试往往需要依赖实体硬件设备。但实际工作中,我们经常会遇到几个痛点:硬件设备价格昂贵、测试环境搭建复杂、现场调试风险高。这些问…...

CefFlashBrowser:如何在现代电脑上继续玩转经典Flash游戏和内容

CefFlashBrowser:如何在现代电脑上继续玩转经典Flash游戏和内容 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否曾经打开一个网页,却发现那些熟悉的Flash动画…...

Dify集成Voicevox:为AI应用注入日系动漫语音灵魂

1. 项目概述:当开源AI应用平台遇上日系语音合成最近在折腾一个AI应用,需要给生成的文本内容配上自然、有表现力的语音。市面上通用的TTS(文本转语音)服务,要么是千篇一律的“机器人腔”,要么就是价格不菲。…...

Semtech GS2972-IBE3:解锁专业级3G-SDI视频传输的设计奥秘

1. 揭秘GS2972-IBE3:专业视频传输的"瑞士军刀" 第一次拿到Semtech的GS2972-IBE3芯片时,我正为一个4K转播车的项目头疼。客户要求在不增加设备体积的情况下,实现8路3G-SDI信号的稳定传输。这块指甲盖大小的芯片,最终成了…...

Axure RP中文语言包深度解析:多版本兼容性与本地化架构实践

Axure RP中文语言包深度解析:多版本兼容性与本地化架构实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在原型设…...

OpenClaw从入门到应用——工具(Tools):LLM Task

通过OpenClaw实现副业收入:《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》 llm-task 是一个可选插件工具,用于运行纯 JSON 格式的 LLM 任务,并返回结构化输出(可选择是否依据 JSON Schema 进行验证&#x…...

OpenClaw Easy Pruning插件:智能管理上下文长度,解决工具调用工作流中断难题

1. 项目概述:OpenClaw Easy Pruning 插件 如果你正在用 OpenClaw 构建复杂的、工具调用密集的自动化工作流,比如数据分析、代码生成或者多步骤的网页操作,那么你一定遇到过这个令人头疼的问题:对话进行到一半,突然就报…...

空间计算时代,跨镜追踪如何凭纯视觉技术实现全域无感管控

空间计算时代,跨镜追踪如何凭纯视觉技术实现全域无感管控空间计算技术的蓬勃演进,正推动数字孪生、视频孪生产业完成从平面视觉识别到三维空间感知的产业跃迁,各类大范围园区、口岸港区、城域综治、工矿戍防场景,对于全域动态目标…...

Verilog仿真调试实战:用$realtime精准追踪你的信号延迟(附Modelsim/VCS示例)

Verilog仿真调试实战:用$realtime精准追踪信号延迟 在数字电路设计中,时序问题往往是导致功能异常的头号杀手。当你的设计运行在GHz级别的时钟频率下,或者需要与模拟电路进行精确协同工作时,纳秒甚至皮秒级的时序偏差都可能引发灾…...

硬件故障排查:从时序竞争到系统接地的深度调试实践

1. 从“无故障发现”到真相:一次硬盘子系统故障的深度追查在硬件开发的漫长职业生涯里,最让人头疼的往往不是那些板上钉钉、逻辑清晰的故障。真正折磨人的,是那些幽灵般的“无故障发现”问题。它们时隐时现,在测试台上一切正常&am…...

ARM GICv3虚拟化中断控制器架构与ICH_VMCR寄存器解析

1. ARM GICv3虚拟化中断控制器架构解析在ARMv8/v9架构的虚拟化环境中,中断控制器的虚拟化是实现高效虚拟机隔离的关键技术。GICv3作为第三代通用中断控制器,通过引入ICH_VMCR等系统寄存器,为Hypervisor提供了完整的虚拟中断管理能力。与物理中…...

别再只会用threshold了!Halcon Region形状变换(shape_trans)的5种高级玩法与避坑指南

别再只会用threshold了!Halcon Region形状变换(shape_trans)的5种高级玩法与避坑指南 在工业视觉检测中,Region处理是核心环节之一。许多开发者习惯性地依赖threshold进行简单分割,却忽略了Halcon提供的强大形状变换工…...

ESP32+ILI9341触摸屏保姆级避坑指南:从库配置到Demo运行,一次搞定

ESP32ILI9341触摸屏开发实战:从零搭建LVGL环境的深度避坑手册 当一块2.4英寸的触摸屏在ESP32上成功点亮,流畅运行LVGL的炫酷界面时,那种成就感足以抵消之前踩过的所有坑。但现实往往是:屏幕一片空白、触摸毫无反应、SPI频率设置不…...

Simulink实战----从零搭建Boost变换器仿真模型

1. 为什么选择Simulink搭建Boost变换器模型 Boost变换器作为电力电子领域的经典拓扑结构,在手机充电器、LED驱动电源等场景中随处可见。但实际搭建硬件电路调试时,经常会遇到MOS管烧毁、电感啸叫等问题。三年前我刚入行时就曾连着烧坏三个MOS管&#xff…...

关键基础设施网络安全防御指南:从漏洞扫描到实战加固

1. 项目概述:一场迫在眉睫的网络空间风暴最近,如果你关注网络安全动态,会发现一种前所未有的紧迫感正在美国的关键基础设施领域蔓延。这种感觉,就像暴风雨来临前,气压骤降带来的那种沉闷与不安。作为一名在工业控制系统…...

QR码修复终极指南:三步法从损坏图片到完整数据恢复

QR码修复终极指南:三步法从损坏图片到完整数据恢复 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过这样的情况:打印的二维码被咖啡渍污染、手机拍摄的二维…...

【QT开发笔记-基础篇】| 第一章 QT入门 | 1.3 从零到一:详解Qt Creator项目创建全流程

1. 初识Qt Creator:开发环境初体验 第一次打开Qt Creator时,这个界面可能会让你有点懵。别担心,我刚开始用的时候也这样。左上角是菜单栏,包含了所有功能入口。中间区域是欢迎页面,这里可以快速新建项目或打开最近的项…...