- 論壇徽章:
- 0
|
kvm下安裝客戶(hù)機(jī)據(jù)說(shuō)采用virtio驅(qū)動(dòng)效率會(huì)高一些。不過(guò)virtio是gpl授權(quán)協(xié)議的,freebsd不會(huì)默認(rèn)支持。需要用戶(hù)自行編譯內(nèi)核,F(xiàn)記錄過(guò)程如下
宿主機(jī)OS ubuntu 12.04 desktop 64
客戶(hù)機(jī)OS freebsd 9.0 64
安裝qemu-kvm
apt-get install qemu-kvm
設(shè)置橋接
裝了qemu-kvm后應(yīng)該已經(jīng)連帶安裝了橋接工具bridge-utils。
這個(gè)ubuntu版本默認(rèn)用networkmanager管理網(wǎng)卡設(shè)置,不過(guò)只要手動(dòng)設(shè)置/etc/network/interfaces文件,系統(tǒng)會(huì)自動(dòng)改為使用interfaces設(shè)置。但要先確定/etc/NetworkManager/NetworkManager.conf文件中[ifupdown]項(xiàng)managed=false。
修改interfaces,添加
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
我的主機(jī)一塊網(wǎng)卡,系統(tǒng)中是eth0。eth0不能設(shè)置ip。橋接設(shè)備br0設(shè)為dhcp方式獲取ip。
創(chuàng)建虛擬機(jī)磁盤(pán)
qemu-img create -f qcow2 fb64.img 40G
qcow2鏡像文件格式是稀疏文件,一開(kāi)始很小,會(huì)根據(jù)實(shí)際數(shù)據(jù)擴(kuò)大。所以不必?fù)?dān)心一開(kāi)始設(shè)置得過(guò)大。
創(chuàng)建虛擬機(jī)
sudo qemu-system-x86_64 -smp 2 -m 768 -boot d -drive file=fb64.img,cache=writeback -cdrom /dev/cdrom -net nic,macaddr=00:30:18:a2:91:62 -net tap
我主機(jī)是64位的cpu,需要建立的客戶(hù)機(jī)系統(tǒng)也是64位,所以用qemu-system-x86_64;客戶(hù)機(jī)cpu設(shè)為雙核(宿主機(jī)為雙核);內(nèi)存768MB;設(shè)為光驅(qū)啟動(dòng);虛擬機(jī)磁盤(pán)文件為fb64.img,據(jù)說(shuō)加上cache=writeback速度會(huì)快些;光盤(pán)我用的物理光驅(qū);加入網(wǎng)卡,設(shè)定網(wǎng)卡MAC物理地址;網(wǎng)絡(luò)我打算用橋接的方式,所以網(wǎng)卡類(lèi)型選tap。
安裝freebsd
跟正常安裝一樣。可以選擇安裝ssh。
添加virtio源碼
這時(shí)freebsd系統(tǒng)是沒(méi)有virtio驅(qū)動(dòng)的,還不能添加virtio驅(qū)動(dòng)的設(shè)備。現(xiàn)在磁盤(pán)設(shè)備認(rèn)到的是ada0,網(wǎng)卡是re0。
添加virtio源碼。參照了這篇文章“freebsd下增加kvm-virtio驅(qū)動(dòng)支持的方法”http://i.19830102.com/freebsd%E4 ... page-1/#comment-328
我不懂svn的命令和知識(shí),所以采用了笨辦法:在宿主機(jī)中用wget -r -np http://svn.freebsd.org/base/projects/virtio/sys/dev/virtio和wget -r -np http://svn.freebsd.org/base/projects/virtio/sys/modules/virtio把這兩個(gè)子目錄樹(shù)下載了下來(lái)(也可以直接在freebsd中下載,不過(guò)freebsd默認(rèn)沒(méi)裝wget,要先裝wget)。再用find (剛才下載的目錄路徑) -name index.html|xargs rm把目錄中所有的index.html刪掉,不刪的話(huà)也可以。再用scp命令把兩個(gè)virtio子目錄樹(shù)分別拷貝到/usr/src/sys/dev/和/usr/src/sys/modules/下,如scp -r (先前下載的.../dev/virtio目錄的路徑) root@(客戶(hù)機(jī)的ip):/usr/src/sys/dev/。
編譯內(nèi)核
接下來(lái)按那篇文章中的敘述修改,
修改/usr/src/sys/modules/Makefile,在SUBDIR中vge \的下方添加:
virtio \
修改/usr/src/sys/conf/files.amd64,在dev/uart/uart_cpu_amd64.c (按照你的freebsd實(shí)際cpu版本選擇文件,比如file.i386...)行下方添加:
dev/virtio/virtio.c optional virtio
dev/virtio/virtio_if.m optional virtio
dev/virtio/virtio_bus_if.m optional virtio
dev/virtio/virtqueue.c optional virtio
dev/virtio/pci/virtio_pci.c optional virtio_pci pci
dev/virtio/network/if_vtnet.c optional vtnet
dev/virtio/block/virtio_blk.c optional virtio_blk
dev/virtio/balloon/virtio_balloon.c optional virtio_balloon
修改/usr/src/sys/conf/kmod.mk文件,在MFILES?中添加:
dev/virtio/virtio_bus_if.m dev/virtio/virtio_if.m \
修改/usr/src/sys/amd64(按你自己的freebsd cpu版本選擇)/conf/GENERIC(或者不直接修改默認(rèn)的這個(gè)文件,按照一般網(wǎng)上教程所教的,復(fù)制為一個(gè)名為MYKEREL的文件再修改,具體請(qǐng)自行搜索)添加:
# Linux KVM VirtIO Drivers
device virtio # VirtIO Layout
device virtio_pci # VirtIO PCI Driver
device vtnet # VirtIO Net Interface
device virtio_blk # VirtIO Block Driver
device virtio_balloon # VirtIO Balloon Driver
接下來(lái)開(kāi)始編譯內(nèi)核
cd /usr/src
make buildkernel KERNCONF=MYKERNEL(如果你先前把GENERIC復(fù)制為MYKERNEL的話(huà))
安裝內(nèi)核
make installkernel KERNCONF=MYKERNEL
關(guān)機(jī)
shutdown -p +0
添加virtio設(shè)備
創(chuàng)建新的磁盤(pán)鏡像文件
qemu-img create -f qcow2 fb64virtio.img 40G
使用sudo qemu-system-x86_64 -smp 2 -m 768 -drive file=fb64.img,cache=writeback -net nic,macaddr=00:30:18:a2:91:62,model=virtio -net tap -drive file=fb64virtio.img,cache=writeback,if=virtio啟動(dòng)
登錄系統(tǒng)。把網(wǎng)卡設(shè)備名改過(guò)來(lái)。修改/etc/rc.conf
把先前的re0改為vtnet0。
用gpart show命令(freebsd9.0默認(rèn)會(huì)使用gpt分區(qū))看一下磁盤(pán)設(shè)備,可以看到多了一個(gè)vtbd0的磁盤(pán)。
給新磁盤(pán)分區(qū)
如果你不會(huì)用gpart命令分區(qū),或者對(duì)freebsd分區(qū)不熟悉,可以用bsdinstall來(lái)自動(dòng)分區(qū)。
啟動(dòng)bsdinstall。
問(wèn)你要不要更改默認(rèn)鍵盤(pán)布局,選no。
設(shè)置計(jì)算機(jī)名。
要你選擇從哪個(gè)ftp源安裝。我只是想用bsdinstall來(lái)分區(qū),不想安裝。按鍵盤(pán)esc鍵(不要點(diǎn)other也不要點(diǎn)cancel)。
選擇Guided使用安裝向?qū)?lái)分區(qū)。
選擇Entire Disk,選擇磁盤(pán)vtbd0。提示會(huì)清除選中的磁盤(pán)所有數(shù)據(jù),選yes。
選擇Finish。完成分區(qū)。會(huì)提示找不到安裝文件,不用理會(huì)。
退出bsdinstall。
雖然已經(jīng)可以認(rèn)到新的virtio磁盤(pán),但現(xiàn)在的系統(tǒng)是安裝在非virtio的磁盤(pán)上的,如果只是在啟動(dòng)參數(shù)中把現(xiàn)在的磁盤(pán)加上if=virtio改為virtio磁盤(pán),是無(wú)法啟動(dòng)的。要再次安裝freebsd把freebsd安裝到新的virtio磁盤(pán)上。
安裝freebsd到virtio磁盤(pán)上
掛載virtio磁盤(pán)上的分區(qū)
先前已經(jīng)給新的virtio分了區(qū),現(xiàn)在把其中準(zhǔn)備用來(lái)裝系統(tǒng)的分區(qū)掛載上來(lái)。
mkdir /install
mount -t ufs /dev/vtbd0p2(這是vtdb0磁盤(pán)上準(zhǔn)備用來(lái)裝系統(tǒng)的分區(qū),是vtbd0上的第二個(gè)分區(qū)) /install
編譯安裝freebsd
cd /usr/src
make world DESTDIR=/install
這一步時(shí)間比較長(zhǎng),根據(jù)主機(jī)配置,一般要數(shù)小時(shí)。
make distribution DESTDIR=/install
配置新的freebsd
現(xiàn)在ls /install/etc和/install/boot/kernel會(huì)發(fā)現(xiàn)配置文件很少,并且沒(méi)有內(nèi)核。需要把原來(lái)的freebsd的配置文件和內(nèi)核拷貝過(guò)去。
cp -Rp /etc /install/
我這一步報(bào)錯(cuò),提示namedb文件夾拷不了。
跳過(guò)namedb文件夾,再拷。
cd /etc
ls |grep -v namedb |xargs -I {} cp -Rp {} /install/etc/
再拷貝/boot
cp -Rp /boot /install/
現(xiàn)在掛載的分區(qū)信息跟新的系統(tǒng)啟動(dòng)后的分區(qū)是不一樣的,所以修改/install/etc/fstab
把所有ada0改成vtbd0。
新freebsd安裝完成。可以關(guān)掉了。
也許還有其它更快捷的方法來(lái)安裝。比如把現(xiàn)在添加了virtio的系統(tǒng)打包成iso安裝鏡像再來(lái)安裝,不過(guò)我不會(huì);蛘咧苯影阉衋da0p2分區(qū)上的文件拷貝到vtbd0p2上去,不過(guò)我想系統(tǒng)在運(yùn)行中會(huì)有很多文件拷貝不了,需要反復(fù)排除。誰(shuí)有興趣和時(shí)間的話(huà)可以嘗試一下。
啟動(dòng)virtio磁盤(pán)上的freebsd
修改先前的啟動(dòng)參數(shù),把先前的磁盤(pán)去掉,只用新的virtio的磁盤(pán)啟動(dòng)。先前用bsdinstall分區(qū)的時(shí)候,應(yīng)該自動(dòng)把/分區(qū)設(shè)為啟動(dòng)分區(qū)了,所有應(yīng)該可以正常啟動(dòng)。
sudo qemu-system-x86_64 -smp 2 -m 768 -net nic,macaddr=00:30:18:a2:91:62,model=virtio -net tap -drive file=fb64virtio.img,cache=writeback,if=virtio
我這里啟動(dòng)正常。好了virtio磁盤(pán)和網(wǎng)卡可以正常使用了。
至于virtio磁盤(pán)比非virtio的快多少,我不太清楚,我沒(méi)比較過(guò)。 |
|