首页 程序笔记 如何在 Proxmox VE 上创建 Ubuntu 和 Debian 操作系统模板

如何在 Proxmox VE 上创建 Ubuntu 和 Debian 操作系统模板

在任何虚拟化平台中,操作系统模板都是预配置的操作系统映像,可用于部署虚拟机。模板使您能够在几秒钟内创建单个或多个虚拟机实例。始终建议创建具有所有必要配置的特殊模板,而不是使用应用程序数据克隆现有虚拟机,因为它可以为您提供干净的状态。

Proxmox 虚拟化环境与基于容器的模板捆绑在一起,此外,您还可以从 V3.x 系列版本开始创建和部署 KVM 模板。在本文中,我们将介绍创建 Ubuntu 或 Debian Linux 操作系统模板的分步过程。类似的过程可以应用于任何其他 Linux 发行版。

对于 CentOS/Rocky/AlmaLinux 使用:在 Proxmox VE 上创建 Rocky/AlmaLinux/CentOS 操作系统模板

按照本文中介绍的步骤进行 Debian/Ubuntu Linux 模板的有效安装。

1.在Proxmox上创建虚拟机

登录到您的 Proxmox VE 环境并通过右键单击虚拟机管理程序名称 >创建 VM 开始创建 VM。

为虚拟机命名,并可以选择设置虚拟机 ID。为 ID 选择较大的数字可以更好地避免与其他实例混淆。

在“操作系统”下选择“不使用任何媒体”。

在“系统”下选中“Qemu Agent”。无需调整其他设置,默认设置就可以正常工作。

在“磁盘”屏幕上,删除自动添加的 SCSI 磁盘 0。出现提示时确认删除。

您应该收到消息“无磁盘”。这是预期的输出。

设置该VM实例要使用的CPU核心。

为实例设置内存。请注意,提供的值以 MiB 为单位。

在“网络”下,选择网桥名称,然后取消选中防火墙

单击页面下端的“完成”按钮完成设置。

2.附加Cloud-init磁盘

Cloud-init 用于处理虚拟机实例从磁盘启动之前的早期初始化。通过使用 cloud-init,您可以预先配置用户帐户、网络、ssh 密钥等。

我们需要为实例分配CD-ROM驱动器。右键单击虚拟机名称> 硬件 > 添加> CloudInit 驱动器

选择要使用图像的存储。

确认 CloudInit 驱动器已添加到 VM 硬件部分。

根据需要自定义 Cloud Init 配置部分中的每个变量。

例如,您可以为指定的默认用户帐户提供默认密码。

DHCP 更适合网络,因为实例中不需要手动更改 IP 地址。您可以采用基于MAC的DHCP服务。

完整配置示例

3. 下载KVM操作系统镜像

我们将从默认操作系统分发云映像下载、自定义并创建磁盘。

Ubuntu Linux 操作系统映像

### Ubuntu 22.04 ###
wget https://cloud-images.ubuntu.com/releases/jammy/release/ubuntu-22.04-server-cloudimg-amd64.img

### Ubuntu 20.04 ###
wget https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img

### Ubuntu 18.04 ###
wget https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img

Debian Linux 操作系统镜像

### Debian 12 ###
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

### Debian 11 ###
wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.qcow2

对于 Ubuntu,使用 .qcow2 扩展名重命名云映像。

### Ubuntu 22.04 ###
mv ubuntu-22.04-server-cloudimg-amd64.img ubuntu-22.04-server-cloudimg-amd64.qcow2

### Ubuntu 20.04 ###
mv ubuntu-20.04-server-cloudimg-amd64.img ubuntu-20.04-server-cloudimg-amd64.qcow2

### Ubuntu 18.04 ###
mv ubuntu-18.04-server-cloudimg-amd64.img ubuntu-18.04-server-cloudimg-amd64.qcow2

将 VM 的磁盘大小调整为合适的默认大小。

### Ubuntu 22.04 Example ###
$ qemu-img resize ubuntu-22.04-server-cloudimg-amd64.qcow2 20G
Image resized.

### Debian 12 Example ###
$ qemu-img resize debian-12-generic-amd64.qcow2 20G
Image resized.

为虚拟机启用控制台。将 777 替换为正确的虚拟机 ID。

$ qm set 777 --serial0 socket --vga serial0
update VM 777: -serial0 socket -vga serial0

4.将创建的磁盘导入VM默认启动盘

将磁盘导入虚拟机的语法是:

qm importdisk <vm_id> <image> <storage_name>

首先列出 Proxmox 服务器运行中的实例和存储域:

root@Proxmox-VE ~ # qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
       777 Ubuntu-22.04-Template stopped    2048               0.00 0

root@Proxmox-VE ~ # pvesm status
Name         Type     Status           Total            Used       Available        %
local         dir     active       492392868        11379732       481013136    2.31%

为 ID 为 777 的虚拟机导入磁盘,我们将使用:

$ qm importdisk 777 ubuntu-22.04-server-cloudimg-amd64.qcow2 local
...
transferred 17.0 GiB of 20.0 GiB (84.89%)
transferred 17.2 GiB of 20.0 GiB (86.14%)
transferred 17.5 GiB of 20.0 GiB (87.39%)
transferred 17.7 GiB of 20.0 GiB (88.64%)
transferred 18.0 GiB of 20.0 GiB (89.89%)
transferred 18.2 GiB of 20.0 GiB (91.13%)
transferred 18.5 GiB of 20.0 GiB (92.38%)
transferred 18.7 GiB of 20.0 GiB (93.63%)
transferred 19.0 GiB of 20.0 GiB (94.88%)
transferred 19.2 GiB of 20.0 GiB (96.13%)
transferred 19.5 GiB of 20.0 GiB (97.38%)
transferred 19.7 GiB of 20.0 GiB (98.62%)
transferred 20.0 GiB of 20.0 GiB (99.87%)
transferred 20.0 GiB of 20.0 GiB (100.00%)
transferred 20.0 GiB of 20.0 GiB (100.00%)
Successfully imported disk as 'unused0:local:777/vm-777-disk-0.raw'

有关虚拟机设置的更多信息可以使用 qm config 命令检查:

$ qm config 777
agent: 1
boot: order=ide2;net0
cipassword: **********
ciuser: ubuntu
cores: 1
ide0: local:777/vm-777-cloudinit.qcow2,media=cdrom
ide2: none,media=cdrom
ipconfig0: ip=dhcp
memory: 2048
meta: creation-qemu=7.2.0,ctime=1697459258
name: Ubuntu-22.04-Template
net0: virtio=F2:9D:7D:B1:38:EC,bridge=vmbr1,firewall=1
numa: 0
ostype: l26
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=c32a607b-ece6-470c-b301-6f97c9de7d9f
sockets: 1
unused0: local:777/vm-777-disk-0.raw
vga: serial0
vmgenid: bff5d249-26fd-4445-a39c-4088f4fd7b10

重新扫描 Proxmox 服务器中的卷。

$ sudo qm rescan
rescan volumes...

导入映像后,磁盘将保持未使用状态。导航到虚拟机的硬件部分,然后双击以附加它。

单击“添加”将磁盘附加到虚拟机。您可以选中放弃以启用精简配置。

该磁盘现在应该显示为正在使用。

更新选项下的虚拟机启动顺序 > 启动顺序

选择 scsi0 启用并将其拖至 ide2 之后的 2 位置。

设置启动顺序后的视图。

5. 准备 VM 以进行模板化

使用VM控制台访问终端。使用 cloud-init 参数/值中提供的用户名和密码登录。

更新和升级操作系统。

sudo apt update && sudo apt upgrade -y 

接下来在实例中安装 QEMU 来宾代理。

sudo apt install qemu-guest-agent

启用 qemu-guest-agent 在系统引导时启动。

sudo systemctl enable qemu-guest-agent

重置机器 ID。

sudo su -
cat /dev/null > /etc/machine-id
cat /dev/null > /var/lib/dbus/machine-id
cat /dev/null > /var/lib/dbus/machine-id

运行 Cloud Init 清理脚本。

 cloud-init clean

关闭实例

shutdown -h now

6. 从模板创建虚拟机

我们通过克隆模板来创建虚拟机实例。为此有两个标准选项。

  • 链接克隆 – 由此创建的虚拟机需要较少的磁盘空间,但如果不访问基础虚拟机模板就无法运行
  • 完整克隆 – 从完整克隆创建的虚拟机是完整副本,完全独立于原始虚拟机模板,但需要与原始虚拟机相同的磁盘空间。

要克隆,请右键单击模板并选择“克隆”。

选择克隆模式 - 完整链接

选择 VM 实例的目标存储并为其命名。

在启动实例之前,您可以修改硬件并设置默认 Cloud Init 变量的值。

如果一切顺利,实例应该会在几秒钟内启动并运行。

结论

