優化過程(Linux)
為了同時支持XEN虛擬化和KVM虛擬化,Linux彈性云主機的正常運行需依賴于xen-pv驅動、virtio驅動等,因此,XEN實例變更為KVM實例前,需要確保Linux私有鏡像已完成相關配置,包括安裝驅動、修改UUID等。同時,優化私有鏡像也能提升彈性云主機的網絡性能。
- 將待優化的Linux鏡像創建彈性云主機,并開機登錄。
- 卸載彈性云主機操作系統中安裝的PV Driver。
具體操作請參見下文“在Linux系統中卸載PV driver”。
- 修改grub文件磁盤標識方式為UUID。
具體操作請參見下文“修改grub文件磁盤標識方式為UUID”。
- 修改fstab文件磁盤標識方式為UUID。
具體操作請參見下文“修改fstab文件磁盤標識方式為UUID”。
- 安裝原生的KVM驅動。
具體操作請參見下文“安裝原生的KVM驅動”。
- 清除日志文件、歷史記錄等,關閉云主機。
具體操作請參見下文“清除日志文件”。
- 通過彈性云主機創建Linux私有鏡像。
查看Linux操作系統云主機虛擬化類型
您可以執行以下命令,查看當前云主機的虛擬化類型。
lscpu
如果回顯信息中的Hypervisor vendor為XEN,說明當前云主機為XEN虛擬化類型,如果需要同時支持KVM虛擬化,請參考本章節操作優化Linux私有鏡像。
說明:
- 如果查出來的虛擬化類型為KVM,也建議您優化私有鏡像,避免最終發放的云主機出現一些不可預知的異常。
查看Linux云主機虛擬化類型


