Ubuntu Cloud Image Size 似乎各個版本的特性不太一樣, 而且似乎也要用不同的方式修改 Image size
一般 change image size 是用這個指令
$ sudo qemu-img resize $UBUNTUVERSION-server-cloudimg-$ARCH.img +50G0
ex:
$ sudo qemu-img resize xenial-server-cloudimg-amd64-uefi1.img +50G
將 qcow2 image format 變成 raw disk
$ sudo qemu-img convert xenial-server-cloudimg-amd64-uefi1.img xenial-server-cloudimg-amd64-uefi1.raw
之前測 ARM64 17.04 和 17.10 都會自動增加 partition size
但是最近碰到 18.04 似乎不會. (Both X64 and ARM64)
如果碰到的是 16.04 要增加 partition size 有問題, 要用 parted 修改 (似乎 fdisk 和 gdisk 都有問題)
ex:
$ parted xenial-server-cloudimg-amd64-uefi1.raw
(parted) p
Model: (file)
Disk /work/research/vm/1.raw: 56.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
14 1049kB 5243kB 4194kB bios_grub
15 5243kB 116MB 111MB fat32 boot, esp
1 116MB 2361MB 2245MB ext4
(parted) resizepart
Warning: Not all of the space available to /work/research/vm/1.raw appears to be used, you can fix the GPT to use
all of the space (an extra 104857600 blocks) or continue with the current setting?
parted: invalid token: 1
Partition number? 1
End? [2361MB]? 56G
離開就會儲存
Ubuntu 16.04 的 cloud image 不知道為什麼 cloud-init 會無法結束, 如果不能接觸到 login 那 cloud image 也沒有用.
這時可以用另一個方式移除 cloud-init 相關的套件,
1. 使用 kpartx 將 image 掛到 loop devices 如果沒有, 就先安裝 kpartx 套件
$ sudo apt install kpartx
2. mount partition (還有 proc, dev, sys)
3. 移除 cloud 相關套件
4. umount partition (要先 umount proc, dev, sys
5. 移除 loop device
6. convert raw file 到 qcow2 格式
mount cloud image partition
$ sudo kpartx -av xenial-server-cloudimg-amd64-uefi1.raw
add map loop0p1 (253:0): 0 109147673 linear 7:0 227328
add map loop0p14 (253:1): 0 8192 linear 7:0 2048
add map loop0p15 (253:2): 0 217088 linear 7:0 10240
loop0p1 就是我們要 mount 的 disk , (註: 有可能因系統不同, 所以會有其他的 device name)
mount disk
$ sudo su
$ mkdir disk
$ mount /dev/mapper/loop0p1 disk
$ cd disk
$ mount --bind /proc proc
$ mount --bind /dev dev
$ mount --bind /sys sys
$ cd ..
$ chroot disk
移除 cloud-init 相關的套件
$ dpkg -l |grep cloud
ii cloud-guest-utils 0.27-0ubuntu25.1 all cloud guest utilities
ii cloud-init 18.3-9-g2e62cb8a-0ubuntu1~16.04.2 all Init scripts for cloud instances
ii cloud-initramfs-copymods 0.27ubuntu1.5 all copy initramfs modules into root filesystem for later use
ii cloud-initramfs-dyn-netconf 0.27ubuntu1.5 all write a network interface file in /run for BOOTIF
ii ubuntu-cloudimage-keyring 2013.11.11 all GnuPG keys of the Ubuntu Cloud Image builder
$ dpkg -r cloud-guest-utils cloud-init cloud-initramfs-copymods ubuntu-server
umount disk
$ exit
$ cd disk
$ umount proc
$ umount dev
$ umount sys
$ cd ..
$ umount disk
最後將 raw disk image 轉成 qcow2
$ sudo qemu-img convert xenial-server-cloudimg-amd64-uefi1.raw xenial-server-cloudimg-amd64-uefi1.img
這樣 16.04 開機就不會卡在 cloud init script 了.
發佈留言