Virtualization With Xen On Debian Lenny (AMD64) - Page 2
On this page
4 Creating LVM-Based Virtual Machines
This chapter explains how you can set up LVM-based virtual machines instead of virtual machines that use disk images. Virtual machines that use disk images are very slow and heavy on disk IO.
In this example I'm using a Debian Lenny host with the LVM volume group /dev/vg0 that has about 500GB of space. /dev/vg0 contains two logical volumes, /dev/vg0/root and /dev/vg0/swap_1 that consume about 11GB of space - the rest is not allocated and can be used to create logical volumes for our virtual machines:
vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 465.28 GB
PE Size 4.00 MB
Total PE 119112
Alloc PE / Size 5420 / 21.17 GB
Free PE / Size 113692 / 444.11 GB
VG UUID zXVC4l-FQZa-6dvS-rXQG-YbO9-g0Ce-2iTiIw
server1:~#
lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID x74hzO-wh3O-VwiJ-QHpq-xwfT-kOyd-iJ49jB
LV Write Access read/write
LV Status available
# open 1
LV Size 9.31 GB
Current LE 2384
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID RMDldO-nAVy-dvqP-rZh2-NkFd-48aw-YbPK9i
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
server1:~#
We will use xen-tools to create virtual machines. xen-tools make it very easy to create virtual machines - please read this tutorial to learn more: https://www.howtoforge.com/xen_tools_xen_shell_argo. We've already installed xen-tools in chapter 2.
Next we edit /etc/xen-tools/xen-tools.conf. This file contains the default values that are used by the xen-create-image script unless you specify other values on the command line. I changed the following values and left the rest untouched:
vi /etc/xen-tools/xen-tools.conf
[...] lvm = vg0 [...] dist = lenny # Default distribution to install. [...] gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 [...] passwd = 1 [...] kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` [...] mirror = http://ftp.de.debian.org/debian/ [...] serial_device = hvc0 [...] disk_device = xvda [...] |
Make sure that you uncomment the lvm line and fill in the name of your volume group (vg0 in my case). At the same time make sure that the dir line is commented out!
dist specifies the distribution to be installed in the virtual machines (Debian Lenny) (there's a comment in the file that explains what distributions are currently supported).
The passwd = 1 line makes that you can specify a root password when you create a new guest domain.
In the mirror line specify a Debian mirror close to you.
Make sure you specify a gateway, netmask, and broadcast address. If you don't, and you don't specify a gateway and netmask on the command line when using xen-create-image, your guest domains won't have networking even if you specified an IP address!
It is very important that you add the line serial_device = hvc0 because otherwise your virtual machines might not boot properly!
Now let's create our first guest domain, xen1.example.com, with the IP address 192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=128Mb --arch=amd64 --role=udev
Options that you specify on the command line override the settings in /etc/xen-tools/xen-tools.conf. Options that are not specified on the command line are taken from /etc/xen-tools/xen-tools.conf. Please make sure that you add --role=udev, or your virtual machine might not boot properly!
(To learn more about the available options, take a look at the xen-create-image man page:
man xen-create-image
)
The xen-create-image command will now create the xen1.example.com virtual machine for us. This can take a few minutes. The output should be similar to this one:
server1:~# xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=128Mb --arch=amd64 --role=udev
General Information
--------------------
Hostname : xen1.example.com
Distribution : lenny
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : full
Memory size : 128Mb
Kernel path : /boot/vmlinuz-2.6.26-1-xen-amd64
Initrd path : /boot/initrd.img-2.6.26-1-xen-amd64
Networking Information
----------------------
IP Address 1 : 192.168.0.101 [MAC: 00:16:3E:0F:A1:93]
Netmask : 255.255.255.0
Broadcast : 192.168.0.255
Gateway : 192.168.0.1
Creating swap on /dev/vg0/xen1.example.com-swap
Done
Creating ext3 filesystem on /dev/vg0/xen1.example.com-disk
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
server1:~#
As you see from the output, xen-create-image has created a new logical volume for our VM in the vg0 volume group, /dev/vg0/xen1.example.com-disk, for the VM's root filesystem. Take a look at
lvdisplay
and you will see that it has also created a second logical volume, /dev/vg0/xen1.example.com-swap, for the VM's swap:
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID x74hzO-wh3O-VwiJ-QHpq-xwfT-kOyd-iJ49jB
LV Write Access read/write
LV Status available
# open 1
LV Size 9.31 GB
Current LE 2384
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID RMDldO-nAVy-dvqP-rZh2-NkFd-48aw-YbPK9i
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-swap
VG Name vg0
LV UUID KNWeFo-2HiK-YcZl-8L63-8dVI-vehD-r7nx0x
LV Write Access read/write
LV Status available
# open 0
LV Size 256.00 MB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-disk
VG Name vg0
LV UUID ifTchw-YKqk-ELet-MlF1-hw59-ZCIE-TcDnQm
LV Write Access read/write
LV Status available
# open 0
LV Size 4.00 GB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3
server1:~#
There should now be a xen1.example.com configuration file - /etc/xen/xen1.example.com.cfg. The disk line contains physical devices (the two logical volumes created by xen-create-image) instead of disk images:
vi /etc/xen/xen1.example.com.cfg
# # Configuration file for the Xen instance xen1.example.com, created # by xen-tools 3.9 on Tue Feb 3 17:43:52 2009. # # # Kernel + memory size # kernel = '/boot/vmlinuz-2.6.26-1-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-1-xen-amd64' memory = '128' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'phy:/dev/vg0/xen1.example.com-swap,xvda1,w', 'phy:/dev/vg0/xen1.example.com-disk,xvda2,w', ] # # Hostname # name = 'xen1.example.com' # # Networking # vif = [ 'ip=192.168.0.101,mac=00:16:3E:0F:A1:93' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |
(If we had used disk images instead of logical volumes, the disk line would look similar to this one:
disk = [ 'file:/path/to/xen1.example.com/disk.img,sda1,w', 'file:/path/to/xen1.example.com/swap.img,sda2,w' ]
)
(Please note: if you have a dual-core or quad-core CPU and want the virtual machine to use all CPU cores, please add the line vcpus = '2' or vcpus = '4' to the configuration file.)
To start the virtual machine, run
xm create /etc/xen/xen1.example.com.cfg
Run
xm console xen1.example.com
to log in on that virtual machine (type CTRL+] if you are at the console, or CTRL+5 if you're using PuTTY to go back to dom0), or use an SSH client to connect to it (192.168.0.101).
To get a list of running virtual machines, type
xm list
The output should look like this:
server1:~# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 747 1 r----- 1402.9
xen1.example.com 1 256 1 -b---- 55.8
server1:~#
To shut down xen1.example.com, do this:
xm shutdown xen1.example.com
If you want xen1.example.com to start automatically at the next boot of the system, then do this:
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Here are the most important Xen commands:
xm create -c /path/to/config - Start a virtual machine.
xm shutdown <name> - Stop a virtual machine.
xm destroy <name> - Stop a virtual machine immediately without shutting it down. It's as if you switch off the power button.
xm list - List all running systems.
xm console <name> - Log in on a virtual machine.
xm help - List of all commands.
A list of all virtual machines that were created with the xen-create-image command is available under
xen-list-images
server1:~# xen-list-images
Name: xen1.example.com
Memory: 128
IP: 192.168.0.101
server1:~#
To learn more about what you can do with xen-tools, take a look at this tutorial: https://www.howtoforge.com/xen_tools_xen_shell_argo
5 Links
- Xen: http://www.xensource.com/xen/
- xen-tools: http://xen-tools.org/software/xen-tools
- Debian: http://www.debian.org/