注:该文档仅仅用于测试虚拟化基本功能,为更好的管理虚拟机,需要使用libvirt等相关虚拟化管理工具,见另一篇笔记:
建议首先升级kernel,以便安装新版本的kvm及libvirt,旧版本的有一些bug
源:
yum makecache
yum list kernel
yum install kernel
参考:
uname -a
Linux srv4 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:20 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
1、检查cpu是否支持虚拟化
egrep '(vmx|svm)' --color=always /proc/cpuinfo
check the KVM Guest Support Status for your guest operating system
2、安装KVM
The KVM package for CentOS is available in the extras repository for versions prior to CentOS 5.4. You may install KVM with:
yum install kvm kmod-kvm kvm-qemu-img
You probably want to also install QEMU, which is available in the base CentOS repositories, because many of its provided commands can be useful in managing a VM.
3、加载模块
modprobe kvm
intel: modprobe kvm-intel
amd: modprobe kvm-amd
非root用户启动kvm,查看上面提到的参考。
关于:
modprobe kvm-amd/kvm-intel FATAL: Error inserting kvm_amd (/lib/modules/2.6.18-194.el5/weak-updates/kmod-kvm/kvm-amd.ko): Unknown symbol in module, or unknown parameter (see dmesg)
分析:
ll /lib/modules/2.6.18-194.el5/weak-updates/kmod-kvm
lrwxrwxrwx 1 root root 49 Apr 18 11:47 ksm.ko -> /lib/modules/2.6.18-238.el5/extra/kmod-kvm/ksm.ko lrwxrwxrwx 1 root root 53 Apr 18 11:47 kvm-amd.ko -> /lib/modules/2.6.18-238.el5/extra/kmod-kvm/kvm-amd.ko lrwxrwxrwx 1 root root 55 Apr 18 11:47 kvm-intel.ko -> /lib/modules/2.6.18-238.el5/extra/kmod-kvm/kvm-intel.ko
可以看到,这几个文件连接到了2.6.18-238.el5对应的模块。
这是应为在yum install kvm-mod安装时,安装的源中的kvm-mod对应的内核已经升级到2.6.18-238.el5。
解决:
安装对应的内核
yum install kernel
修改/etc/grub.conf,使用新的内核启动
重启系统,reboot
再次加载模块:
intel: modprobe kvm-intel
amd: modprobe kvm-amd
关于无法加载:
FATAL: Error inserting kvm_amd (/lib/modules/2.6.18-238.9.1.el5/weak-updates/kmod-kvm/kvm-amd.ko): Operation not supported
查看是否是因为bios中关闭了cpu的虚拟化支持
# dmesg | grep kvm
kvm: disabled by bios
关于dell 服务器远程开启CPU VT支持,见后面的文章。
4、启动虚拟机,安装系统
4.1 创建disk image
qemu-img create -f raw disk.img 20G、
建议使用raw格式,raw格式的性能比qcow2的性能要好
创建一个可以达到20G的disk image,It will only use the amount of space that it needs though.The -f qcow2 is the standard modern qemu image format.
4.2 启动虚拟机,安装系统
/usr/libexec/qemu-kvm -hda ./disk.img -cdrom /usr/local/CentOS-5.6-x86_64/CentOS-5.6-x86_64-bin-1of8.iso -m 512 -smp 2 -boot d
其中:-smp :分配的cpu内核数
-boot d :-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
启动windows虚拟机,必须添加-localtime参数,否外使用utc时间。
4.3 关于换盘
进入qemu的控制台,在鼠标聚焦到qemu界面时候,按住 Ctrl+Alt+2 进入控制台(将显示输出到vnc时,操作相同):
(qemu) change cdrom /usr/local/CentOS-5.6-x86_64/CentOS-5.6-x86_64-bin-2of8.iso
关于错误:"device not found"。可能是设备映射出错,解决:
(qemu) info block
...
(qemu) change ide1-cd0 iso文件、
ctrl+alt+1 返回
关于组合键:
Ctrl-Alt-f 全屏
Ctrl-Alt-n
n=1:目标系统显示
n=2:监视器
n=3:串口
在通常情况下,Qemu使用SDL来显示VGA输出,使用-nographic,禁止所有的图形输出,这样Qemu只是一个简单的命令行程序。模拟的串口将会重定向到命令行,所以我们依然可以在Qemu平台上使用串口命令来调试linux内核。
在启动时,如果我们使用了‘-nographic’参数,我们可以使用Ctrl-a h来得到终端命令:
Ctrl-a h 打印帮助信息
Ctrl-a x 退出模拟
Ctrl-a s 将磁盘信息写入文件(如果为-snapshot)
Ctrl-a b 发出中断
Ctrl-a c 在控制台与监视器间进行切换
Ctrl-a Ctrl-a 发送Ctrl-a
5、系统安装完成,启动虚拟机:
/usr/libexec/qemu-kvm -hda ./disk.img -m 512 -smp 2 -boot c
关于:Could not initialize SDL - exiting
该错误与鼠标有关,解决办法:在图形界面启动,或者添加参数-nographic,或者在vnc显示图形界面,如果添加了-nographic,则不会启动vnc。关于vnc,详细的方法见后面的介绍。
6、查看disk image信息:
qemu-img info disk2.img
7、复制disk image:
20120702:错误,-b:If base_image is specified, then the image will record only the differences from base_image.
qemu-img create -b ./disk.img ./centvm3.img -f raw 10G 错误,该方法不是复制磁盘
启动后记得更改主机名。
20110712:不要使用creat,creat会在磁盘文件的info中创建backing file。这个会造成以后再次使用这个磁盘创建新的磁盘时出现错误,qemu-img : could not open 磁盘文件
可以使用convert创建磁盘:
关于qemu-img convert:
会创建新格式的磁盘,旧格式的磁盘仍然存在。
8、关于网络
参考:
参考:
8.1、kvm默认使用NAT网络,guest获得一个10.0.2.x的地址,可以访问host服务器所在的LAN及subnet。虽然guest的IP为10.0.2.x,仍然可以通过ssh及samba访问host(或在网络上的host),而且可以访问internet。vpn客户端可能不能工作.
8.2、桥接网络(Bridged Tap Networking)
如果你希望guest以另外一个host出现在LAN上,对网络上的其他host可见。你需要是用桥接网络。网络上有很多QEMU howto,但是大多数已经太旧了,因为已经在2.6.18内核时更改了。
8.3、部署桥接网络:
很多howto的建议是在/etc目录下建立一个qemu-ifup脚本。此处使用的不建议这样做。
8.3.1、yum install bridge-utils tunctl
8.3.2、建立文件:/etc/udev/rules.d/90-kvm-rules
KERNEL=="kvm", NAME="%k", GROUP="kvm", MODE="0660"
KERNEL=="tun", NAME="net/%k", GROUP="kvm", MODE="0660"
设置权限,并加到/etc/rc.d/rc.locl脚本中
chown root:kvm /dev/net/tun
chmod 0660 /dev/net/tun
8.3.3、启动br0
方法1:修改配置文件
Edit /etc/sysconfig/network-scripts/ifcfg-eth0
注释掉 BOOTPROTO
添加 BRIDGE=br0
DEVICE=eth0
#BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0
Create /etc/sysconfig/network-scripts/ifcfg-br0
The content should be:
DEVICE=br0
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
ONBOOT=yes
TYPE=Bridge
/etc/init.d/networking restart
The bridge br0 should get the ip address (either static/dhcp) while the physical eth0 is left without ip address.
注:此时会丢失原来的eth0的连接,不建议远程操作。或者在你可以通过另一块网卡连接到该服务器时,可以这样操作。
对于rhel6和centos6,需要关闭NetworkManager
service NetworkManager stop
chkconfig --level 35 NetworkManager off
方法2:使用命令行
brctl addbr br0
ifconfig eth0 0.0.0.0
brctl addif br0 eth0
ifconfig br0 192.168.1.120 netmask 255.255.255.0 up
route add -net 192.168.1.0 netmask 255.255.255.0 br0
route add default gw 192.168.1.1 br0
8.3.4、启动用于client的tap网卡
创建tap0
tunctl -b -u root #第一次运行,创建tap0,第二次,创建tap1,一次类推
启动tap0
ifconfig tap0 up #不要为该网卡配置地址
将tap0添加到
brctl addif br0 tap0
其中:
tunctl is used to set up and maintain persistent TUN/TAP network interfaces, enabling user applications to simulate network traffic. Such interfaces is useful for VPN software, virtualization, emulation, simulation, and a number of other applications
查看tap设备:
ip addr show
8.3.5、与鼠标有关
export SDL_VIDEO_X11_DGAMOUSE=0
8.3.6、iptables
iptables -I RH-Firewall-1-INPUT -i br0 -j ACCEPT
8.3.7、VLANs(必须,否则guest服务器只能与host通信)
When using VLANs on a setup like this and no traffic is getting through to your guest(s), you might want to do:
#cd /proc/sys/net/bridge
# ls
bridge-nf-call-arptables bridge-nf-call-iptables
bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged
# for f in bridge-nf-*; do echo 0 > $f; done
原值为1.
并写到/etc/sysctl.con中
- net.bridge.bridge-nf-call-ip6tables = 0
- net.bridge.bridge-nf-call-iptables = 0
- net.bridge.bridge-nf-call-arptables = 0
- net.bridge.bridge-nf-filter-vlan-tagged = 0
8.3.8、以桥接方式启动虚拟机
- mac=`printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256))`
- /usr/libexec/qemu-kvm \
- -hda ./disk.img \
- -m 1024 \
- -smp 2 \
- -boot c \
- -net nic,macaddr=$mac \
- -net tap,ifname=tap0,script=no,downscript=no
启动guset以后,修改ip地址,不要把mac地址写进去,因为后面启动的脚本里添加了每次启动时,使用随机的mac地址,另外,为了在启动时不知为何,网卡获取ip地址方式被改为DHCP,为ifcfg-eth0文件添加禁止修改的属性
chattr +i /etc/sysconfig/network-scripts/ifcfg-eth0
如果将mac地址写进来,会造成guest启动后,文件中的mac和实际的mac不符,不能启动eth0的问题。
8.3.9、关于错误:
/etc/qemu-ifup: could not launch network script
Could not initialize device 'tap'
启动时添加参数script=no
8.4 关于NAT网络
以下为启动windows服务器的例子,将host主机的3389端口映射到guest主机的3389端口,用于远程桌面连接。并开启vnc
- mac=`printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256))`
- /usr/libexec/qemu-kvm \
- -hda ./win2003.img \
- -m 1024 \
- -smp 2 \
- -boot c \
- -vnc host-ip:1,password \
- -daemonize \
- -net nic,macaddr=$mac \
- -net user \
- -redir tcp:3389::3389
windows服务器的网卡需要配置为通过dhcp获取IP。
9、关于将虚拟机的显示输出到vnc
注意:如果添加了-nographic,则不会启动vnc。
启动时添加参数: -vnc host-ip:1,password (或2,3....)
关于启动时报错:
libgcrypt initialization error
在报错时,我的libgcrypt.i386、libgcrypt.x86_64、libgcrypt-devel.x86_64版本为:1.2.4-1.el5
yum install libgcrypt* 以后解决问题
libgcrypt.i386、libgcrypt.x86_64、libgcrypt-devel.x86_64,libgcrypt-devel.i386版本为:1.4.4-5.el5
-vnc一般和-daemonize参数一起使用:
-daemonize daemonize QEMU after initializing
类似于将虚拟机启动在后台。
将显示输出到vnc,将虚拟机起在后台。
关于vnc连接:
我在使用realvnc 的viewer连接时,画面闪一下,不能连接,推荐使用一个单独的可执行文件(exe),无需安装。
或从本地下载:
或者下载新版本的vncviwer,4.1.3的可以连接。注,不要通过vnc address book连接,直接使用vncviewer
注:关于上面提到的reanlvnc的问题
在选项里选择always use best available colour quality即可,即adapt to network speed 到best quality
关于 error: unknown OS type hvm
bios中关闭了cpu虚拟化
关于DELL 2950服务器开启CPU的VT支持:
本地操作:
1 在 POST 屏幕中按 键以转至“BIOS setup”。
2 导航至“CPU Information”。
3 按 键,并导航至“Virtualization Technology”。
4 通过切换左右箭头,选择“Enabled”。
5 保存选择内容,并退出“BIOS setup”
远程操作:
1、安装:Dell OpenManage Server Administrator
新的Dell OpenManage 需要提供快速服务编码下载,或者从产品列表中选择相应的型号,从下载列表中下载:
ftp://ftp.dell.com/sysman/OM-SrvAdmin-Dell-Web-LX-6.5.0-2247_A01.15.tar.gz
注:也可以通过安装dell的yum源来使用yum安装,详细查看:
静默安装,linux/supportscripts/srvadmin-install.sh -x
对于RHEL5,静默安装可以自动解决包的依赖问题
关于6.5的依赖关系
- Please check the manual of OM.
-
- For example, if you are installing the dependent RPMs on Red Hat Enterprise Linux 5.3, then select the following files from srvadmin\linux\RPMS\supportRPMS\opensource-components\RHEL5:
- * libcmpiCppImpl0-2.0.0Dell-1.1.rhel5.i386.rpm
- * libwsman1-2.1.5Dell-33.1.rhel5.i386.rpm
- * openwsman-client-2.1.5Dell-33.1.rhel5.i386.rpm
- * openwsman-server-2.1.5Dell-33.1.rhel5.i386.rpm
- * sblim-sfcb-1.3.2Dell-13.1.rhel5.i386.rpm
- * sblim-sfcc-2.1.5Dell-6.1.rhel5.i386.rpm
- Thanks
登陆时:connection error?
访问:
对于rhel6
libcmpiCppImpl0.x86_64
openwsman-server.x86_64
openwsman-client.x86_64
sblim-sfcb.x86_64
直接yum安装即可
rhel5,需要从omsa中查找对应的包进行安装。
error: Failed dependencies:
perl(LWP::UserAgent) is needed by sblim-sfcb-1.3.7-1.6.4.el5.x86_64
rpm --nodeps -ivh sblim-sfcb-1.3.7-1.6.4.el5.x86_64.rpm
关于libstdc++.so.5 is needed by srvadmin-omacore-6.1.0-648.i38
yum install compat-libstdc++*
2、我的系统CENTOS5.3
更改/etc/redhat-release
setup.sh通过关键词来判断操作系统的版本
- elif [ -f /etc/redhat-release ] && [ `grep -c "Tikanga" /etc/redhat-release` -gt 0 ]; then
- GBL_OS_TYPE=${GBL_OS_TYPE_RHEL5}
- GBL_OS_TYPE_STRING="RHEL5"
- PATH_TO_RPMS_SUFFIX=RHEL5
- elif [ -f /etc/redhat-release ] && [ `grep -c "Santiago" /etc/redhat-release` -gt 0 ]; then
- if [ "${DISTRO}" = "x86_64" ]; then # 32bit is not supported for rhel6.
- GBL_OS_TYPE=${GBL_OS_TYPE_RHEL6}
- GBL_OS_TYPE_STRING="RHEL6"
- PATH_TO_RPMS_SUFFIX=RHEL6
3、解压后:
linux/supportscripts/srvadmin-install.sh
4、安装后
linux/supportscripts/srvadmin-services.sh start
启动后1311端口无监听?
/etc/srvadmin/iws/config/iws.ini
ip_address = *
更改为 ip_address = 127.0.0.1
重启:
/opt/dell/srvadmin/iws/bin/linux/dsm_om_connsvc restart
5、访问:
https://localhost:1311/
切忌:是https
用户名密码为系统的用户名和密码
6、更改BIOS设置。