1.安装带有NVMe支持的qemu.
1.1 $:git clone https://github.com/OpenChannelSSD/qemu-nvme.git
1.2 git下载完成后执行命令配置,编译,安装
$:cd qemu-nvme
$:./configure --enable-linux-aio --target-list=x86_64-softmmu --enable-kvm
$:make
$:make install
2.创建qemu虚拟机
2.1创建空白磁盘
$:qemu-img create -f raw ubuntu.raw 50G
(有空间就建大点,如何你想在虚拟机内部编译内核,磁盘一定要建大点);
2.2, 检查KVM是否可用
QEMU使用KVM来提升虚拟机性能,如果不启用KVM会导致性能损失。要使用KVM,首先要检查硬件是否有虚拟化支持:
$:grep -E 'vmx|svm' /proc/cpuinfo`
如果有输出则表示硬件有虚拟化支持。其次要检查kvm模块是否已经加载:
$:lsmod | grep kvm
kvm_intel 142999 0
kvm 444314 1 kvm_intel
如果kvm_intel/kvm_amd、kvm模块被显示出来,则kvm模块已经加载。最好要确保qemu在编译的时候使能了KVM,即在执行configure脚本的时候加入了--enable-kvm选项。
2.3装系统
启动虚拟机安装操作系统。
执行下面的命令启动带有cdrom的虚拟机:
$:qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw -cdrom ~/ubuntu.iso
-m 指定虚拟机内存大小,默认单位是MB, -enable-kvm使用KVM进行加速,-cdrom添加fedora的安装镜像。可在弹出的窗口中操作虚拟机,安装操作系统, ubuntu.raw为之前用qemu-img创建的的空白磁盘,安装完成后重起虚拟机便会从硬盘(ubuntu.raw)启动。之后再启动虚拟机只需要执行:
$:qemu-system-x86_64 -m 2048 -enable-kvm ubuntu.raw
3.给虚拟机换内核
开发需在上带有nvme的支持的内核,执行下列命令
$:git clone https://github.com/OpenChannelSSD/linux.git
$:cd linux
$:git checkout pblk-cnex
$:make menuconfig //执行命令后,会出现图形界面的内核配置选项,需进入device drive中将nvme支持模块选项,并保存,可参考http://blog.csdn.net/trochiluses/article/details/9663743 编译内核
$:make bzImage
$:make modules
$:make modules_install
$:make install
4.创建一个空白文件充当nvme设备
$:dd if=/dev/zero of=blknvme bs=1M count=1024
5.ssh登入虚拟机(非必须)
宿主机需要用ssh登入访问虚拟机,可以采取两种方式
5.1: 端口映射
把虚拟机的22端口映射到宿主机的其他还未使用的端口(ex:2223),方法就是在虚拟机启动命令中添加参数-redir tcp:2223::22
这时宿主机通过命令
$:ssh -p 2223 用户名@127.0.0.1
就可以ssh登入访问虚拟机了。
5.2:建立网桥:
首先在宿主机上执行下列命令,安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具 uml-utilities 和桥接工具 bridge-utils:
$:sudo apt-get install uml-utilities
$:sudo apt-get install bridge-utils
$:lsmod | grep tun #查看是否加载tun模块
$:modprobe tun #加载tun模块
然后执行下列命令编辑 /etc/network/interfaces文件,(请先备份),建立一个名叫 "br0" 的桥:
$:sudo vim /etc/network/interfaces
#添加如下内容
auto br0
iface br0 inet static #在这里网桥我用的静态IP,使用静态的话,就需要把你宿主机的ip地址,当前网络的网关等信息设置到这个网桥上
address 192.168.1.2 #ip地址需根据本机所在的网络修改设置
netmask 255.255.255.0 #ip地址需根据本机所在的网络修改设置
network 192.168.1.0 #ip地址需根据本机所在的网络修改设置
broadcast 192.168.1.255 #ip地址需根据本机所在的网络修改设置
gateway 192.168.1.1 #ip地址需根据本机所在的网络修改设置
bridge_ports eth0 #然后让eth0网卡上的端口都通过这个桥。
保持后重启网络服务,或者重启宿主机。
重启后执行下列命令/etc/ 文件夹下新建一个qemu-ifup脚本
$:sudo vim /etc/qemu-ifup
内容如下:
#!/bin/bash
#This is a qemu-ifup script for bridging.
#You can use it when starting a KVM guest with bridge mode network.
#set your bridge name
switch=br0
if [ -n "$1" ]; then
#create a TAP interface; qemu will handle it automatically.
#tunctl -u $(whoami) -t $1
#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
并且执行下列命令给以可执行权限。
$:sudo chmod 777 /etc/qemu-ifup
然后在启动命令中添加参数 -net nic -net tap,script=/etc/qemu-ifup 启动虚拟机 这样启动的虚拟机就有一个和宿主机同一个网段的ip地址,直接访问就可以了。
出现错误可以参考http://www.361way.com/qemu-kvm-bridge-net/4760.html
配置好后就可以执行下列命令启动虚拟机.
$:sudo qemu-system-x86_64 -m 4096 -smp 4 -enable-kvm -hda ubuntu.raw -drive file=blknvme,if=none,id=blknvme -device nvme,drive=./blknvme,serial=deadbeef,namespaces=1,lver=1,nlbaf=5,lba_index=3,mdts=10,lnum_lun=4,lnum_pln=1 -net nic,macaddr=54:52:d5:ab:83:10 -net tap,script=/etc/qemu-ifup
-m 指定虚拟机内存大小,默认单位是MB, -smp 是设置虚拟机的cpu核数, -enable-kvm 是使用KVM进行加速,-hda 是指定磁盘(用qemu-img创建的) -drive 设置设备(用dd创建的充当nvme设备的文件) -device 设置设备的属性 -net 设置mac地址 以及网卡启动脚本(/etc/qemu-ifup)
6.建立宿主机和虚拟机间的共享文件夹(非必须)
采用的是Samba这种方式
6.1在宿主机上执行下列命令安装samba
$:sudo apt-get install samba
$:sudo apt-get install cifs-utils
6.2 在宿主机上执行下列命令创建共享目录
$:mkdir /home/raohui/share (这个目录自定义名字和路径)
$:sudo chmod 777 /home/raohui/share
6.3 在宿主机上执行下列命令创建Ubuntu samba配置文件
(1)保存现有的配置文件
$:sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
(2)修改现配置文件
$:sudo gedit /etc/samba/smb.conf
(3)在smb.conf最后添加
[share]
path = /home/raohui/share
available = yes
browsealbe = yes
public = yes
writable = yes
6.4 创建Ubuntu samba帐户
$:sudo touch /etc/samba/smbpasswd
$:sudo smbpasswd 用户名 (然后根据提示输入密码)
6.5虚拟机中执行下列命令,mount宿主机中的共享文件夹
$:mkdir shareDir #创建挂在点
$:sudo mount -t cifs -o username=用户名,password=密码 //宿主机IP地址/share ./shareDir
可以参考这个链接把上面命令设置为开机运行