ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)

1. 环境

虚拟机镜像ISO:ubuntu-24.04.2-live-server-arm64.iso


2. 定制cloud-init镜像

2.1 安装OS

基于ubuntu-24.04.2-live-server-arm64.iso,通过virt-manager安装操作系统,语言建议选择英文,分区选择基于LVM的自动分区,具体的操作系统安装步骤可以查阅网上资料。

2.2 配置静态IP地址

vim /etc/netplan/01-netcfg.yaml

network:version: 2renderer: networkdethernets:enp1s0: dhcp4: noaddresses:- 172.19.0.200/24routes:- to: defaultvia: 172.19.0.254nameservers:addresses:- 223.5.5.5

2.3 配置源

vim /etc/apt/sources.list.d/ubuntu.sources

Types: deb deb-src
URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg#Types: deb
#URIs: http://ports.ubuntu.com/ubuntu-ports/
#Suites: noble noble-updates noble-backports
#Components: main restricted universe multiverse
#Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
#
#Types: deb
#URIs: http://ports.ubuntu.com/ubuntu-ports/
#Suites: noble-security
#Components: main restricted universe multiverse
#Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

2.4 安装开发包

sudo apt update
sudo apt build-dep linux linux-image-unsigned-$(uname -r)
sudo apt install fakeroot llvm libncurses-dev dwarves gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf git
apt source linux-image-unsigned-$(uname -r)
sudo apt install docker.io

2.5 安装cloud-init

sudo apt install cloud-init cloud-guest-utils

2.6 配置启用密码登录

vim /etc/cloud/cloud.cfg

disable_root: false

2.7 配置自动扩容

通过fdisk -l系统分区情况,如下所示:

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C992E753-0498-4FFE-B859-9B5B8C0EF2A5Device       Start      End  Sectors  Size Type
/dev/vda1     2048  1953791  1951744  953M EFI System
/dev/vda2  1953792  5623807  3670016  1.8G Linux filesystem
/dev/vda3  5623808 41940991 36317184 17.3G Linux filesystemDisk /dev/mapper/ubuntu--vg-ubuntu--lv: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

通过blkid查看块设备详情,如下所示:

/dev/sr0: BLOCK_SIZE="2048" UUID="2025-02-16-22-52-55-00" LABEL="Ubuntu-Server 24.04.2 LTS arm64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="99a93588-73ac-47d9-af78-5104f694157c" BLOCK_SIZE="4096" TYPE="ext4"
/dev/vda2: UUID="2a798038-e186-4211-a68e-40c5f0de176b" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="d87cecc0-0786-4b52-b2e8-a9e17c4deb75"
/dev/vda3: UUID="4BxQxy-zrfh-QVKZ-xqtA-WVbz-KGGt-2319JR" TYPE="LVM2_member" PARTUUID="e58c8695-ab27-4980-b52f-b7010f2fc1ce"
/dev/vda1: UUID="5D46-E9E3" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="dfcdd546-be2e-44eb-a1a5-7071fb372135"

根据以上信息,得知我们需要自动扩容vda3分区(growpart)、扩容LVM和ext4文件系统(runcmd)。
创建文件/etc/cloud/cloud.cfg.d/06_growpart.cfg
vim /etc/cloud/cloud.cfg.d/06_growpart.cfg

#cloud-config
growpart:mode: autodevices: [/dev/vda3]ignore_growroot_disabled: false
runcmd:- [pvresize,/dev/vda3]- [lvextend,-l,+100%FREE,/dev/mapper/ubuntu--vg-ubuntu--lv]- [resize2fs,/dev/mapper/ubuntu--vg-ubuntu--lv]

2.8 配置网络位置为DHCP

vim /etc/netplan/01-netcfg.yaml

network:version: 2renderer: networkdethernets:enp1s0: dhcp4: yes

2.9 清理cloud-init信息

cat /etc/cloud/cloud-init.disabled

Disabled by Ubuntu live installer after first boot.
To re-enable cloud-init on this image run:sudo cloud-init clean --machine-id

