lts虚拟化服务器参数,在Ubuntu 12.04 LTS服务器上借助KVM实现虚拟化(2)

3.创建基于镜像的虚拟机

现在我们可以创建第一个虚拟机:基于镜像的虚拟机(如果你预计该虚拟机会有大量的流量和频繁的读写操作,可以改而使用基于LVM的虚拟机,如下面第6节所示——基于镜像的虚拟机其硬盘输入/输出操作很频繁)。

我想在/var/lib/libvirt/images/目录中创建虚拟机(无法在/root目录中创建虚拟机,因为libvirt-qemu用户在该目录中没有读取权限)。

我们将为想要创建的每个虚拟机建立一个新的目录,比如/var/lib/libvirt/images/vm1、/var/lib/libvirt/images/vm2、/var/lib/libvirt/images/vm3等等,因为每个虚拟机都会有一个子目录,名为ubuntu-kvm;很显然,在/var/lib/libvirt/images/vm1中只有这样一个目录。比如说,如果你试图在/var/lib/libvirt/images/vm1创建第二个虚拟机,就会看到错误消息,表明ubuntu-kvm已经存在(除非你使用--dest=DESTDIR变量运行vmbuilder):

root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg

2009-05-07 16:32:44,185 INFOCleaning up

ubuntu-kvm already exists

root@server1:/var/lib/libvirt/images/vm1#

我们会使用vmbuilder工具来创建虚拟机。你可以在此()进一步了解vmbuilder。vmbuilder使用模板来创建虚拟机——该模板位于/etc/vmbuilder/libvirt/目录中。我们先创建一个副本:

mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt

cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/

现在我们进入到虚拟机的分区。我们创建了一个文件,名为vmbuilder.partition……

vi /var/lib/libvirt/images/vm1/vmbuilder.partition

并定义所需的分区,如下所示:

root 8000

swap 4000

---

/var 20000

这定义了大小为800MB的根分区(/)、4000MB的交换分区以及20000MB的/var分区。---这一行表示,下列分区(本例中的/var)在另外的磁盘镜像上(也就是说这将创建两个磁盘镜像,一个用于根分区和交换分区,另一个用于/var分区)。当然,你可以随意定义自己喜欢的任何分区(只要你还定义了根分区和交换分区);当然,它们可以在一个磁盘镜像中——这只是个例子。

我想在虚拟机中安装openssh-server。为了确保每个虚拟机都获得一个独特的OpenSSH密钥,我们创建虚拟机时无法安装openssh-server。因此,我们创建了名为boot.sh的脚本,虚拟机第一次启动时,就会执行该脚本。它会安装openssh-server(借助独特密钥);用户第一次登录后,它还会迫使用户更改密码。(我将让虚拟机使用默认的用户名administrator,默认密码是howtoforge):

vi /var/lib/libvirt/images/vm1/boot.sh

#虚拟机第一次启动时,该脚本将运行。

#它以根用户来运行。

#到期终止用户帐户

passwd -e administrator

#安装openssh-server

apt-get update

apt-get install -qqy --force-yes openssh-server

确保你把用户名administrator换成了默认登录名。

现在看一下

vmbuilder kvm ubuntu --help

即可了解可用的选项。

想创建第一个虚拟机vm1,我们进入到虚拟机目录……

cd /var/lib/libvirt/images/vm1/

并运行vmbuilder,如下所示:

vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --

libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --

name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --

firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

大多数选项不言自明。--part指定了有分区详细信息的文件,相对于我们的工作目录(这就是我们在运行vmbuilder之前为什么要进入到虚拟机目录),--templates指定了保存模板文件的目录(再次相对于我们的工作目录),--firstboot指定了首次启动脚本。--libvirt=qemu:///system告诉KVM把该虚拟机添加到可用虚拟机的列表。--addpkg让你可以指定创建虚拟机过程中想安装的Ubuntu程序包(上文解释了为什么不该把openssh-server添加到该列表中,而是应该使用首次启动脚本)。--bridge建立了桥接网络;由于我们已在第2节建立了网桥br0,我们在此指定该网桥。

在--mirror这一行,你可以使用--mirror来指定官方的Ubuntu库,比如。如果你略去--mirror,那么就会使用默认的Ubuntu库()。

如果你用--ip参数选项符指定IP地址,要确保你还使用--gw参数选项符指定了正确的网关IP(不然,vmbuilder会假设它是网络中的第一个有效地址,实则不然)。网关IP通常与你在/etc/network/interfaces中所用的一样(参阅第2节)。

创建过程可能要花几分钟。

之后,你能在/etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml)中找到该虚拟机的XML配置文件:

ls -l /etc/libvirt/qemu/

root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/

total 8

drwxr-xr-x 3 root root 4096 May 21 13:00 networks

-rw------- 1 root root 2082 May 21 13:15 vm1.xml

root@server1:/var/lib/libvirt/images/vm1#

磁盘镜像位于我们虚拟机目录的ubuntu-kvm/子目录中:

ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/

root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/

total 604312

-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2

-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2

root@server1:/var/lib/libvirt/images/vm1#

你可能感兴趣的:(lts虚拟化服务器参数)