在Linux系統中卸載PV driver
操作場景
在優化Linux私有鏡像過程中,需要在云主機上修改fstab和grub的UUID,并安裝原生的XEN和KVM驅動。為了使用戶可以成功安裝原生的XEN和KVM驅動,用戶需要先卸載PV driver。
操作步驟
- 使用VNC方式,以“root”用戶登錄云主機。
- 執行如下命令,檢查操作系統中是否安裝PV driver相關的驅動。
ps -ef | grep uvp-monitor
回顯信息如下圖所示為已安裝Tools。
root 4561 1 0 Jun29 ? 00:00:00 /usr/bin/uvp-monitor
root 4567 4561 0 Jun29 ? 00:00:00 /usr/bin/uvp-monitor
root 6185 6085 0 03:04 pts/2 00:00:00 grep uvp-monitor
? 如果已安裝,執行步驟3。
? 如果未安裝,執行修改fstab文件磁盤標識方式為UUID,安裝原生的KVM驅動和修改grub文件磁盤標識方式為UUID。
- 在VNC登錄窗口的云主機操作系統界面,打開命令行終端(具體方式請查詢對應操作系統的使用手冊)。
進入命令行模式。
- 執行以下命令,卸載PV driver。
/etc/.uvp-monitor/uninstall
? 回顯信息如下時,表示Tools卸載成功。
The PV driver is uninstalled successfully. Reboot the system for the uninstallation to take effect.
? 回顯信息提示不存在“.uvp-monitor”,如所示,請執行步驟5。
-bash: /etc/.uvp-monitor/uninstall: No such file or directory
- 執行如下操作,刪除KVM虛擬化平臺下不生效的uvp-monitor,防止日志溢出。
a. 執行如下命令,查詢操作系統是否安裝了UVP用戶態相關的監控程序。
rpm -qa | grep uvp
回顯信息如下所示:
libxenstore_uvp3_0-3.00-36.1.x86_64
uvp-monitor-2.2.0.315-3.1.x86_64
kmod-uvpmod-2.2.0.315-3.1.x86_64
b. 執行如下命令,刪除以下三個安裝包。
rpm -e kmod-uvpmod
rpm -e uvp-monitor
rpm -e libxenstore_uvp
修改grub文件磁盤標識方式為UUID
操作場景
在優化Linux私有鏡像過程中,需要在云主機上修改grub文件磁盤標識方式為UUID。
修改menu.lst或者grub.cfg配置(“/boot/grub/menu.lst”或“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”或“/boot/grub/grub.conf”或“ /boot/efi/EFI/euleros/grub.cfg”,具體路徑根據OS不同會有所區別),啟動分區使用UUID方式配置。
說明:
- 根據OS不同,配置文件里標記的root分區會有所不同,可能是“root=/dev/xvda”或“root=/dev/disk”,都需要將grub文件磁盤標識方式修改為UUID的形式。
操作步驟
- 以Ubuntu 14.04為例,執行blkid命令獲取root分區對應的UUID并記錄下來,編輯“/boot/grub/grub.cfg”文件,使用root分區的UUID來配置boot項。如果root分區已經使用UUID形式則不需要修改。具體操作方法如下:
a. 使用root用戶登錄云主機。
b. 執行以下命令,列出當前系統中所有已掛載文件系統的類型以及對應設備的UUID 。
blkid
回顯信息如下所示:
/dev/xvda1: UUID="ec51d860-34bf-4374-ad46-a0c3e337fd34" TYPE="ext3"
/dev/xvda5: UUID="7a44a9ce-9281-4740-b95f-c8de33ae5c11" TYPE="swap"
c. 執行以下命令,查看“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
}
d. 根據“/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。
e. 根據“root=/dev/xvda1”,即root分區對應的設備名稱,以及blkid命令獲取的分區信息,找到root分區設備名稱對應的UUID。
f. 執行以下命令,打開“grub.cfg”文件。
vi /boot/grub/grub.cfg
g. 按“i”進入編輯模式,將root分區改成UUID形式,本例中將“root=/dev/xvda1”修改為“root=UUID=ec51d860-34bf-4374-ad46-a0c3e337fd34”。
h. 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出vi編輯器。
i. 執行以下命令,確認修改結果。
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
}
- 以CentOS 6.5為例,執行blkid命令獲取root分區對應的UUID并記錄下來,編輯“/boot/grub/grub.conf”文件,使用root分區的UUID來配置boot項。如果root分區已經使用UUID形式則不需要修改。具體操作步驟如下:
a. 使用root用戶登錄云主機。
b. 執行以下命令,列出當前系統中所有已掛載文件系統的類型以及對應設備的UUID 。
blkid
回顯信息如下所示
/dev/xvda1: UUID="749d6c0c-990a-4661-bed1-46769388365a" TYPE="swap"
/dev/xvda2: UUID="f382872b-eda6-43df-9516-5a687fecdce6" TYPE="ext4"
c. 執行以下命令查看“grub.conf”文件:
cat/boot/grub/grub.conf
回顯信息如下所示。
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-573.8.1.el6.x86_64)
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-573.8.1.el6.x86_64 ro root=/dev/xvda2 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=autoKEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-573.8.1.el6.x86_64.img
d. 根據“/boot/grub/grub.conf”配置文件里標記的root分區,查找是否包括“root=/dev/xvda2”或者“root=UUID=f382872b-eda6-43df-9516-5a687fecdce6”信息。
- 若存在“root=UUID=f382872b-eda6-43df-9516-5a687fecdce6”,即root分區以UUID的表示形式,則無需修改。
- 若存在“root=/dev/xvda2”,即root分區以設備名稱表示的形式,請執行步驟5。
e. 根據“root=/dev/xvda2”,即root分區對應的設備名稱,以及blkid命令獲取的分區信息,找到root分區設備名稱對應的UUID。
f. 執行以下命令,打開“grub.conf”文件。
vi /boot/grub/grub.conf
g. 按“i”進入編輯模式,將root分區改成UUID形式,本例中將“root=/dev/xvda2”修改為“root=UUID=f382872b-eda6-43df-9516-5a687fecdce6”。
h. 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出vi編輯器。
i. 修改后,執行以下命令確認修改結果。
cat /boot/grub/grub.cfg
回顯信息如下所示表示修改成功,即root分區以UUID的形式表示。
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-573.8.1.el6.x86_64)
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-573.8.1.el6.x86_64 ro root=UUID=f382872b-eda6-43df-9516-5a687fecdce6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=autoKEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-573.8.1.el6.x86_64.img
- 以CentOS 7.0為例,執行blkid命令獲取root分區對應的UUID并記錄下來,編輯“/boot/grub2/grub.cfg”文件,使用root分區的UUID來配置boot項。如果root分區已經使用UUID形式則不需要修改。
a. 使用root用戶登錄云主機。
b. 執行以下命令,列出當前系統中所有已掛載文件系統的類型以及對應設備的UUID 。
blkid
回顯信息如下所示。
/dev/xvda2: UUID="4eb40294-4c6f-4384-bbb6-b8795bbb1130" TYPE="xfs"
/dev/xvda1: UUID="2de37c6b-2648-43b4-a4f5-40162154e135" TYPE="swap"
c. 執行以下命令查看“grub.cfg”文件:
cat /boot/grub2/grub.cfg
回顯信息如下所示。
……
menuentry 'CentOS Linux (3.10.0-229.el7.x86_64) 7 (Core)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-229.el7.x86_64-advanced-4eb40294-4c6f-4384-bbb6-b8795bbb1130' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos2'4eb40294-4c6f-4384-bbb6-b8795bbb1130
else
search --no-floppy --fs-uuid --set=root 4eb40294-4c6f-4384-bbb6-b8795bbb1130
fi
linux16 /boot/vmlinuz-3.10.0-229.el7.x86_64 root=/dev/xvda2 ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8
initrd16 /boot/initramfs-3.10.0-229.el7.x86_64.img
}
d. 根據“/boot/grub/grub.cfg”配置文件里標記的root分區,查找是否包括root=/dev/xvda2或者包括root=UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130信息。
- 存在“root=UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130”,即root分區以UUID的表示形式,則無需修改。
- 存在“root=/dev/xvda2”,即root分區以設備名稱表示的形式,請執行步驟5。
e. 根據“root=/dev/xvda2”,即root分區對應的設備名稱,以及blkid命令獲取的分區信息,找到root分區設備名稱對應的UUID。
f. 執行以下命令,打開“grub.cfg”文件。
vi /boot/grub2/grub.cfg
g. 按“i”進入編輯模式,將root分區改成UUID形式,本例中將“root=/dev/xvda2”修改為“root=UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130”。
h. 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出vi編輯器。
i. 執行以下命令確認修改結果。
cat /boot/grub2/grub.cfg
回顯信息如下所示表示修改成功,即root分區以UUID的形式表示。
……
menuentry 'CentOS Linux (3.10.0-229.el7.x86_64) 7 (Core)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-229.el7.x86_64-advanced-4eb40294-4c6f-4384-bbb6-b8795bbb1130' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos2'4eb40294-4c6f-4384-bbb6-b8795bbb1130
else
search --no-floppy --fs-uuid --set=root 4eb40294-4c6f-4384-bbb6-b8795bbb1130
fi
linux16 /boot/vmlinuz-3.10.0-229.el7.x86_64 root=UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130 ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8
initrd16 /boot/initramfs-3.10.0-229.el7.x86_64.img
}
修改fstab文件磁盤標識方式為UUID
操作場景
在優化Linux私有鏡像過程中,需要在云主機上修改fstab文件磁盤標識方式為UUID。
操作步驟
- 以CentOS 7.0為例,執行blkid命令獲取所有分區對應的UUID并記錄下來,編輯“/etc/fstab”文件,使用分區的UUID來配置分區自動掛載。
- 使用root用戶登錄云主機。
- 執行以下命令,列出當前系統中所有已掛載文件系統的類型以及對應設備的UUID 。
blkid
回顯信息如下所示。
/dev/xvda2: UUID="4eb40294-4c6f-4384-bbb6-b8795bbb1130" TYPE="xfs"
/dev/xvda1: UUID="2de37c6b-2648-43b4-a4f5-40162154e135" TYPE="swap"
- 執行以下命令,查看“fstab”文件。
cat /etc/fstab
回顯信息如下所示。
[root@CTU1000028010 ~]# cat /etc/fstab
/dev/xvda2 / xfs defaults 0 0
/dev/xvda1 swap swap defaults 0 0
- 查看“fstab”文件中的磁盤的表示形式為設備名稱。
? 若為UUID的表示形式,無需修改。
? 若為設備名稱的表示形式,請執行步驟5。
- 執行以下命令,打開“fstab”文件。
vi /etc/fstab
- 按“i”進入編輯模式,將fstab中的磁盤表示形式修改為UUID的形式。
- 以CentOS 7.1為例,執行blkid命令獲取所有分區對應的UUID并記錄下來,編輯“/etc/fstab”文件,使用分區的UUID來配置分區自動掛載。
- 使用root用戶登錄云主機。
- 執行以下命令,列出當前系統中所有已掛載文件系統的類型以及對應設備的UUID 。
Blkid
/dev/xvda2: UUID="4eb40294-4c6f-4384-bbb6-b8795bbb1130" TYPE="xfs"
/dev/xvda1: UUID="2de37c6b-2648-43b4-a4f5-40162154e135" TYPE="swap"
修改前:
[root@CTU1000028010 ~]# cat /etc/fstab
/dev/xvda2 / xfs defaults 0 0
/dev/xvda1 swap swap defaults 0 0
修改后:
[root@CTU1000028010 ~]# cat /etc/fstab
UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130 / xfs defaults 0 0
UUID=2de37c6b-2648-43b4-a4f5-40162154e135 swap swap defaults 0 0
- 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出vi編輯器。
- 修改后,執行以下命令確認修改結果。
cat /etc/fstab
回顯信息如下所示,即磁盤的表示形式為UUID,表示修改成功。
[root@CTU1000028010 ~]# cat /etc/fstab
UUID=4eb40294-4c6f-4384-bbb6-b8795bbb1130 / xfs defaults 0 0
UUID=2de37c6b-2648-43b4-a4f5-40162154e135 swap swap defaults 0 0
安裝原生的KVM驅動
操作場景
在優化Linux私有鏡像過程中,需要在云主機上安裝原生的KVM驅動。
注意:
- 如果不安裝KVM驅動,彈性云主機的網卡可能無法檢測到,無法與外部通信。因此,請您務必安裝KVM驅動。
本節介紹安裝原生KVM驅動的具體方法。
前提條件
- 對于使用Linux系統原生KVM驅動的Linux云主機,其內核版本必須高于2.6.24。
- 建議您禁用任何防病毒軟件或入侵檢測軟件,安裝原生的KVM驅動完成后,您可以再次啟用這些軟件。
操作步驟
請根據操作系統版本,修改不同的配置文件:
- CentOS/EulerOS系列操作系統
以CentOS 7.0為例,請修改“/etc/dracut.conf”文件,在add_drivers項中添加virtio的驅動(virtio驅動:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio)。驅動名之間以空格隔開,保存并退出“/etc/dracut.conf”文件,執行dracut -f命令,重新生成initrd。
操作方法可參見下文“CentOS/EulerOS系列操作系統相關操作”。
- Ubuntu/Debian系列系統
請修改“/etc/initramfs-tools/modules”文件,添加virtio的驅動(virtio驅動:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio)。驅動名之間以空格隔開,保存并退出“/etc/initramfs-tools/modules”文件,執行update-initramfs -u命令,重新生成initrd。
操作方法可參見下文“Ubuntu/Debian系列操作系統相關操作”。
- SUSE和openSUSE系列系統,根據操作系統版本不同,修改不同的配置文件。
? 當操作系統版本低于SUSE 12 SP1或低于openSUSE 13時,請修改“/etc/sysconfig/kernel”文件,在INITRD_MODULES=""添加virtio的驅動(virtio驅動:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio)。驅動名之間以空格隔開,執行mkinitrd命令,重新生成initrd。
? 當操作系統版本為SUSE 12 SP1時,修改“/etc/dracut.conf”文件,在add_drivers項中添加virtio的驅動(virtio驅動:virtio_blk、virtio_scsi、virtio_net、virtio_pci、virtio_ring、virtio)。驅動名之間以空格隔開,執行命令dracut -f,重新生成initrd。
? 當操作系統版本高于SUSE 12 SP1或高于openSUSE 13版本時,修改“/etc/dracut.conf”文件,在add_drivers項中添加virtio的驅動(virtio驅動:virtio_blk、virtio_scsi 、virtio_net、virtio_pci、virtio_ring、virtio)。驅動名之間以空格隔開,保存并退出“/etc/dracut.conf”文件,執行dracut -f命令,重新生成initrd。
操作方法可參下文“SUSE/openSUSE系列操作系統相關操作”。
CentOS/EulerOS系列操作系統相關操作
- 執行以下命令,打開“/etc/dracut.conf”文件。
vi /etc/dracut.conf
- 按“i”進入編輯模式,在“add_drivers”項中添加virtio的驅動(具體格式要根據操作系統本身的要求來決定)。
[root@CTU10000xxxxx ~]# vi /etc/dracut.conf
# additional kernel modules to the default
add_drivers+="virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
……
- 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出“/etc/dracut.conf”文件。
- 執行以下命令,重新生成initrd。
dracut -f /boot/initramfs-2.6.32-573.8.1.el6.x86_64.img
如果引導的虛擬文件系統不是默認的initramfs,則命令為:dracut -f 實際使用的initramfs文件名或者initrd文件名。“實際使用的initramfs文件名或者initrd文件名”可在grub.cfg配置(“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”或“/boot/grub/grub. conf”,具體路徑根據OS不同會有所區別)中獲取。
- 如果引導的虛擬文件系統是initramfs,執行以下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initramfs-uname -r .img | grep virtio
如果引導的虛擬文件系統是initrd,執行如下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initrd-uname -r | grep virtio
以引導的虛擬文件系統是initramfs為例,回顯信息如下所示:
[root@CTU10000xxxxx home]# lsinitrd /boot/initramfs-`uname -r`.img | grep virtio
-rwxr--r-- 1 root root 23448 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/block/virtio_blk.ko
-rwxr--r-- 1 root root 50704 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/net/virtio_net.ko
-rwxr--r-- 1 root root 28424 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/scsi/virtio_scsi.ko
drwxr-xr-x 2 root root 0 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio
-rwxr--r-- 1 root root 14544 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio.ko
-rwxr--r-- 1 root root 21040 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio_pci.ko
-rwxr--r-- 1 root root 18016 Jul 16 17:53 lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/drivers/virtio/virtio_ring.ko
說明:
- 如果誤將built-in形式存在內核中的驅動添加到initrd或initramfs文件中,不會影響云主機正常使用,這里全寫進去只是為了修改的方便,但是使用lsinitrd命令無法檢查到。可使用如下方法確定這些驅動是否以built-in形式存在內核中,例如:
cat /boot/config-uname -r| grep CONFIG_VIRTIO | grep y
Ubuntu/Debian系列操作系統相關操作
- 執行以下命令,打開“modules”文件。
vi /etc/initramfs-tools/modules
- 按“i”進入編輯模式,修改“/etc/initramfs-tools/modules”文件,添加virtio的驅動(具體格式要根據操作系統本身的要求來決定)。
[root@CTU10000xxxxx ~]#vi /etc/initramfs-tools/modules
……
# Examples:
#
# raid1
# sd_mOd
virtio_blk
virtio_scsi
virtio_net
virtio_pci
virtio_ring
virtio
- 按“Esc”后,輸入:wq,按“Enter”。保存設置并退出“/etc/initramfs-tools/modules”文件。
- 執行以下命令,重新生成initrd。
update-initramfs -u
- 執行以下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitramfs /boot/initrd.img-uname -r |grep virtio
[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 | 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
SUSE/openSUSE系列操作系統相關操作
當操作系統版本低于SUSE 12 SP1或低于openSUSE 13時,請修改“/etc/sysconfig/kernel”文件,操作步驟請參考第一種情況。
當操作系統版本為SUSE 12 SP1時,修改“/etc/dracut.conf”文件,添加virtio的驅動,操作步驟請參考第二種情況。
當操作系統版本高于SUSE 12 SP1或高于openSUSE 13版本時,修改“/etc/dracut.conf”文件,在add_drivers項中添加virtio的驅動,操作步驟請參考第三種情況。
- 情況一:當操作系統版本低于SUSE 12 SP1或低于openSUSE 13時,操作步驟如下。
a. 執行如下命令,修改“/etc/sysconfig/kernel”文件。
vi etc/sysconfig/kernel
b. 在INITRD_MODULES=""中添加virtio的驅動(具體格式要根據OS本身的要求來決定)。
SIA10000xxxxx:~ # vi /etc/sysconfig/kernel
# (like drivers for scsi-controllers, for lvm or reiserfs)
#
INITRD_MODULES="ata_piix ata_generic virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
c. 執行mkinitrd命令,重新生成initrd。
說明:
- 如果引導的虛擬文件系統不是默認的initramfs或者initrd,則命令為:dracut -f 實際使用的initramfs或者initrd文件名。“實際使用的initramfs或者initrd文件名”可在menu.lst或者grub.cfg配置(“/boot/grub/menu.lst”或“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”)中獲取。
以SUSE 11 SP4為例,如下所示:
default 0
timeout 10
gfxmenu (hd0,0)/boot/message
title sles11sp4_001_[_VMX_]
root (hd0,0)
kernel /boot/linux.vmx vga=0x314 splash=silent console=ttyS0,115200n8 console=tty0 net.ifnames=0 NON_PERSISTENT_DEVICE_NAMES=1 showopts
initrd /boot/initrd.vmx
title Failsafe_sles11sp4_001_[_VMX_]
root (hd0,0)
kernel /boot/linux.vmx vga=0x314 splash=silent ide=nodma apm=off noresume edd=off powersaved=off nohz=off highres=off processsor.max+cstate=1 nomodeset x11failsafe console=ttyS0,115200n8 console=tty0 net.ifnames=0 NON_PERSISTENT_DEVICE_NAMES=1 showopts
initrd /boot/initrd.vmx
其中,initrd所在行的/boot/initrd.vmx為實際使用的initrd文件,執行的時候請按照dracut -f /boot/initrd.vmx執行。如果initrd所在行的initrd文件不包含/boot目錄,如/initramfs-xxx,請在執行dracut命令時增加boot目錄,例如:dracut -f /boot/initramfs-xxx。
d. 執行如下命令,檢查是否已經成功裝載了KVM的virtio相應模塊。
lsinitrd /boot/initrd-uname -r | grep virtio
SIA10000xxxxx:~ # lsinitrd /boot/initrd-`uname -r` | grep virtio
-rwxr--r-- 1 root root 19248 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/scsi/virtio_scsi.ko
-rwxr--r-- 1 root root 23856 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/block/virtio_blk.ko
drwxr-xr-x 2 root root 0 Jul 12 14:53 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio
-rwxr--r-- 1 root root 15848 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio_ring.ko
-rwxr--r-- 1 root root 20008 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio_pci.ko
-rwxr--r-- 1 root root 12272 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio.ko
-rwxr--r-- 1 root root 38208 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/virtio_net.ko
e. 重啟云主機。
f.執行如下命令確認initrd中是否存在KVM驅動。
lsinitrd /boot/initrd-uname -r | grep virtio
SIA10000xxxxx:~ # lsinitrd /boot/initrd-`uname -r` | grep virtio
-rwxr--r-- 1 root root 19248 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/scsi/virtio_scsi.ko
-rwxr--r-- 1 root root 23856 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/block/virtio_blk.ko
drwxr-xr-x 2 root root 0 Jul 12 14:53 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio
-rwxr--r-- 1 root root 15848 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio_ring.ko
-rwxr--r-- 1 root root 20008 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio_pci.ko
-rwxr--r-- 1 root root 12272 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/virtio/virtio.ko
-rwxr--r-- 1 root root 38208 Jun 22 2012 lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/net/virtio_net.ko
說明:
- 如果誤將built-in形式存在內核中的驅動添加到initrd或initramfs文件中,不會影響云主機正常使用,這里全寫進去只是為了修改方便,但是使用lsinitrd命令無法檢查到。可使用如下方法確定這些驅動是否以built-in形式存在內核中,例如:
cat /boot/config-uname -r| grep CONFIG_VIRTIO | grep y- 情況二:當操作系統版本為SUSE 12 SP1時,操作步驟如下。
a. 執行以下命令,打開“/etc/dracut.conf”文件。
vi /etc/dracut.conf
b. 按“i”進入編輯模式,在“add-drivers”項中添加virtio的驅動(具體格式要根據操作系統本身的要求來決定)。
[root@CTU10000xxxxx ~]# vi /etc/dracut.conf
# additional kernel modules to the default
add_drivers+="ata_piix ata_generic virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
c. 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出“/etc/dracut.conf”文件。
d. 執行以下命令,重新生成initrd。
dracut -f /boot/initramfs-文件名
如果引導的虛擬文件系統不是默認的initramfs,則命令為:dracut -f 實際使用的initramfs文件名或者initrd文件名。“實際使用的initramfs文件名或者initrd文件名”可在grub.cfg配置(“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”或“/boot/grub/grub.conf”,具體路徑根據OS不同會有所不同)中獲取。
e. 如果引導的虛擬文件系統是initramfs,執行以下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initramfs-uname -r .img | grep virtio
如果引導的虛擬文件系統是initrd,執行如下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initrd-uname -r | grep virtio
- 情況三:當操作系統版本高于SUSE 12 SP1或高于openSUSE 13版本時,操作步驟如下。
以SUSE Linux Enterprise Server 12 SP2 (x86_64)為例,如下所示:
a. 執行以下命令,打開“/etc/dracut.conf”文件。
vi /etc/dracut.conf
b. 按“i”進入編輯模式,在“add_drivers”項中添加virtio的驅動(具體格式要根據操作系統本身的要求來決定)。
[root@CTU10000xxxxx ~]# vi /etc/dracut.conf
# additional kernel modules to the default
add_drivers+="ata_piix ata_generic virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
c. 按“Esc”后,輸入:wq,按“Enter”。 保存設置并退出“/etc/dracut.conf”文件。
d. 執行以下命令,重新生成initrd。
dracut -f /boot/initramfs-文件名
如果引導的虛擬文件系統不是默認的initramfs,則命令為:dracut -f 實際使用的initramfs文件名或者initrd文件名。“實際使用的initramfs文件名或者initrd文件名”可在grub.cfg配置(“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”或“/boot/grub/grub. conf”,具體路徑根據OS不同會有所區別)中獲取。
e. 如果引導的虛擬文件系統是initramfs,執行以下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initramfs-uname -r .img | grep virtio
如果引導的虛擬文件系統是initrd ,執行如下命令,檢查是否已經成功裝載了原生的KVM驅動相應模塊。
lsinitrd /boot/initrd-uname -r | grep virtio
以引導的虛擬文件系統是initrd為例,回顯信息如下所示:
sluo-ecs-30dc:~ # lsinitrd /boot/initrd-`uname -r` | grep virtio
-rw-r--r-- 1 root root 29335 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/block/virtio_blk.ko
-rw-r--r-- 1 root root 57007 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/net/virtio_net.ko
-rw-r--r-- 1 root root 32415 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/scsi/virtio_scsi.ko
drwxr-xr-x 2 root root 0 Sep 28 10:21 lib/modules/4.4.21-69-default/kernel/drivers/virtio
-rw-r--r-- 1 root root 19623 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/virtio/virtio.ko
-rw-r--r-- 1 root root 38943 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/virtio/virtio_pci.ko
-rw-r--r-- 1 root root 24431 Oct 26 2016 lib/modules/4.4.21-69-default/kernel/drivers/virtio/virtio_ring.ko
說明:
- 如果誤將built-in形式存在內核中的驅動添加到initrd或initramfs文件中,不會影響云主機正常使用,這里全寫進去只是為了修改方便,但是使用lsinitrd命令無法檢查到。可使用如下方法確定這些驅動是否以built-in形式存在內核中,例如:
cat /boot/config-uname -r| grep CONFIG_VIRTIO | grep y
清除日志文件
清除日志文件、歷史記錄等,關閉云主機。
- 執行如下命令,清除冗余key文件:
echo > /$path/$to/$root/.ssh/authorized_keys
例如:echo > /root/.ssh/authorized_keys
echo > /$path/$to/$none-root/.ssh/authorized_keys
例如:echo > /home/linux/.ssh/authorized_keys
- 執行如下命令,清空“/var/log”目錄的日志文件:
rm -rf /var/log/*
- 執行如下命令,清空歷史記錄:
history -w
echo > /root/.bash_history
history -c