Kvm 

usage: qemu-system-i386 [options] [disk_image]  同kvm 

一般选项:

-M machine    #选择模拟器

-fda file

-fdb file        #使用file作为软盘镜像.我们也可以通过将/dev/fd0作为文件名来使用主机软盘.

-hda file

-hdb file

-hdc file

-hdd file  #使用file作为因硬盘0,1,2,3的镜像

-cdrom file #使用文件作为CD-ROM镜像(但是我们不可以同时使 用'-hdc'和'-cdrom').我们可以通过使用'/dev/cdrom'作为文件名来 使用主机的CD-ROM.        

-boot[a|c|d] #由软盘(a),硬盘(c)或是CD-ROM(d).在默认的情况下由硬盘启动.

-snapshot 写入临时文件而不是写入磁盘镜像文件.在这样的情况下,并没有写回 我们所使用的raw磁盘镜像文件.然而我们却可以通过按下C-a s来强制写 回磁盘镜像文件.

-m megs 设置虚拟内存为megsM字节,在默认情况下为128M

-smp n   模拟一个有n个CPU的SMP系统,以PC机为目标,最多可以支持255个CPU

-nographic  在通常情况下,Qemu使用SDL来显示VGA输出.使用这个选项,我们可以 禁止所有的图形输出,这样Qemu只是一个简单的命令行程序.模拟的串 口将会重定向到命令行.所以,我们仍然可以在Qemu平台上使用串口命 令来调试Linux内核.

-localtime   设置时钟为本地时间(默认为UTC时间).如果在MS-DOS或是Windows上 这个选项则需要正确的日期

-pidfile file 存储qemu的进程到file文件中,如果我们使用由脚本启动的,这个选项会很有用

网络选项:

-net nic[,vlan=n][,macaddr=addr]   创建一个新的网卡并与VLAN n(在默认的情况下n=0)进行连接.在PC机 上,NIC当前为e1000.作为可选项的项目,MAC地址可以进行改变.如果没有指定-net选项,则会创建一个单一的NIC.

-net user[,vlan=n] 使用用户模式网络堆栈,这样就不需要管理员权限来运行.如果没有指 定-net选项,这将是默认的情况.

-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]  将TAP网络接口name与VLAN n进行连接,并使用网络配置脚本file进行 配置.默认的网络配置脚本为/etc/qemu-ifup.和/etc/qemu-ifdown,使用scrict=no或者downscript=no 关闭脚本执行.

-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]  使用TCP socket 将VLAN n与远程的另一个Qemu虚拟机的VLAN进行连 接.如果指定了listen,Qemu将在port端口监听连入请求(host是可选 的), connect可以用来使用listen选项与另一个Qemu实例进行连 接.fd=h指定了一个已经打开的TCP socket.

-net socket[,vlan=n][,fd=h][,mcast=maddr:port] 创建一个VLAN n,并使用UDP 多址通信套掊口与其他的QEMU虚拟机进 行共享,尤其是对于每一个使用多址通信地址和端口的QEMU使用同一 个总线. 在这里我们要注意以下几点:

1.几个QEMU可以运行在不同的主机上但却使用同一个总线(在这里假设 为这些主机设置了正确的多址通信)

2.mcast支持是与用户模式Linux相兼容的.

3.使用fd=h指定一个已经打开的UDP 多址通信套接口.

-net none  表明没有网络设备需要进行配置.如果没有指定-net选项,则会用来覆 盖活跃的默认配置.

下面看个简单实例

由于之前在宿主机我使用了lvm卷创建一个虚拟机,如果该虚拟机需要迁移,可以把该设备dd出一个文件镜像来,之后copy到任意一台宿主机,使用kvm命令来启动该文件镜像

root@ubuntu:/opt# dd if=/dev/vm/vm201 of=/opt/vm201_test bs=10M
root@ubuntu:/opt# kvm -m 1024 -hda vm201_test  -vnc 10.1.6.228:1 #快速启动kvm  这种方式没有加入网桥,不能联网.

#准备qemu-ifup 脚本,在客户机启动网络前会执行脚本是由"script"选项配置的(默认/etc/qemu-ifup),一般再该脚本中创建一个TAP设备并将其与bridge绑定起来.脚本如下,其中"$1"是qemu-kvm命令工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap)
root@ubuntu:qemu# cat /etc/qemu-ifup
#!/bin/sh 

#set your bridge name
switch=br0

if [ -n "$1" ];then
    #start up the TAP interface
    ip link set $1 up
    sleep 1
    #add TAP interface to the bridge
    brctl addif ${switch} $1
    exit 0
else
    echo "Error: no interface specified"
    exit 1
fi

root@ubuntu:/opt# kvm -m 1024 -hda vm201_test  -net nic -net tap,script=/etc/qemu-ifup -vnc 10.1.6.228:1 -boot c   #启动后可以和宿主机相通

root@ubuntu:qemu# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.0024e87bbe32	no		eth1
                                   tap0
root@ubuntu:/opt# dd if=/dev/vm/vm201 of=/opt/vm201_test bs=10M
root@ubuntu:/opt# kvm -m 1024 -hda vm201_test  -vnc 10.1.6.228:1 #快速启动kvm  这种方式没有加入网桥,不能联网.

#准备qemu-ifup 脚本,在客户机启动网络前会执行脚本是由"script"选项配置的(默认/etc/qemu-ifup),一般再该脚本中创建一个TAP设备并将其与bridge绑定起来.脚本如下,其中"$1"是qemu-kvm命令工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap)
root@ubuntu:qemu# cat /etc/qemu-ifup
#!/bin/sh 

#set your bridge name
switch=br0

if [ -n "$1" ];then
    #start up the TAP interface
    ip link set $1 up
    sleep 1
    #add TAP interface to the bridge
    brctl addif ${switch} $1
    exit 0
else
    echo "Error: no interface specified"
    exit 1
fi

root@ubuntu:/opt# kvm -m 1024 -hda vm201_test  -net nic -net tap,script=/etc/qemu-ifup -vnc 10.1.6.228:1 -boot c   #启动后可以和宿主机相通

root@ubuntu:qemu# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.0024e87bbe32	no		eth1
                                   tap0

之后可以通过vnc 10.1.6.228:1 连接