virt-install是一个使用libvirt库构建新虚拟机的命令行工具,此工具使用串行控制台,SDL(Simple DirectMedia Layer)图形或者VNC客户端/服务器,来支持命令行和图形安装。
# apt-get install virtinst
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
adwaita-icon-theme at-spi2-core colord colord-data dconf-gsettings-backend dconf-service fontconfig fontconfig-config
fonts-dejavu-core glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas hicolor-icon-theme
...
libxinerama1 libxkbcommon0 libxpm4 libxrandr2 libxrender1 libxtst6 python-libxml2 python-pycurl python-urlgrabber ubuntu-mono
virt-viewer x11-common
Suggested packages:
colord-sensor-argyll cups-common libgd-tools gphoto2 gvfs liblcms2-utils librsvg2-bin avahi-daemon hplip libsane-extras
sane-utils python-pycurl-dbg python-pycurl-doc
...
Use the virt-installtool to boot the virtual machine through libvirt and connect to the graphical console from a VNC client installed on your local machine.
# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
If the network is not active, start it by doing:
查看default网络的配置
root@zhaicompute# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254000f5c96 yes virbr0-nic
root@zhaicompute# ifconfig virbr0
virbr0 Link encap:Ethernet HWaddr 52:54:00:0f:5c:96
inet addr:192.168.22.1 Bcast:192.168.22.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@zhaicompute# cat /etc/libvirt/qemu/networks/default.xml
default
6acb-ed0a-4ad1-b8dc-527168a2
default网络设置保存在/etc/libvirt/qemu/networks目录下,从配置中可看出具体的网桥virbr0.
qemu-img command to create an empty image file
root@zhaicompute# qemu-img create -f qcow2 zhai-ubuntu14.04.4.qcow2 10G
Formatting 'zhai-ubuntu14.04.4.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16
root@zhaicompute# ls
ubuntu-14.04.3-server-ppc64el.iso zhai-ubuntu14.04.4.qcow2
root@zhaicompute# qemu-img info zhai-ubuntu14.04.4.qcow2
image: zhai-ubuntu14.04.4.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
virt-install command to start up a virtual machine using that image file.
命令行:
virt-install --virt-type kvm --name zhai-ubuntu --ram 1024 \
> --cdrom=/var/lib/libvirt/images/zhaipool/ubuntu-14.04.4-server-ppc64el.iso \
> --disk /var/lib/libvirt/images/zhaipool/zhai-ubuntu14.04.4.qcow2,format=qcow2 \
> --network network=default \
> --graphics vnc,listen=0.0.0.0 --noautoconsole \
> --os-type=linux --os-variant=ubuntutrusty
root@zhaicompute# virt-install --os-variant list
win2k8 : Microsoft Windows Server 2008 (or later)
win2k3 : Microsoft Windows Server 2003
win7 : Microsoft Windows 7 (or later)
vista : Microsoft Windows Vista
winxp64 : Microsoft Windows XP (x86_64)
winxp : Microsoft Windows XP
win2k : Microsoft Windows 2000
openbsd4 : OpenBSD 4.x (or later)
freebsd9 : FreeBSD 9.x
freebsd8 : FreeBSD 8.x
freebsd7 : FreeBSD 7.x
freebsd6 : FreeBSD 6.x
freebsd10 : FreeBSD 10.x (or later)
solaris9 : Sun Solaris 9
solaris11 : Sun Solaris 11 (or later)
solaris10 : Sun Solaris 10
opensolaris : Sun OpenSolaris (or later)
netware6 : Novell Netware 6 (or later)
netware5 : Novell Netware 5
netware4 : Novell Netware 4
msdos : MS-DOS
generic : Generic
altlinux : ALT Linux (or later)
debianwheezy : Debian Wheezy (or later)
debiansqueeze : Debian Squeeze
debianlenny : Debian Lenny
debianetch : Debian Etch
fedora20 : Fedora 20 (or later)
fedora19 : Fedora 19
fedora18 : Fedora 18
fedora17 : Fedora 17
fedora16 : Fedora 16
fedora15 : Fedora 15
fedora14 : Fedora 14
fedora13 : Fedora 13
fedora12 : Fedora 12
fedora11 : Fedora 11
fedora10 : Fedora 10
fedora9 : Fedora 9
fedora8 : Fedora 8
fedora7 : Fedora 7
fedora6 : Fedora Core 6
fedora5 : Fedora Core 5
mes5.1 : Mandriva Enterprise Server 5.1 (or later)
mes5 : Mandriva Enterprise Server 5.0
mandriva2010 : Mandriva Linux 2010 (or later)
mandriva2009 : Mandriva Linux 2009 and earlier
mageia1 : Mageia 1 (or later)
rhel7 : Red Hat Enterprise Linux 7 (or later)
rhel6 : Red Hat Enterprise Linux 6
rhel5.4 : Red Hat Enterprise Linux 5.4 or later
rhel5 : Red Hat Enterprise Linux 5
rhel4 : Red Hat Enterprise Linux 4
rhel3 : Red Hat Enterprise Linux 3
rhel2.1 : Red Hat Enterprise Linux 2.1
sles11 : Suse Linux Enterprise Server 11 (or later)
sles10 : Suse Linux Enterprise Server
opensuse12 : openSuse 12 (or later)
opensuse11 : openSuse 11
ubuntuutopic : Ubuntu 14.10 (Utopic Unicorn) (or later)
ubuntutrusty : Ubuntu 14.04 LTS (Trusty Tahr)
ubuntusaucy : Ubuntu 13.10 (Saucy Salamander)
ubunturaring : Ubuntu 13.04 (Raring Ringtail)
ubuntuquantal : Ubuntu 12.10 (Quantal Quetzal)
ubuntuprecise : Ubuntu 12.04 LTS (Precise Pangolin)
ubuntuoneiric : Ubuntu 11.10 (Oneiric Ocelot)
ubuntunatty : Ubuntu 11.04 (Natty Narwhal)
ubuntumaverick : Ubuntu 10.10 (Maverick Meerkat)
ubuntulucid : Ubuntu 10.04 LTS (Lucid Lynx)
ubuntukarmic : Ubuntu 9.10 (Karmic Koala)
ubuntujaunty : Ubuntu 9.04 (Jaunty Jackalope)
ubuntuintrepid : Ubuntu 8.10 (Intrepid Ibex)
ubuntuhardy : Ubuntu 8.04 LTS (Hardy Heron)
mbs1 : Mandriva Business Server 1 (or later)
virtio26 : Generic 2.6.25 or later kernel with virtio
generic26 : Generic 2.6.x kernel
generic24 : Generic 2.4.x kernel
root@zhaicompute# virt-install --virt-type kvm --name zhai-ubuntu --ram 1024 \
> --cdrom=/var/lib/libvirt/images/zhaipool/ubuntu-14.04.4-server-ppc64el.iso \
> --disk /var/lib/libvirt/images/zhaipool/zhai-ubuntu14.04.4.qcow2,format=qcow2 \
> --network network=default \
> --graphics vnc,listen=0.0.0.0 --noautoconsole \
> --os-type=linux --os-variant=ubuntutrusty
Starting install...
Creating domain... | 0 B 00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
root@zhaicompute# ps -ef | grep zhai
libvirt+ 27531 1 99 03:39 ? 00:00:22 qemu-system-ppc64 -enable-kvm -name zhai-ubuntu -S -machine pseries-2.3,accel=kvm,usb=off -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid de480a35-4ab5-42e5-b3b6-a47c8b05d9c8 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/zhai-ubuntu.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-reboot -boot strict=on -device pci-ohci,id=usb,bus=pci.0,addr=0x2 -device spapr-vscsi,id=scsi0,reg=0x2000 -drive file=/var/lib/libvirt/images/zhaipool/zhai-ubuntu14.04.4.qcow2,if=none,id=drive-scsi0-0-0-0,format=qcow2 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=2 -drive file=/var/lib/libvirt/images/zhaipool/ubuntu-14.04.4-server-ppc64el.iso,if=none,id=drive-scsi0-0-0-1,readonly=on,format=raw -device scsi-cd,bus=scsi0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1,bootindex=1 -netdev tap,fd=29,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:cb:ad:fa,bus=pci.0,addr=0x1 -chardev pty,id=charserial0 -device spapr-vty,chardev=charserial0,reg=0x30000000 -device usb-kbd,id=input0 -device usb-mouse,id=input1 -vnc 0.0.0.0:2 -device VGA,id=video0,vgamem_mb=16,bus=pci.0,addr=0x4 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -msg timestamp=on
root 27540 23850 0 03:40 pts/8 00:00:00 grep --color=auto zhai
从上看出:virt-install执行后,最终调用的是qemu-system-ppc64命令来创建vm。
一个虚拟机占用一个进程,可以通过进程管理和控制虚拟机。
log日志:
root@zhaicompute# ls /var/log/libvirt/qemu/
zhai-ubuntu.log
创建后,查看网络:
root@zhaicompute# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254000f5c96 yes virbr0-nic
vnet0
可看出
virbr0上多了一下端口vnet0.
virbr0 Link encap:Ethernet HWaddr 52:54:00:0f:5c:96
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10646 errors:0 dropped:0 overruns:0 frame:0
TX packets:14645 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:617571 (617.5 KB) TX bytes:20396983 (20.3 MB)
virbr0-nic Link encap:Ethernet HWaddr 52:54:00:0f:5c:96
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vnet0 Link encap:Ethernet HWaddr fe:54:00:7e:60:d0
inet6 addr: fe80::fc54:ff:fe7e:60d0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10646 errors:0 dropped:0 overruns:0 frame:0
TX packets:17480 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:766615 (766.6 KB) TX bytes:20544635 (20.5 MB)
查看生成的xml配置文件 :
# ls -lrt /etc/libvirt/qemu
-rw------- 1 root root 2511 Apr 15 11:25 zhai-ubuntu.xml
zhai-ubuntu.xml内容:
# cat /etc/libvirt/qemu/zhai-ubuntu.xml
zhai-ubuntu
0e5684f5-23aa-8568-ed10-52c844b4d85d
1048576
1048576
2
hvm
destroy
restart
restart
/usr/bin/kvm
基于KVM建立的虚拟机相关文件默认存放位置
kvm虚拟机配置文件位置/etc/libvirt/qemu/ <---都是xml文件
kvm虚拟机文件位置:/var/lib/libvirt/images/ <---可以在建立虚拟机时指定
建立的虚拟机在运行时相关文件及存放位置
在虚拟机运行时,会在/var/run/libvirt/qemu目录下存放虚拟机的pid文件和配置文件,配置文件与/etc/libvirt/qemu目录下对应的虚拟机文件相同,pid文件保存有此虚拟机进程号。虚拟机的日志文件存放在/var/log/libvirt/qemu目录下,每个虚拟机一个,文件名称为:虚拟机名称(或UUID)+“.log”
Use the virsh vncdisplay vm-name command to get the VNC port number.
root@zhaicompute# virsh vncdisplay zhai-ubuntu
:2
root@zhaicompute# ps -ef | grep vnc
libvirt+ 27531 1 99 03:39 ? 00:09:35 qemu-system-ppc64 -enable-kvm -name zhai-ubuntu -S -machine pseries-2.3,accel=kvm,usb=off -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid de480a35-4ab5-42e5-b3b6-a47c8b05d9c8 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/zhai-ubuntu.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-reboot -boot strict=on -device pci-ohci,id=usb,bus=pci.0,addr=0x2 -device spapr-vscsi,id=scsi0,reg=0x2000 -drive file=/var/lib/libvirt/images/zhaipool/zhai-ubuntu14.04.4.qcow2,if=none,id=drive-scsi0-0-0-0,format=qcow2 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=2 -drive file=/var/lib/libvirt/images/zhaipool/ubuntu-14.04.4-server-ppc64el.iso,if=none,id=drive-scsi0-0-0-1,readonly=on,format=raw -device scsi-cd,bus=scsi0.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1,bootindex=1 -netdev tap,fd=29,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:cb:ad:fa,bus=pci.0,addr=0x1 -chardev pty,id=charserial0 -device spapr-vty,chardev=charserial0,reg=0x30000000 -device usb-kbd,id=input0 -device usb-mouse,id=input1 -vnc 0.0.0.0:2 -device VGA,id=video0,vgamem_mb=16,bus=pci.0,addr=0x4 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -msg timestamp=on
qemu不使用linux下的vncserver提供vnc服务,因此在此服务没有启动的情况下,也能通过vnc客户端连接到虚拟机。
在win7下,打开vnc-viewer,输入virt-install命令所在的服务器IP与所安装的虚拟机据点用的vnc端口号0;
点击“OK”,进入安装界面
安装完成后,使用命令virsh start vm-name启动此虚拟机:
root@ctler:~# virsh list --all
Id Name State
----------------------------------------------------
- net shut off
root@ctler:~# virsh start net
Domain net started
root@ctler:~# virsh list --all
Id Name State
----------------------------------------------------
5 net running
在linux下:
安装完成后,登录虚机,查看IP
给guest主机划分物理机分区
lvcreate -L20G -n host.demo.com kvm-storage
下载镜像并loop到本地:
wget http://mirrors.manchester.icecolo.com/centos/5.5/isos/x86_64/CentOS-5.5-x86_64-bin-1of8.iso
mkdir /mnt/centos55
mount -o loop CentOS-5.5-x86_64-bin-1of8.iso /mnt/centos55/
通过location本地安装,并通过console管理:
virt-install
-n host.demo.com
-r 512
--vcpus=1
--os-variant=rhel5.4
--accelerate
--nographics
-v
-l /mnt/centos55/
-w bridge:br1
--disk path=/dev/kvm-storage/host.demo.com
-x "console=ttyS0"
管理时可以通过
#查看guest id、name 及状态
virsh list --all
#通过console连接查看
virsh console id或name
#连接完成后会要求输入用户名和密码
To eject a disk using virsh, libvirt requires that you attach an empty disk at the same target
that the CDROM was previously attached, which should be hdc. You can confirm the appropriate target using the dom dumpxml vm-image command.
# virsh dumpxml trusty
trusty
...
...
When you boot for the first time after install, it may ask you about authentication tools, you can just choose Exit. Then, log in as root using the root password you specified.
The cloud-init script starts on instance boot and will search for a metadata provider to fetch a public key from. The public key will be placed in the default user account for the image.
Install the cloud-init
package:
# apt-get install cloud-init
When building Ubuntu images cloud-init must be explicitly configured for the metadata source in use. The OpenStack metadata server emulates the EC2 metadata service used by images in Amazon EC2.
To set the metadata source to be used by the image run the dpkg-reconfigure command against the cloud-init
package. When prompted select the EC2 data source:
# dpkg-reconfigure cloud-init
The account varies by distribution. On Ubuntu-based virtual machines, the account is called ubuntu
. On Fedora-based virtual machines, the account is called ec2-user
.
You can change the name of the account used by cloud-init
by editing the /etc/cloud/cloud.cfg
file and adding a line with a different user. For example, to configure cloud-init
to put the key in an account named admin
, use the following syntax in the configuration file:
users:
- name: admin
(...)
From inside the instance, as root:
# /sbin/shutdown -h now
The operating system records the MAC address of the virtual Ethernet card in locations such as /etc/udev/rules.d/70-persistent-net.rules
during the installation process. However, each time the image boots up, the virtual Ethernet card will have a different MAC address, so this information must be deleted from the configuration file.
There is a utility called virt-sysprep, that performs various cleanup tasks such as removing the MAC address references. It will clean up a virtual machine image in place:
# virt-sysprep -d trusty
Now that the image is ready to be uploaded to the Image service, you no longer need to have this virtual machine image managed by libvirt. Use the virsh undefine vm-image command to inform libvirt:
# virsh undefine trusty
The underlying image file that you created with the qemu-img create command, such as /tmp/trusty.qcow2
, is now ready for uploading to the Image service by using the openstack image create command. For more information, see the Glance User Guide.
convert [-c] [-p] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_id_or_name] [-l snapshot_param] [-S sparse_size] filename
[filename2 [...]] output_filename
Convert the disk image filename or a snapshot snapshot_param(snapshot_id_or_name is deprecated) to disk image output_filename using format output_fmt. It can be
optionally compressed ("-c" option) or use any format specific options like encryption ("-o" option).
Only the formats "qcow" and "qcow2" support compression. The compression is read-only. It means that if a compressed sector is rewritten, then it is rewritten
as uncompressed data.
Image conversion is also useful to get smaller image when using a growable format such as "qcow": the empty sectors are detected and suppressed from the
destination image.
sparse_size indicates the consecutive number of bytes (defaults to 4k) that must contain only zeros for qemu-img to create a sparse image during conversion. If
sparse_size is 0, the source will not be scanned for unallocated or zero sectors, and the destination image will always be fully allocated.
You can use the backing_file option to force the output image to be created as a copy on write image of the specified base image; the backing_file should have
the same content as the input's base image, however the path, image format, etc may differ.
If the "-n" option is specified, the target volume creation will be skipped. This is useful for formats such as "rbd" if the target volume has already been
created with site specific options that cannot be supplied through qemu-img.
qemu-img convert -c -O qcow2 image compressed_image
参考:
1 virt-install 使用说明: http://blog.csdn.net/starshine/article/details/6998189
2 kvm, qemu-kvm以及libvirt之间的关系图:http://blog.csdn.net/zhaihaifei/article/details/51018113
3 kvm虚拟化之virt-install: http://www.361way.com/virt-install/2721.html
4 kvm显示VM的IP:http://www.chengxuyuans.com/Unix/83251.html
5 virbr0: http://blog.chinaunix.net/uid-26000137-id-3723948.html