为了确保镜像创建的云主机同时支持XEN虚拟化和KVM虚拟化,请在创建镜像前完成优化私有镜像的相关操作。
本节操作以Ubuntu 20.04操作系统为例,其他操作系统优化的具体操作请参考“优化过程(Linux)”。
安装原生的XEN和KVM驱动
1、执行以下命令,打开modules文件。
vi /etc/initramfs-tools/modules
2、按“i”进入编辑模式,修改/etc/initramfs-tools/modules文件,添加xen-pv以及virtio的驱动(具体格式要根据操作系统本身的要求来决定)。
[root@CTU10000xxxxx ~]#vi /etc/initramfs-tools/modules
……
# Examples:
#
# raid1
# sd_mOd
xen-blkfront
xen-netfront
virtio_blk
virtio_scsi
virtio_net
virtio_pci
virtio_ring
virtio
3、按“Esc”后,输入:wq,按“Enter”,保存设置并退出“/etc/initramfs-tools/modules”文件。
4、执行以下命令,重新生成initrd。
update-initramfs -u
5、执行以下命令,检查是否已经成功装载了原生的XEN和KVM驱动相应模块。
lsinitramfs /boot/initrd.img-`uname -r` |grep xen
lsinitramfs /boot/initrd.img-`uname -r` |grep virtio
[root@ CTU10000xxxxx home]# lsinitramfs /boot/initrd.img-`uname -r` |grep xen
lib/modules/3.5.0-23-generic/kernel/drivers/net/ethernet/qlogic/netxen
lib/modules/3.5.0-23-generic/kernel/drivers/net/ethernet/qlogic/netxen/netxen_nic.ko
lib/modules/3.5.0-23-generic/kernel/drivers/net/xen-netback
lib/modules/3.5.0-23-generic/kernel/drivers/net/xen-netback/xen-netback.ko
lib/modules/3.5.0-23-generic/kernel/drivers/block/xen-blkback
lib/modules/3.5.0-23-generic/kernel/drivers/block/xen-blkback/xen-blkback.ko
[root@ CTU10000xxxxx home]# lsinitramfs /boot/initrd.img-`uname -r` |grep virtio
lib/modules/3.5.0-23-generic/kernel/drivers/scsi/virtio_scsi.ko
说明:
如果误将built-in形式存在内核中的驱动添加到initrd或initramfs文件中,不会影响虚拟机正常使用,这里全写进去只是为了修改的方便,但是使用lsinitrd命令无法检查到。可使用如下方法确定这些驱动是否以built-in形式存在内核中,例如:
[root@ CTU10000xxxxx home]# cat /boot/config-`uname -r` | grep CONFIG_VIRTIO | grep y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
[root@ CTU10000xxxxx home]# cat /boot/config-`uname -r` | grep CONFIG_XEN | grep y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y
修改grub文件磁盘标识方式为UUID
以Ubuntu 20.04为例,执行blkid命令获取root分区对应的UUID并记录下来,编辑“/boot/grub/grub.cfg”文件,使用root分区的UUID来配置boot项。如果root分区已经使用UUID形式则不需要修改。具体操作方法如下:
1、使用root用户登录虚拟机。
2、执行以下命令,列出当前系统中所有已挂载文件系统的类型以及对应设备的UUID 。
blkid
回显信息如下所示。
/dev/xvda1: UUID="ec51d860-34bf-4374-ad46-a0c3e337fd34" TYPE="ext3"
/dev/xvda5: UUID="7a44a9ce-9281-4740-b95f-c8de33ae5c11" TYPE="swap"
3、执行以下命令,查看“grub.cfg”文件:
cat /boot/grub/grub.cfg
回显信息如下所示:
……menuentry 'Ubuntu Linux, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-ec51d860-34bf-4374-ad46-a0c3e337fd34' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34
else
search --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34
fi
echo 'Loading Linux 3.13.0-24-generic ...'
linux /boot/vmlinuz-3.13.0-24-generic root=/dev/xvda1 ro
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.13.0-24-generic
}
4、根据“/boot/grub/grub.cfg”配置文件里标记的root分区,查找是否包括“root=/dev/xvda1”或者“root=UUID=ec51d860-34bf-4374-ad46-a0c3e337fd34”信息。
- 存在“root=UUID=ec51d860-34bf-4374-ad46-a0c3e337fd34”,即root分区以UUID的表示形式,无需修改。
- 存在“root=/dev/xvda1”,即root分区以设备名称表示的形式,请执行步骤5。
5、根据“root=/dev/xvda1”,即root分区对应的设备名称,以及blkid命令获取的分区信息,找到root分区设备名称对应的UUID。
6、执行以下命令,打开“grub.cfg”文件。
vi /boot/grub/grub.cfg
7、按“i”进入编辑模式,将root分区改成UUID形式,本例中将“root=/dev/xvda1”修改为“root=UUID=ec51d860-34bf-4374-ad46-a0c3e337fd34”。
8、按“Esc”后,输入:wq,按“Enter”, 保存设置并退出vi编辑器。
执行以下命令,确认修改结果。
cat /boot/grub/grub.cfg
回显信息如下所示表示修改成功,即root分区以UUID的形式表示。
……menuentry 'Ubuntu Linux, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-ec51d860-34bf-4374-ad46-a0c3e337fd34' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34
else
search --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34
fi
echo 'Loading Linux 3.13.0-24-generic ...'
linux /boot/vmlinuz-3.13.0-24-generic root=UUID=ec51d860-34bf-4374-ad46-a0c3e337fd34 ro
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.13.0-24-generic
}
修改fstab文件磁盘标识方式为UUID
以Ubuntu 20.04为例,执行blkid命令获取所有分区对应的UUID并记录下来,编辑“/etc/fstab”文件,使用分区的UUID来配置分区自动挂载。
1、执行以下命令,列出当前系统中所有已挂载文件系统的类型以及对应设备的UUID 。
blkid
回显信息如下所示。
/dev/xvda2: UUID="4eb40294-4c6f-4384-bbb6-b8795bbb1130" TYPE="xfs"
/dev/xvda1: UUID="2de37c6b-2648-43b4-a4f5-40162154e135" TYPE="swap"
2、执行以下命令,查看“fstab”文件。
cat /etc/fstab
回显信息如下所示。
[root@CTU1000028010 ~]# cat /etc/fstab
/dev/xvda2 / xfs defaults 0 0
/dev/xvda1 swap swap defaults 0 0
3、查看“fstab”文件中的磁盘的表示形式为设备名称。
- 若为UUID的表示形式,无需修改。
- 若为设备名称的表示形式,请执行步骤4。
4、执行以下命令,打开“fstab”文件。
vi /etc/fstab
5、按“i”进入编辑模式,将“fstab”中的磁盘表示形式修改为UUID的形式。
6、按“Esc”后,输入:wq,按“Enter”, 保存设置并退出vi编辑器。