为了保证私有镜像导入后可以成功启动云主机,virtio的驱动必须编译进内核或编译为内核模块,请务必在导入镜像之前确保系统中已正确安装了virtio驱动。
以CentOS7系列镜像举例说明如何确认当前系统已正确安装 virtio 驱动。
① 运行以下指令检查服务器内核是否支持virtio驱动:
grep -i virtio /boot/config-$(uname -r)
CONFIG_VIRTIO_BLK
及 CONFIG_VIRTIO_NET
取值为 y,表示驱动已编译进了内核,无须执行下述操作,可导入。CONFIG_VIRTIO_BLK
及 CONFIG_VIRTIO_NET
取值为 m,表示驱动已编译成内核模块,请执行下述操作“②”,确认initramfs(或initrd)文件中是否包含virtio_blk驱动,若无则需要重新制作文件。VIRTIO_BLK
及 VIRTIO_NET
的信息,表示该操作系统没有安装 virtio 相关驱动,需要编译安装virtio驱动,见请执行下述“③”。② 执行以下指令确认 virtio 驱动是否包含在临时文件系统 initramfs 或者 initrd 中(Ubuntu系统请将initramfs替换为initrd):
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
如果initramfs已经包含了virtio_blk
驱动,以及其所依赖的virtio.ko
、virtio_pci.ko
和 virtio_ring.ko
,则无须执行下述操作。
如果initramfs未找到 virtio 相关信息,则需要修复临时文件系统:
A. CentOS 7/6
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initramfs-$(uname -r).img $(uname -r)
echo -e "virtio_pci\nvirtio_blk" >> /etc/initramfs-tools/modules update-initramfs -u
③ 编译安装virtio驱动:
A.下载内核安装包
yum install -y ncurses-devel gcc make wget
uname -r
cd /usr/src/ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.0/linux-3.10.tar.gz tar -zxvf linux-3.10.tar.gz
ln -s linux-3.10 linux
cd /usr/src/linux
B.编译内核
make mrproper
make menuconfig
在 Device Drivers-->Block devices 中选择Virtio block driver
在 Device Drivers-->Network device support 中选择Virtio network driver
make bzImage && make modules && make modules_install
make install
find /lib/modules/"$(uname -r)"/ -name "virtio.*" | grep -E "virtio.*"
① 前往下载iso格式的virtio软件包(以virtio-win-0.1.137.iso为例),iso文件里面包含了各种设备驱动,如网卡驱动(NetKVM), 磁盘驱动(virtsor)等。
② 将virtio-win-0.1.137.iso文件拷贝到Windows虚机里面的某个目录下,可以通过远程连接共享文件夹等方式,将ios文件拷贝到虚机里。
③ 双击iso文件,Windows会自动将其挂载到DVD设备上用于读取数据,下图中右侧的文件夹就是iso软件包里的内容,包括各种设备的驱动程序,如NetKVM对应的就是网卡驱动。
④ 从控制面板里,找到并打开“设备管理器”窗口,只需要安装以下三个设置的驱动程序:
打开设备管理器。会发现有三个打着黄色感叹号的设备没有安装驱动程序,一个SCSI Controller设备,一个网卡和一个PCI简单通信设备,如下图所示。
⑤ 首先安装存储控制器驱动,右键点击选择“更新驱动程序软件”,在出现的窗口点击“浏览计算机以查找驱动程序软件”,并在弹出的窗口中定位到DVD驱动器里的“viostor“目录中的2k12R2/amd64/文件夹(Windows Server 2012R2)。点击确定按钮后,再点击下一步,直到按指示完成该驱动安装。系统如果提示重启,请选择稍后重启。待完全安装完三个驱动以后再考虑重启操作。
⑥ 安装网卡驱动,右键点击选择“更新驱动程序软件”,在出现的窗口点击“浏览计算机以查找驱动程序软件”,并在弹出的窗口中定位到DVD驱动器里的NetKVM/2k12R2/amd64/文件夹,点击确定,按照提示完成按照。
⑦ 安装串口驱动,右键点击选择“更新驱动程序软件”,在出现的窗口点击“浏览计算机以查找驱动程序软件”,并在弹出的窗口中定位到DVD驱动器里的vioserial/2k12R2/amd64/文件夹,点击确定,按照提示完成按照。
⑧ 重启系统。
⑨ 打开“设备管理器”,并检查我们安装的三个驱动程序的版本号:在我们文档的例子里,目标版本号是以13700结尾的数字字符串。
⑩ 清理配置信息,此步骤极为重要。打开命令行窗口或powershell运行窗口,执行如下命令:
c:\windows\system32\Sysprep\sysprep.exe /generalize /oobe /shutdown
需要特别注意的是,在卸载和安装后都要重启系统以保证更新驱动生效。