通过本文中给出的过程,您应该在 Proxmox VE 上根据创建的模板创建一个正在运行的实例。您不应再手动安装 Ubuntu 或 Debian Linux 系统。这可以为您节省大量繁琐的手动操作系统安装时间。

有关 Proxmox 的更多信息:

  • 在 Proxmox Hetzner 根服务器上安装 pfSense
  • 如何在 Proxmox VE 上运行 macOS
  • 导出 Proxmox 虚拟机并在 KVM (Libvirt) 上运行

3

站心网

在任何虚拟化平台中,操作系统模板都是预配置的操作系统映像,可用于部署虚拟机。模板使您能够在几秒钟内创..

为您推荐

详解:订单履约系统规划

大家好,我是汤师爷~什么是订单履约系统?订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费者手中。..

Mysql查询的一些操作(查表名,查字段名,查当月,查一周,查当天)

查询数据库中所有表名select table_name from information_schema.tables where table_schema='tools' and table_type='base table';查询指定数据库中指定表的所有字段名column_nameselect column_n..

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

分享5个开源的.NET Excel读写操作库

本文给大家分享 5 个开源的 .NET Excel 读写操作库,它们广泛用于处理 Excel 文件,包括读取、写入、导入和导出数据。1. EPPlus简介:EPPlus 是功能强大的 .NET 库,用于创建和读取 Excel 文件(.xlsx 和 .xlsm 格式..

JavaScript中字典的常用操作

字典是一种以键值对存在的数据结构,他的底层是Array数组字典初始化和数组初始化的区别:数组的初始化:var arr = [1,2,3,4,5];//使用中括号字典的初始化: var names = {“a”:“aaa”,“b”:“bbb”,“c”:“ccc”}..

ASP.NET 使用Entity Framework (EF) 创建迁移修改SQLite数据库表结构

在 ASP.NET 中,使用 Entity Framework (EF) 创建并连接 SQLite 数据库是一种轻量级、高效的数据库管理方式。以下是详细步骤:安装必要的 NuGet 包安装EntityFrameworkCore.Sqlite包:Install-Package Microsoft.Ent..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

LinkWeChat开源系统

平台介绍LinkWeChat是一款基于企业微信的开源SCRM系统,为企业构建私域流量系统的综合解决方案,显著提升企业社交运营效率!内置功能环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >=..

每一个程序员,都希望能成为分布式系统架构师

有很多读者经常问我,程序员的学习、成长之路应该怎么规划,才能早日成为一名架构师。作为一个曾经的架构师,在我走上技术管理这条路之后,管理的团队越来越大,现在我管理的技术团队有一百多人,最大的体会就是操心..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?

鸿蒙(HarmonyOS)和 OpenHarmony 系统本身并不原生支持直接运行 .NET Core,但可以通过一些方法使 .NET Core 应用在其上运行。鸿蒙和 OpenHarmony 是基于 LiteOS 和 Linux 内核的多终端操作系统,因此它们的运行时..

如何防止web应用DOS攻击?

防止web应用DOS攻击的最好的方法是什么? 如何防止web应用DOS攻击? 与所有的拒绝服务(DOS)攻击相关的一件事是他们都不可能避免。最好的方法是把重点放在减少影响DOS攻击的方法上。如果你有一个网络,黑客想要玩一玩..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

Winform不同分辨率系统下界面混乱

产生界面混乱的主要原因是,winform程序的坐标是基于点(Point)的,而Point又与DPI相关。一英寸 = 96pixels96DPI是windows的默认DPI,当它被用户更改后,可能就会导致界面与设计之初产生了错乱。在网上搜索相关资料后..

EntityFramework异常Win32Exception (0x80004005): 等待的操作过时。

使用EntityFramework生成的Sql语句,出现下列异常:异常详细信息: System.ComponentModel.Win32Exception: 等待的操作过时。代码如下:query.Count = items.Count();var result = items.OrderByDescending(m => m.Id..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

.NET Core 3.0创建一个单独的可执行文件

一个独立的应用程序是一个很好的方式来共享您的应用程序,因为所有的组件、运行时和框架都包含在应用程序中。您只需提供application.exe文件,而不必担心其他计算机上是否存在框架或运行时安装状态。.NET Core 3.0预..

.NET Core MVC应用程序创建教程

本文主要介绍如何创建一个.NET Core MVC应用程序。和大家一起了解一下.NET Core MVC项目中各个文件的作用。首先准备工作,大家需要安装VS2017 15.7.2版本,安装.NET Core2.0,安装VS的时候选择安装.NET Core相关功能..

发表回复

返回顶部