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實現分區自動擴容