需要使用支援 INTEL-VT 或 AMD-V 的 CPU。

編核心

```
[*] Virtualization --->
--- Virtualization
Kernel-based Virtual Machine (KVM) support
< > KVM for Intel processors support
< > KVM for AMD processors support

Device Drivers --->
[*] Network device support --->
Universal TUN/TAP device driver support

Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
<*> 802.1Q VLAN Support

Processor type and features --->
[*] Paravirtualized guest support --->
[*] KVM paravirtualized clock
[*] KVM Guest support
-*- Enable paravirtualization code
[*] Paravirtualization layer for spinlocks

Processor type and features --->
[*] Enable KSM for page merging
```

After booting your previously built kernel be sure to check

```
# cat /sys/kernel/mm/ksm/run ksm為記憶體優化分配功能
```

to return 1. Otherwise ksm won't be working.

```
# echo 1 > /sys/kernel/mm/ksm/run 手動啟動ksm
```

vi /etc/portage/make.conf 非64位元才要
加上QEMU_SOFTMMU_TARGETS="x86_64"

```
emerge qemu
```

```
gpasswd -a kvm
```
把其他使用者加入KVM group 才可使用

```
qemu-img create -f qcow2 -o preallocation=metadata gentoo-x86.img 3G
```
創建虛擬磁碟


## 設定網路

方法1.
直接橋接網路卡(等同一張網卡在Host裡)
```
emerge bridge-utils
emerge usermode-utilities

vi /etc/conf.d/net

bridge_br0="tap0 tap1"
brctl_br0="setfd 0 sethello 30 stp off"
config_br0="xxx.xxx.xxx.xxx/24"
config_tap0="null"
routes_br0="default via xx.xx.xx.xx"
tuntap_tap0="tap"
tunctl_tap0="-u root"
mac_tap0="00:00:00:00:00:00"
carrier_timeout_tap0="0"
```

ln br0 並啟動 net.br0

```
# modprobe kvm_intel
# modprobe tun
# tunctl -u 你的使用者名稱 (-t tap0) 為用戶創建虛擬網卡 預設為tap0
# brctl addbr br0 加入橋接器
# brctl addif br0 tap0 將tap0與br0橋接起來
# ifconfig tap0 promisc up 啟用tap0並設置promisc模式
```

方法2.

利用NAT Server

eth0 與br0 兩張網卡
一張連外 一張連內 而連內的就照橋接的方法設定

將虛擬機的ip設跟連內的網卡同區段
利用IPtables 架設NAT Server即可



在init.d底下創建bridge_forward 讓kvm封包可以轉送
```
#!/sbin/runscript depend() {
need net.br0
}
start() {
ebegin "Turning on forwarding for bridge interface"
/sbin/sysctl net.ipv4.conf.br0.forwarding=1 >/dev/null 2>&1
eend $?
}
stop() {
ebegin "Turning off forwarding for bridge interface"
/sbin/sysctl net.ipv4.conf.br0.forwarding=0 >/dev/null 2>&1
eend $?
}
```

virtio系列虛擬硬體(較好)

編核心
```
CONFIG_VIRTIO_PCI=y (Device Drivers -> Virtio Drivers -> PCI driver for virtio devices)
CONFIG_VIRTIO_BALLOON=y (Device Drivers -> Virtio Drivers -> Virtio balloon driver)
CONFIG_VIRTIO_BLK=y (Device Drivers -> Block drivers -> Virtio block driver)
CONFIG_VIRTIO_NET=y (Device Drivers -> Network device support -> Network core device support -> Virtio network driver)
CONFIG_SCSI_VIRTIO=y (Device Drivers -> SCSI device support -> SCSI low-level drivers -> virtio-scsi support )
CONFIG_VIRTIO=y (automatically selected)
```

-drive file= 你的映像檔,if=virtio 虛擬硬碟 /dev/vda -hda就不用了
-net nic,model=virtio 虛擬網卡

安裝grub的時候 用手動 並先定義hd0為vda device (hd0) /dev/vda

----------

OS安裝範例
```
qemu-kvm -m 1024 -localtime -smp 4 -net nic -net tap,ifname=tap0,script=no,downscript=no -hda gentoo-x86.img -cdrom install-x86-minimal-20121213.iso -boot d -vnc :0
```

預設 -vnc 不加會使用IPV6
-m 記憶體 -localtime 採用主機時間 -smp核心 -nat 網路
-boot 由軟盤(a),硬盤(c)或是CD-ROM(d).在默認的情況下由硬盤啟動
使用usb但要先安裝 emerge usbutils
lsusb 列出 usb裝置ID邊號與詳細內容
-usb -usbdevice host:ID編號

啟動範例
```
qemu-kvm -m 1024 -localtime -smp 4 -net nic -net tap,ifname=tap0,script=no,downscript=no -hda gentoo-x86.img -vnc :0
```
執行


利用ssh通道讓vnc更安全
先把VNC的IP改成 localhost

ssh -L 要連的IP:要開放的PORT:localhost:VNC的PORT root@要連的IP 如果加上 -N -f 代表持續開通道
只要SSH通道開著都可以用VNC連你開的PORT

開啟橋接網路間封包轉遞
```
vi /etc/sysctl.conf
```
加上 net.ipv4.conf.br0.forwarding= 1

[ 皮皮的script 說明]
script 在 /etc/init.d/kvm.xxx

xxx會對應 xxx.pid
other 是用來增加其他參數 但如果沒設定會顯示錯誤

conf 在/etc/conf.d/kvm

config_pid_dir 用來放置pid記錄檔案
lun_www 是-drive file=之後指定映像檔 但boot=on新版已經無此語法
後面多一個-drive file= 是增加硬碟 vda


----------

主要參考資料 : http://en.gentoo-wiki.com/wiki/KVM
附加參考資料:http://blog.csdn.net/cenziboy/article/details/7058797
執行時間: 0.0801 秒, 瀏覽次數: 7516