免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11276 | 回复: 6
打印 上一主题 下一主题

[FreeBSD] kvm下安装virtio驱动的freebsd [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-21 13:09 |只看该作者 |倒序浏览
kvm下安装客户机据说采用virtio驱动效率会高一些。不过virtio是gpl授权协议的,freebsd不会默认支持。需要用户自行编译内核。现记录过程如下

宿主机OS ubuntu 12.04 desktop 64
客户机OS freebsd 9.0 64

安装qemu-kvm
apt-get install qemu-kvm

设置桥接
装了qemu-kvm后应该已经连带安装了桥接工具bridge-utils。
这个ubuntu版本默认用networkmanager管理网卡设置,不过只要手动设置/etc/network/interfaces文件,系统会自动改为使用interfaces设置。但要先确定/etc/NetworkManager/NetworkManager.conf文件中[ifupdown]项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
我的主机一块网卡,系统中是eth0。eth0不能设置ip。桥接设备br0设为dhcp方式获取ip。

创建虚拟机磁盘
qemu-img create -f qcow2 fb64.img 40G
qcow2镜像文件格式是稀疏文件,一开始很小,会根据实际数据扩大。所以不必担心一开始设置得过大。

创建虚拟机
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
我主机是64位的cpu,需要建立的客户机系统也是64位,所以用qemu-system-x86_64;客户机cpu设为双核(宿主机为双核);内存768MB;设为光驱启动;虚拟机磁盘文件为fb64.img,据说加上cache=writeback速度会快些;光盘我用的物理光驱;加入网卡,设定网卡MAC物理地址;网络我打算用桥接的方式,所以网卡类型选tap。

安装freebsd
跟正常安装一样。可以选择安装ssh。

添加virtio源码
这时freebsd系统是没有virtio驱动的,还不能添加virtio驱动的设备。现在磁盘设备认到的是ada0,网卡是re0。
添加virtio源码。参照了这篇文章“freebsd下增加kvm-virtio驱动支持的方法”http://i.19830102.com/freebsd%E4 ... page-1/#comment-328
我不懂svn的命令和知识,所以采用了笨办法:在宿主机中用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把这两个子目录树下载了下来(也可以直接在freebsd中下载,不过freebsd默认没装wget,要先装wget)。再用find (刚才下载的目录路径) -name index.html|xargs rm把目录中所有的index.html删掉,不删的话也可以。再用scp命令把两个virtio子目录树分别拷贝到/usr/src/sys/dev/和/usr/src/sys/modules/下,如scp -r (先前下载的.../dev/virtio目录的路径) root@(客户机的ip):/usr/src/sys/dev/。

编译内核
接下来按那篇文章中的叙述修改,
修改/usr/src/sys/modules/Makefile,在SUBDIR中vge \的下方添加:

virtio \

修改/usr/src/sys/conf/files.amd64,在dev/uart/uart_cpu_amd64.c (按照你的freebsd实际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(或者不直接修改默认的这个文件,按照一般网上教程所教的,复制为一个名为MYKEREL的文件再修改,具体请自行搜索)添加:

# 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

接下来开始编译内核
cd /usr/src
make buildkernel KERNCONF=MYKERNEL(如果你先前把GENERIC复制为MYKERNEL的话)
安装内核
make installkernel KERNCONF=MYKERNEL
关机
shutdown -p +0

添加virtio设备
创建新的磁盘镜像文件
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启动
登录系统。把网卡设备名改过来。修改/etc/rc.conf
把先前的re0改为vtnet0。
用gpart show命令(freebsd9.0默认会使用gpt分区)看一下磁盘设备,可以看到多了一个vtbd0的磁盘。

给新磁盘分区
如果你不会用gpart命令分区,或者对freebsd分区不熟悉,可以用bsdinstall来自动分区。
启动bsdinstall。
问你要不要更改默认键盘布局,选no。
设置计算机名。
要你选择从哪个ftp源安装。我只是想用bsdinstall来分区,不想安装。按键盘esc键(不要点other也不要点cancel)。
选择Guided使用安装向导来分区。
选择Entire Disk,选择磁盘vtbd0。提示会清除选中的磁盘所有数据,选yes。
选择Finish。完成分区。会提示找不到安装文件,不用理会。
退出bsdinstall。

虽然已经可以认到新的virtio磁盘,但现在的系统是安装在非virtio的磁盘上的,如果只是在启动参数中把现在的磁盘加上if=virtio改为virtio磁盘,是无法启动的。要再次安装freebsd把freebsd安装到新的virtio磁盘上。

安装freebsd到virtio磁盘上
挂载virtio磁盘上的分区
先前已经给新的virtio分了区,现在把其中准备用来装系统的分区挂载上来。
mkdir /install
mount -t ufs /dev/vtbd0p2(这是vtdb0磁盘上准备用来装系统的分区,是vtbd0上的第二个分区) /install

编译安装freebsd
cd /usr/src
make world DESTDIR=/install
这一步时间比较长,根据主机配置,一般要数小时。
make distribution DESTDIR=/install

配置新的freebsd
现在ls /install/etc和/install/boot/kernel会发现配置文件很少,并且没有内核。需要把原来的freebsd的配置文件和内核拷贝过去。
cp -Rp /etc /install/
我这一步报错,提示namedb文件夹拷不了。
跳过namedb文件夹,再拷。
cd /etc
ls |grep -v namedb |xargs -I {} cp -Rp {} /install/etc/
再拷贝/boot
cp -Rp /boot /install/
现在挂载的分区信息跟新的系统启动后的分区是不一样的,所以修改/install/etc/fstab
把所有ada0改成vtbd0。

新freebsd安装完成。可以关掉了。

也许还有其它更快捷的方法来安装。比如把现在添加了virtio的系统打包成iso安装镜像再来安装,不过我不会。或者直接把所有ada0p2分区上的文件拷贝到vtbd0p2上去,不过我想系统在运行中会有很多文件拷贝不了,需要反复排除。谁有兴趣和时间的话可以尝试一下。

启动virtio磁盘上的freebsd
修改先前的启动参数,把先前的磁盘去掉,只用新的virtio的磁盘启动。先前用bsdinstall分区的时候,应该自动把/分区设为启动分区了,所有应该可以正常启动。
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
我这里启动正常。好了virtio磁盘和网卡可以正常使用了。

至于virtio磁盘比非virtio的快多少,我不太清楚,我没比较过。

论坛徽章:
0
2 [报告]
发表于 2012-10-21 21:48 |只看该作者
svn co .................................

===

10的会有virtuio


用wget第一次见到

论坛徽章:
0
3 [报告]
发表于 2012-10-22 11:25 |只看该作者
回复 2# 芭比小柒

呵呵,不会svn。而且freebsd9.0默认也没装svn。
virtio是gpl的,freebsd应该以后也不会默认内核支持的。否则freebsd就会变成gpl的了。


   

论坛徽章:
0
4 [报告]
发表于 2012-10-22 13:04 |只看该作者
回复 3# kkkggg


    http://svnweb.freebsd.org/base/h ... 470&view=markup  这个是virtio.h的许可证信息(头部)
    http://svnweb.freebsd.org/base/h ... 470&view=markup  这个是virtio.c的许可证信息

一般我看到这个结构,我会认为前一个许可证是3句版BSD许可证,后一个是2句版BSD许可证

论坛徽章:
0
5 [报告]
发表于 2012-10-22 23:03 |只看该作者
樓主說的是對,virtio 是 GPL
芭比小柒 君說的也是對,FreeBSD 10 的 base 會包含 virtio

而 FreeBSD 10 -CURRENT 所包含的 virtio 是一個乎合 BSD 許可証的 "重寫" 實作。
所以,如果閣下是用 i386 或 amd64 的 8.x 或 9.x 安裝 virtio 並不需要像樓主般大費周章了。

直接用 ports 的 /usr/ports/emulators/virtio-kmod 的就是了。

如果閣下是用 amd64 的 8.x 或 9.x ,可以到這裡下載有關的 packages
http://people.freebsd.org/~kuriyama/virtio/

如果閣下是用 i386, amd64 的 10-CURRENT,不用安裝 ports 了,因為 base 已內置了 BSD 授權版的 virtio

论坛徽章:
0
6 [报告]
发表于 2012-10-24 20:38 |只看该作者
楼上是正解

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
7 [报告]
发表于 2016-08-24 23:02 |只看该作者
怎麽知道磁盘当前已经在用virtio驱动
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP