2.6 上传镜像文件并注册镜像
3.4.1 优化 Linux 虚拟机
为了确保镜像创建的云服务器同时支持XEN虚拟化和KVM虚拟化,请在创建镜像前完 成优化私有镜像的相关操作。
本节操作以Ubuntu 14.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
[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 14.04为例,执行blkid命令获取root分区对应的UUID并记录下来,编辑“/
boot/grub/grub.cfg”文件,使用root分区的UUID来配置boot项。如果root分区已经
/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 elsesearch --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34 fiecho '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编辑器。
9. 执行以下命令,确认修改结果。
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 elsesearch --no-floppy --fs-uuid --set=root ec51d860-34bf-4374-ad46-a0c3e337fd34 fiecho '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 14.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编辑器。