• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    KVM虛擬機和QEMU

    發布時間:  2012/8/28 18:10:42
    安裝 kvm 和 網卡橋接工具:
    sudo aptitude install kvm qemu bridge-utils uml-utilities
    
    配置橋接網絡

    先創建 br0 設備:

    brctl addbr br0      # 創建一個橋接口
    

    以后要添加網卡到這個橋接接口只需:

    brctl addif br0 eth0 # 添加eth0到br0,重要
    

    我的網絡配置文件 /etc/network/interfaces 內容如下:

    auto lo
    iface lo inet loopback
    
    #auto eth0
    #iface eth0 inet dhcp
    
    auto br0
    iface br0 inet dhcp
    bridge_ports eth0
    

    主要思路:把 br0 接口配置成和以前正常工作的網口一樣(我這里是 eth0), 然后禁用以前網口的配置(我把 eth0 的配置注釋掉了),最后在 br0 配置里面 加上一句 "bridge_ports eth0" 。

    說明: 如果是靜態地址,可參照相應設置更改。

    啟動虛擬機

    配置好虛擬機,怎么使用就因人而異了,我的使用方式是,后臺執行,使用 vnc 遠程連接虛擬機。因此我用下面的小腳本啟動 uqkvm (如果你不了解 vnc ,或 者不太明白 shell 腳本,可能下面的說明對你無用。由于精力和能力有限,下面 僅給出腳本,無法一一闡述明了。):

    #!/bin/sh
    
    # 簡介:快速試用 KVM
    
    # KVM 程序地址
    KVM_CMD=/usr/bin/kvm
    QEMU_IFUP=/etc/init.d/qemu-ifup
    HOST=172.16.70.3
    
    # 默認值
    MEM=512 # 內存
    TAP=2 # 第幾塊網卡(0<TAP<10)
    
    # 您的磁盤映像
    DISK=
    
    # 所有其他的 KVM 參數
    OTHER=
    
    test -n "$1" && TAP=$1
    test -n "$DISK" && HDA="-hda $DISK" || HDA="-hda $2"
    shift 2
    OTHER=$@
    
    # 以來其他變量的變量要最后指明
    
    NET="-net nic,macaddr=32:32:32:32:32:3$TAP -net tap,ifname=tap$TAP,script=$QEMU_IFUP"
    VNC="-vnc $HOST:$TAP"
    RUN_CMD="$KVM_CMD -m $MEM $HDA $NET $VNC -localtime --daemonize $OTHER"
    
    
    echo "運行命令:$RUN_CMD"
    $RUN_CMD
    
    if test $? = 0; then
        echo "KVM 運行成功,請用 VNC 鏈接 $HOST:$TAP ..."
        exit 0
    else
        echo "KVM 運行失敗,請檢查命令行是否有錯誤!"
        exit 1
    fi
    

    其中用到的 /etc/init.d/qemu-ifup 文件如下:

    #!/bin/bash
    
    switch=br0
    
    if [ -n "$1" ];then
            /sbin/ip link set $1 up
            sleep 0.5s
            /usr/sbin/brctl addif $switch $1
            exit 0
    else
            echo "Error: no interface specified"
            exit 1
    fi
    

    uqkvm 腳本使用方法如下:

    ./uqkvm 3 GreenOS.img -cdrom  /data/lab/LessWatts/GTGS-lesswatts_xfce-201004201555.iso -boot d
    

    如果僅僅需要啟動系統:

    # ./uqkvm 3 GreenOS.img
    運行命令:/usr/bin/kvm -m 512 -hda GreenOS.img -net nic,macaddr=32:32:32:32:32:33 -net tap,ifname=tap3,script=/etc/init.d/qemu-ifup -vnc 172.16.70.3:3 -localtime --daemonize
    pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
    KVM 運行成功,請用 VNC 鏈接 172.16.70.3:3 ...
    

    現在查看橋接設備情況:

    $ sudo brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.0001028c5009       no              eth0
                                                            tap3
    

    可見 tap2 和 eth0 都在 br0 上。

    RHEL/Fedora/CentOS

    yum install bridge-utils kvm
    

    bridge-utils是網卡橋接工具,

    示例1:Redhat系統KVM

    創建磁盤

    # qemu-img create -f qcow2 turbo-10.5.5-rc2.img 20G
    Formatting 'turbo-10.5.5-rc2.img', fmt=qcow2, size=20971520 kB
    # file turbo-10.5.5-rc2.img
    turbo-10.5.5-rc2.img: QEMU Copy-On-Write disk image version 2, size 5 + 0
    

    配置橋接

    配置 /etc/sysconfig/network-scripts 下面的網絡腳本

    # cat /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=172.16.70.30
    NETMASK=255.255.252.0
    GATEWAY=172.16.68.1
    TYPE=Bridge
    # cat /etc/sysconfig/network-scripts/ifcfg-eth0
    # 3Com Corporation 3c905B 100BaseTX [Cyclone]
    DEVICE=eth0
    #BOOTPROTO=dhcp
    #HWADDR=00:01:02:8C:50:09
    ONBOOT=yes
    BRIDGE=br0
    

    增加一個橋接網絡接口,并把剛才配置的eth0添加到橋接口

    brctl addbr br0      # 創建一個橋接口
    brctl addif br0 eth0 # 添加eth0到br0,重要
    

    使用一個下面的腳本:

    # cat /etc/init.d/qemu-ifup
    #!/bin/bash
    
    switch=br0
    
    if [ -n "$1" ];then
            /sbin/ip link set $1 up
            sleep 0.5s
            /usr/sbin/brctl addif $switch $1
            exit 0
    else
            echo "Error: no interface specified"
            exit 1
    fi
    

    使用橋接網卡

    可以使用橋接網卡啟動qemu-kvm,并使用GTES10.5.5的兩個文件通過 NFS安裝系統:

    # qemu-kvm -m 512 -hda turbo-10.5.5-rc2.img -kernel vmlinuz \
    -initrd initrd.img -net nic -net tap,script=/etc/init.d/qemu-ifup --daemonize
    

    也可以使用iso安裝,這樣對于多張iso發行版的linux需要在qemu的控制 臺換盤:

    # qemu-kvm -m 512 -hda turbo-10.5.5-rc2.img -cdrom 你的iso路徑 \
    -net nic -net tap,script=/etc/init.d/qemu-ifup -boot d --daemonize
    

    進入qemu的控制臺,在鼠標聚焦到qemu界面時候,按住 Ctrl+Alt+2 進 入控制臺:

    (qemu) change cdrom 你的另外一張iso
    

    上面命令如果提示:"device not found"。可能是設備映射出錯,可以這樣:

    (qemu) info block
    ...
    (qemu) change ide1-cd0 iso文件
    

    QEMU常見使用

    使用vnc

    # qemu-kvm -m 512 -hda xp.img -net nic,macaddr=00:00:11:33:02:02 \
             -net tap,ifname=tap2,script=/etc/init.d/qemu-ifup \
             -localtime -vnc 172.16.70.30:2 --daemonize
    

    上面讓kvm虛擬機在后臺運行,并啟動vnc服務器,這樣我們可以用vnc客 戶端鏈接172.16.70.30:5092這個地址。

    QEMU選項:

    一般選項

    -M machine
    選擇模擬的機器(我們可以輸入-M?提到一個模擬的機器列表)
    -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
    寫入臨時文件而不是寫入磁盤鏡像文件.在這樣的情況下,并沒有寫回 我們所使用的磁盤鏡像文件.然而我們卻可以通過按下C-a s來強制寫 回磁盤鏡像文件.
    -m megs
    設置虛擬內存尺寸為megs M字節.在默認的情況下為128M.
    -smp n
    模擬一個有n個CPU的SMP系統.為PC機為目標,最多可以支持255個CPU.
    -nographic
    在通常情況下,Qemu使用SDL來顯示VGA輸出.使用這個選項,我們可以 禁止所有的圖形輸出,這樣Qemu只是一個簡單的命令行程序.模擬的串 口將會重定向到命令行.所以,我們仍然可以在Qemu平臺上使用串口命 令來調試Linux內核.
    -k language
    使用鍵盤布局語言(例如fr為法語).這個選項只有在不易得到PC鍵盤 的情況下使用.我們在PC/Linux或是PC/Windows主機不需要使用這個 選項.默認的為en-us,可用的布局如下:
    ar  de-ch  es  fo    fr-ca  hu  ja  mk    no  pt-br  sv
    da  en-gb  et  fr    fr-ch  is  lt  nl    pl  ru     th
    de  en-us  fi  fr-be  hr    it  lv  nl-be  pt  sl    tr
    
    -audio-help
    這個選項將會顯示聲音子系統的幫助:驅動列表以及可調用的參數.
    -soundhw card1,card2 .... or -soundhw all
    允許聲音并選擇聲音硬件.使用?可以列出所有可用的聲音硬件
    qemu -soundhw sb16,adlib hda
    qemu -soundhw es1370 hda
    qemu -soundhw all hda
    qemu -soundhw ?
    
    -localtime
    設置時鐘為本地時間(默認為UTC時間).如果在MS-DOS或是Windows上 這個選項則需要正確的日期.
    -full-screen
    以全屏方式啟動.
    -pidfile file
    在file文件中存許Qemu的進程PID.如果我們是由腳本啟動的,這個選 項是相當有用的.
    -win2k-hack
    當安裝Windows 2000時可以使用這個選項來避免磁盤錯誤.在安裝上 Windows 2000系統,我們就不再需要這個選項(這個選項降低IDE的傳 輸速度).

    USB選項

    -usb
    允許USB驅動(很快就將成為默認的選項)
    -usbdevice devname
    添加USB設備名.我們可以查看監視器命令usb_add來得到更為詳細的信息.

    網絡選項

    -net nic[,vlan=n][,macaddr=addr]
    創建一個新的網卡并與VLAN n(在默認的情況下n=0)進行連接.在PC機 上,NIC當前為NE2000.作為可選項的項目,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.如果沒有指定name,OS 將會自動指定一個.fd=h可以用來指定一個已經打開的TAP主機接口的 句柄.例如:
    qemu linux.img -net nic -net tap
    

    下面的是一個更為復雜的例子(兩個NIC,每一個連接到一個TAP設備):

    qemu linux.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
                  -net nic,vlan=1 -net tap,vlan=1,ifname=tap1
    
    -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.例如:
    # launch a first QEMU instance
    qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,listen=:1234
    # connect the VLAN 0 of this instance to the VLAN 0 of the first instance
    qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net
    socket,connect=127.0.0.1:1234
    
    -net socket[,vlan=n][,fd=h][,mcast=maddr:port]
    創建一個VLAN n,并使用UDP 多址通信套掊口與其他的QEMU虛擬機進 行共享,尤其是對于每一個使用多址通信地址和端口的QEMU使用同一 個總線. 在這里我們要注意以下幾點:
    • 幾個QEMU可以運行在不同的主機上但卻使用同一個總線(在這里假設 為這些主機設置了正確的多址通信)
    • mcast支持是與用戶模式Linux相兼容的.
    • 使用fd=h指定一個已經打開的UDP 多址通信套接口.

      例如:

    # launch one QEMU instance
    qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net
    socket,mcast=230.0.0.1:1234
    # launch another QEMU instance on same "bus"
    qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net
    socket,mcast=230.0.0.1:1234
    # launch yet another QEMU instance on same "bus"
    qemu linux.img -net nic,macaddr=52:54:00:12:34:58 -net
    socket,mcast=230.0.0.1:1234
    

    下面的為用戶模式Linux的例子:

    # launch QEMU instance (note mcast address selected is UML's default)
    qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net
    socket,mcast=239.192.168.1:1102
    # launch UML
    /path/to/linux ubd0=/path/to/root_fs eth0=mcast
    
    -net none
    表明沒有網絡設備需要進行配置.如果沒有指定-net選項,則會用來覆 蓋活躍的默認配置.
    -tftp prefix
    當使用用戶模式網絡堆棧,激活一個內置的TFTP服務器.所有的以 prefix開始的文件將會使用一個TFTP客戶端從主機下載到本地.在本 地的TFTP客戶端必須以二進制模式進行配置(使用Unix的TFTP客戶端 的bin命令).在客戶機上的主機IP地址如通常的10.0.2.2.
    -smb dir
    -redir [tcp|udp]:host-port:[guest-host]:guest-port
    當使用用戶模式網格棧,將連接到主機端口host-port的TCP或是UDP 連接重定向到客戶機端口guest-port上。如果沒有指定客戶機端口, 他的值為10.0.2.15(由內建的DHCP服務器指定默認地址)。例如: 要重定向從screen 1到客戶機screen 0的X11連接,我們可以使用下 面的方法:
    # on the host
    qemu -redir tcp:6001::6000 [...]
    # this host xterm should open in the guest X11 server
    xterm -display :1
    To redirect telnet connections from host port 5555 to telnet port on
    the guest, use the following:
    
    # on the host
    qemu -redir tcp:5555::23 [...]
    telnet localhost 5555
    

    然后當我們在主機telnet localhost 5555上使用時,我們連接到了 客戶機的telnet服務器上。

    Linux啟動選項

    當我們使用這些選項時,我們可以使用一個指定的內核,而沒有將他 安裝在磁盤鏡像中。這對于簡單的測試各種內核是相當有用的。

    `-kernel bzImage'
    使用bzImage作為內核映像。
    `-append cmdline'
    使用cmdline作為內核的命令行。
    `-initrd file'
    使用file作為初始的ram磁盤。

    調試選項

    `-serial dev'
    重定向虛擬串到主機的設備dev。可用的設備如下:
    vc
    虛擬終端
    pty
    (Linux)偽TTY(自動分配一個新的TTY)
    null
    空設備
    /dev/XXX"
    (Linux)使用主機的tty。例如,'/dev/ttyS0'。主機的串口參數通過模擬進行設置。
    /dev/parportN
    (Linux)使用主機的并口N。當前只可以使用SPP的并口特征。
    file:filename
    將輸出寫入到文件filename中。沒有字符可讀。
    stdio
    (Unix)標準輸入/輸出
    pipe:filename
    (Unix)有名管道filename

    在圖形模式下的默認設備為vc,而在非圖形模式下為stdio.這個選項 可以被多次使用,最多可以模擬4個串口。

    '-parallel dev'

    重定向虛擬并口到主機的設備dev(與串口相同的設備)。在Linux主 機上,`/dev/parportN'可以被用來使用與相應的并口相連的硬件設 備。這個選項可以使用多次,最多可以模擬3個并口。

    `-monitor dev'

    重定向臨視器到主機的設備dev(與串口相同的設備)。在圖形模式 下的默認設備為vc,而在非圖形模式下為stdio。

    '-s'
    等待gdb連接到端口1234.
    `-p port'
    改變gdb連接端口。
    `-S'
    在啟動時并不啟動CPU(我們必須在監視器中輸入'c')
    '-d'
    輸出日志到/tmp/qemu.log
    `-hdachs c,h,s,[,t]'
    強制硬盤0的物理參數(1 <= c <= 16383, 1 <= h <= 16, 1 <= s <=63),并且可以選擇強制BIOS的轉換模式(t=none, lba or auto).通 常QEMU可以檢測這些參數.這個選項對于老的MS-DOS磁盤映像是相當 有用的.
    `-std-vga'
    模擬一個Bochs VBE擴展的標準VGA顯卡(默認情況下為Cirrus Logic GD5446 PCI VGA)
    `-loadvm file'
    從一個保存狀態啟動.

    組合鍵

    在圖形模擬時,我們可以使用下面的這些組合鍵:

    Ctrl-Alt-f
    全屏
    Ctrl-Alt-n
    切換虛擬終端'n'.標準的終端映射如下:
    • n=1 : 目標系統顯示
    • n=2 : 臨視器
    • n=3 : 串口
      Ctrl-Alt
      抓取鼠標和鍵盤

      在虛擬控制臺中,我們可以使用Ctrl-Up, Ctrl-Down, Ctrl-PageUp 和 Ctrl-PageDown在屏幕中進行移動.

    在模擬時,如果我們使用`-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

    磁盤映像

    從0.6.1起,QEMU支持多種磁盤映像格式,包括增長的磁盤映像,壓縮與加 密的磁盤映像.

    我們可以用下面的命令來創建一個磁盤映像:

    qemu-img create myimage.img mysize
    

    這里myimage.img是磁盤映像的文件名,而mysize是以K表示的尺寸.我們 可以使用M前綴來使用M表示尺寸或是G作為前綴使用G表示尺寸.

    qemu-img選項

    可以支持下面的一些命令:

    `create [-e] [-b base_image] [-f fmt] filename [size]'
    `commit [-f fmt] filename'
    `convert [-c] [-e] [-f fmt] filename [-O output_fmt] output_filename'
    `info [-f fmt] filename
    

    命令參數

    filename
    磁盤映像文件名.
    base_image
    只讀的磁盤映像,可以作為拷貝到寫映像的基礎.寫映像 上的拷貝只存儲修改的數據.
    fmt
    磁盤映像格式.在大多數情況下可以自動檢測.可以支持下面的格式:
    • raw

      raw 磁盤格式(默認).這種格式有簡單并且易于移植到其他模擬器的 優點.如果我們的文件系統支持holes(例如在Linux上的ext2或是 ext3),然后只有寫入的部分保持空白.使用qemu-img info來得到映 像使用的實際的大小或是在Unix/Linux上使用 ls -ls.

    • qcow

      QEMU映像格式.最通用的格式.使用他可以獲得較小的映像(如果我們 的文件系統不支持holes,例如在Windows上,這是相當有用的),可以 選用AES加密或是基于zlib的壓縮.

    • cow

      在寫映像格式上的用戶模式的Linux拷貝.在QEMU中作為增長的映像 格式使用.這個選項只是為了與以前版本的兼容,并不能在Win32上使 用.

    • vmdk

      VMware 3 或是 4 兼容的映像格式.

    • cloop

      Linux壓縮的循環映像,重用直接壓縮的CD-ROM映像.

    • size

      以K表示的磁盤映像的尺寸.同時可以支持M或是G作為前綴.

    • output_filename

      目的磁盤映像文件名

    • output_fmt

      目標格式

    • -c

      表明目標映像必須是壓縮的(只是qcow格式)

    • -e

      表明目標映像必須是加密的(只是qcow格式)


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線