这里介绍一下需要使用qemu-system-x86_64安装虚拟机,特别是在服务器上创建虚拟机时,没有图形界面导致无法安装的可以参考该博客。

测试使用的系统是ubuntu 14.04。

1. 创建系统镜像
qemu-img create vm1.qcow2 -f qcow2 15G

(也可以考虑/usr/local/qemu_four/bin/qemu-img create vm1.qcow2 -f qcow2 15G,使用自己的路径)

2. 提取内核和根文件

由于是纯命令行安装,没有相应的图形界面,所以需要先提取安装包iso中的内核和根文件。否则直接安装会提示没有SDL,即使使用了-curses或者-nographic,我在创建虚拟机的时候也还是会卡在Loading bootlogo…上。以下过程就是为了能够进入到安装过程中操作,以成功创建虚拟机。

(1)首先挂载iso,注意挂载之后的文件只有只读的权限

mount ubuntu-16.04.1-server-amd64.iso /mnt/temp -o loop

(2)然后将挂载的文件拷贝到某个文件夹
这里其实直接省略好像也不是不行。

cp -r /mnt/temp/ /home/liyk/temp
3. 创建虚拟机(纯命令行)
sudo /usr/local/qemu_four/bin/qemu-system-x86_64 -m 1024 -enable-kvm -hda /home/liyk/vm-imgs/vm1.qcow2 -cdrom /home/liyk/system-iso/ubuntu-14.04.6-server-amd64.iso -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-0,model=virtio -net tap,vlan=0,ifname=tap0,downscript=no -boot c -smp 2 -chardev socket,path=/tmp/ivshmem_mysocket,id=foo -device ivshmem,chardev=foo,size=256 -nographic -kernel /home/liyk/temp/install/vmlinuz -initrd /home/liyk/temp/install/initrd.gz -append console=ttyS0

参数说明:

-m 1024指定内存大小,以M为单位

-enable-kvm说明要启用kvm来加速

-hda /home/liyk/vm-imgs/vm1.qcow2是系统的镜像

-cdrom /home/liyk/system-iso/ubuntu-14.04.6-server-amd64.iso是创建系统时需要的ISO

-boot c是启动方式,优先从硬盘启动

-smp 2与多CPU多核心有关的参数,即分配的CPU核数

-chardev socket,path=/tmp/ivshmem_mysocket,id=foo -device ivshmem,chardev=foo,size=256需要插入的共享内存,虚拟成一个硬件,指定大小是256M

nographic -append console=ttyS0: 重定向输出参数,如果不指定ttyS0则将无法在当前窗口看到安装过程,当然,有时候需要调整console参数才能在当前窗口查看到信息。为了使用户能以root身份通过串口登录,需要在该文件中添加“ttyS0”,说明系统认为这里的COM1是安全的

--kernel使用哪个内核

--initrd使用哪个initrd

(上面这两个是为了能够看到系统窗口必须要有的)

4. 安装系统

执行3的命令后,qemu开始安装ubuntu,需要按照系统的指引一步步进行。其中网络的配置可能会有一点问题,提示无法使用DHCP。可以手动配置网络,参考主机上的网络设置即可。当系统安装完成后,qemu会进入循环安装的过程,需要在主机上直接杀死qemu-system-x86_64,即执行:killall qemu-system-x86_64。或者ESC+2进入qemu的界面,然后q+ENTER退出。或者ps aux查找相关的进程,kill掉。

5. 进入系统

(1)再次进入系统就不要再使用ISO文件了,其他的参数可以继续保持上面的设置,内存、CPU之类的也可以更改。

如:(后面的console也不需要加了,那个只需要在安装的时候使用,为了能看到安装过程)

sudo /usr/local/qemu_four/bin/qemu-system-x86_64 -m 1024 -enable-kvm -boot c -smp 2 -hda /home/liyk/vm-imgs/vm1.qcow2 -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-0,model=virtio -net tap,vlan=0,ifname=tap0,downscript=no -chardev socket,path=/tmp/ivshmem_mysocket,id=foo -device ivshmem,chardev=foo,size=256 -nographic

(网卡的参数不可以省略,否则无法联网)

(2)进入后需要设置路由信息以联网(或者在前面手动配置网络时将网关设置为172.16.0.135).添加路由信息的命令为:

route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.135 dev eth0

永久添加路由:

在/etc/rc.local里添加 route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.135 dev eth0

(3)可能需要配置部分工具