执行如下命令,关闭虚拟机,镜像制作完毕

sudo cloud-init clean --machine-id

2.10 上传至云平台

source /root/admin-openrc.sh
glance image-create --name ubuntu-24.04.2-live-server-arm64-20250418 --disk-format qcow2 --container-format bare --file ubuntu-24.04.2-live-server-arm64-20250418.qcow2 --property hw_scsi_model=virtio-scsi --property hw_disk_bus=virtio --property os_distro=kylin --visibility public --progress

注意:由于上述分区采用的是virtio模式,故这个属性也必须设置为–property hw_disk_bus=virtio。

启动虚拟机,指定相应的磁盘大小,如200GB,进入虚拟机查看根分区扩容情况,df -hl查看如下所示:

Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              792M  1.2M  791M   1% /run
efivarfs                           256K   13K  244K   5% /sys/firmware/efi/efivars
/dev/mapper/ubuntu--vg-ubuntu--lv  195G  6.3G  180G   4% /
tmpfs                              3.9G     0  3.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/vda2                          1.7G  100M  1.5G   7% /boot
/dev/vda1                          952M  6.4M  945M   1% /boot/efi
tmpfs                              792M   12K  792M   1% /run/user/0

虚拟机启动和调整参考各个openstack发行版本或商业版本,可能略有不同,这里不再赘述。


3. 参考文献

Kylin v10基于cloud-init实现分区自动扩容(LVM分区模式)
Kylin v4基于cloud-init实现分区自动扩容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3专题1------父组件中更改子组件的属性

理解 Vue 3 中父组件如何引用子组件的属性是一个很重要的概念。 这里涉及到 defineExpose 和 ref 这两个关键点。 方法:使用 defineExpose 在子组件中暴露属性,然后在父组件中使用 ref 获取子组件实例并访问暴露的属性。 下面我将详细解释这个过程&…

数据仓库分层架构解析:从理论到实战的完整指南​​

数据仓库分层是构建高效数据体系的核心方法论。本文系统阐述ODS、DWD、DWS、ADS四层架构的设计原理,结合电商用户行为分析场景,详解各层功能及协作流程,并给出分层设计的原则与避坑指南,帮助读者掌握分层架构的落地方法。 一、为什…

从零搭建一套前端开发环境

一、基础环境搭建 1.NVM(Node Version Manager)安装 简介 nvm(Node Version Manager) 是一个用于管理多个 Node.js 版本的工具,允许开发者在同一台机器上轻松安装、切换和使用不同版本的 Node.js。它特别适合需要同时维护多个项目&#xff…

计算机组成原理笔记(十六)——4.1基本算术运算的实现

计算机中最基本的算术运算是加法运算,加、减、乘、除运算最终都可以归结为加法运算。 4.1.1加法器 一、加法器的基本单元 加法器的核心单元是 全加器(Full Adder, FA),而所有加法器都由 半加器(Half Adder, HA&…

利用Qt创建一个模拟问答系统

界面: 添加了聊天显示区域(QTextEdit) 添加了发送按钮和清空对话按钮 优化了布局和窗口大小添加了时间戳显示 2、功能: 支持实时对话可以清空对话历史 支持按回车发送消息 添加了简单的关键词匹配响应系统 交互体验&#x…

神经光子渲染:物理级真实感图像生成——从麦克斯韦方程到深度学习

一、技术背景与核心突破 2025年,神经光子渲染(Photonic Neural Rendering, PNR)技术通过物理光学方程与神经辐射场的深度融合,在AIGC检测工具(如GPTDetector 5.0)的识别准确率从98%降至12%。该技术突破性地…

Linux中手动安装7-Zip软件文档

7zip位于EPEL源中,如果服务器可以联网或者配置了本地EPEL源则可以直接安装 yum install p7zip p7zip-plugins -y对于无法联网且没有配置本地EPEL源的服务器,可以通过官网下载安装包后,上传至服务器,手动安装 ## 下载地址&#x…

[密码学基础]GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践

GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践 GM/T 0018-2023《密码设备应用接口规范》是中国密码行业的重要标准,于2023年12月4日发布,2024年6月1日正式实施,替代了2012年版标准。该标准旨在规范密码设备…

8.QT-按钮类控件|Push Button|Radio Button|Check Box|Tool Button(C++)

Push Button 使⽤ QPushButton 表⽰⼀个按钮.这也是当前我们最熟悉的⼀个控件了. QPushButton 继承⾃ QAbstractButton .这个类是⼀个抽象类.是其他按钮的⽗类 在Qt Designer中也能够看到这⾥的继承关系 属性说明text按钮中的⽂本icon按钮中的图标iconSize按钮中图标的尺⼨sh…

CFIS-YOLO:面向边缘设备的木材缺陷检测轻量级网络解析

论文地址:https://arxiv.org/pdf/2504.11305 目录 一、论文核心贡献 二、创新点详解 2.1 CARAFE动态上采样 工作原理 优势对比 2.2 C2f_FNB轻量模块 计算效率 2.3 Inner-SIoU损失函数 三、实验验证 3.1 消融实验 3.2 对比实验 四、应用部署 4.1 边缘设备部署流程…

BUUCTF PWN刷题笔记(1-9)

才知道,由于栈对齐,直接动调看栈估计会错,用cyclic看 1.test_your_nc NC连接一下,这个网站似乎直接访问是不中的,怀疑是没开启web的端口。NC链接输入cat flag就OK了,应该只是让我这样的小菜鸟培养自信用的…

C#处理网络传输中不完整的数据流

1、背景 在读取byte数组的场景(例如:读取文件、网络传输数据)中,特别是网络传输的场景中,非常有可能接收了不完整的byte数组,在将byte数组转换时,因字符的缺失/增多,转为乱码。如下…

PostgreSQL 用户资源管理

PostgreSQL 用户资源管理 PostgreSQL 提供了多种机制来管理和限制用户对数据库资源的使用,以下是全面的资源管理方法: 1 连接限制 1.1 限制最大连接数 -- 在 postgresql.conf 中设置 max_connections 100 -- 全局最大连接数-- 为特定用户设置连接限…

新书速览|OpenCV计算机视觉开发实践:基于Qt C++

《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写,全面系统地介绍OpenCV的使用及实战案例,并配套提供全书示例源码、PPT课件与作…

【上位机——MFC】消息映射机制

消息映射机制 Window消息分类消息映射机制的使用代码示例 MFC框架利用消息映射机制把消息、命令与它们的处理函数映射起来。具体实现方法是在每个能接收和处理消息的类中,定义一个消息和消息函数指针对照表,即消息映射表。 在不重写WindowProc虚函数的大…

docker学习笔记2-最佳实践

一、在容器中启动mysql的最佳实践 (一)查找目录 1、mysql的配置文件路径 /etc/mysql/conf.d 2、mysql的数据目录 /var/lib/mysql 3、环境变量 4、端口 mysql的默认端口3306。 (二)启动命令 docker run -d -p 3306:3306 …

Vue3核心源码解析

/packages/complier-core 定位​​:​​编译时核心​​,处理 Vue 模板的编译逻辑。​​核心功能​​: ​​模板解析​​:将 .vue 文件的模板语法(HTML-like)解析为 ​​抽象语法树 (AST)​​。​​转换优化…

n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)

n8n 是一款强大的开源工作流自动化工具,可帮助你连接各类应用与服务,实现自动化任务。如果你想快速体验 n8n 的功能,本机部署是最简单的方式。本教程将手把手指导你在 Windows 或 MacOS 上通过 Docker 轻松安装和运行 n8n,无需服务…

【python】pyCharm常用快捷键使用-(2)

pyCharm常用快捷键使用 快速导入任意类 【CTRLALTSPACE】代码补全【CTRLSHIFTENTER】代码快速修正【ALTENTER】代码调试快捷键

Docker 镜像、容器和 Docker Compose的区别

前言:Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像(Image)​​ ​​定义​​: 镜像是只读模板,包含运行应用程序所需的代码、…