分类:
2011-12-16 15:41:43
原文地址:xen 虚拟机安装创建 作者:chenwenming
开始安装xen虚拟机 检查环境: uname -r brctl show ls /etc/init.d/xen* 安装: 文本方式 Install Guest(虚拟机): virt-install --name=vm1 --ram=256 --file=/var/ftp/xen/vm1.img --nographics --location=ftp://192.168.1.254/RHEL5U5/ --file-size=5 --nonsparse --vcpus=4 --paravirt --bridge=xenbr0 --vnc --vncport=5910 --debug 虚拟机名称 内存大小 映像文件 半虚拟化只支持三种网络安装 (全虚拟化支持cdrom/iso镜像) 映像文件最大大小是5G CPU的个数 半虚拟化 桥接所使用的交换机设备 指定VNC的监听端口 详细输出模式 --nonsparse 不使用稀疏文件。 占总大小5G,如果实际空间没有达到5G,则只占用实际大小的硬盘空间。 ==> virt-install --help virt-install --name=vm1 --ram=512 --file=/var/ftp/pg/vm1.img --location=ftp://192.168.0.253/RHEL5U5/ --file-size=5 --vcpus=4 --paravirt --bridge=xenbr1 --vnc --debug --location nfs:192.168.1.254:/disk1/rhel5u5 --location http://主机的IP/实际的/完整目录 --location ftp://主机的IP/实际的完整目录 [root@pgserver /]# virt-install --name vm2 --ram=256 --vcpus 4 --location=ftp://192.168.1.254/RHEL5U5 --file=/disk1/xen/vm2.img --file-size=5 --bridge=xenbr0 --vnc --vncport=5920 --debug 二, 04 1月 2011 15:18:52 DEBUG Requesting libvirt URI default 二, 04 1月 2011 15:18:52 DEBUG Received libvirt URI 'xen:///' 二, 04 1月 2011 15:18:52 DEBUG Requesting virt method '默认' 二, 04 1月 2011 15:18:52 DEBUG Received virt method 'xen' 二, 04 1月 2011 15:18:52 DEBUG Hypervisor name is 'xen' 二, 04 1月 2011 15:18:52 DEBUG DistroInstaller location is a network source.
图形方式 需要安装virt-manager软件包 执行命令]# virt-manager ----- 新建 在安装过程中,如果关掉了窗口,实际不影响实际安装,此时,直接virt-vncviewer vm1 就可以再打开窗口。 virt-vncviewer --help 注意:只能一个远程方式查看,第二个远程用此命令是看不到输出界面的。 维护管理:(xm命令在EL5中还能用,但是EL6中没有了,改为virsh命令) 启动: xm create vm1 停: 删除: /tmp/vm1.img /etc/xen/vm1 virsh --help [root@pgserver scripts]# virsh help 命令: help 打印帮助 attach-device 从一个XML文件附加装置 attach-disk 附加磁盘设备 attach-interface 获得网络界面 autostart 自动开始一个域 capabilities 性能 connect 连接(重新连接)到 hypervisor console 连接到客户会话 create 从一个 XML 文件创建一个域 start 开始一个(以前定义的)非活跃的域 destroy 删除一个域 detach-device 从一个 XML 文件分离设备 detach-disk 分离磁盘设备 detach-interface 分离网络界面 define 从一个 XML 文件定义(但不开始)一个域 domid 把一个域名或 UUID 转换为域 id domuuid 把一个域名或 id 转换为域 UUID dominfo 域信息 domname 将域 id 或 UUID 转换为域名 domstate 域状态 domblkstat 获得域设备块状态 domifstat 获得域网络接口状态 dumpxml XML 中的域信息 edit 编辑某个域的 XML 配置 find-storage-pool-sources 发现潜在存储池源 find-storage-pool-sources-as 找到潜在存储池源 freecell NUMA可用内存 hostname 打印管理程序主机名 list 列出域 migrate 将域迁移到另一个主机中 net-autostart 自动开始网络 net-create 从一个 XML 文件创建一个网络 net-define 从一个 XML 文件定义(但不开始)一个网络 net-destroy 删除一个网络 net-dumpxml XML 中的网络信息 net-edit 为网络编辑 XML 配置 net-list 列出网络 net-name 把一个网络UUID 转换为网络名 net-start 开始一个(以前定义的)不活跃的网络 net-undefine 取消定义一个非活跃的网络 net-uuid 把一个网络名转换为网络UUID nodeinfo 节点信息 nodedev-list 这台主机中中的枚举设备 nodedev-dumpxml XML 中的节点设备详情 nodedev-dettach 分离节点设备及其设备驱动程序 nodedev-reattach 重新附加节点设备设备机器设备驱动程序 nodedev-reset 重置节点设备 nodedev-create create a device defined by an XML file on the node nodedev-destroy destroy a device on the node pool-autostart 自动启动某个池 pool-build 建立池 pool-create 从一个 XML 文件中创建一个池 pool-create-as 从一组变量中创建一个池 pool-define 在一个 XML 文件中定义(但不启动)一个池 pool-define-as 在一组变量中定义池 pool-destroy 销毁池 pool-delete 删除池 pool-dumpxml XML 中的池信息 pool-edit 为存储池编辑 XML 配置 pool-info 存储池信息 pool-list 列出池 pool-name 将池 UUID 转换为池名称 pool-refresh 刷新池 pool-start 启动一个(以前定义的)非活跃的池 pool-undefine 取消定义一个不活跃的池 pool-uuid 把一个池名称转换为池 UUID quit 退出这个非交互式终端 reboot 重新启动一个域 restore 从一个存在一个文件中的状态恢复一个域 resume 重新恢复一个域 save 把一个域的状态保存到一个文件 schedinfo 显示/设置日程安排变量 dump 把一个域的内核 dump 到一个文件中以方便分析 shutdown 关闭一个域 setmem 改变内存的分配 setmaxmem 改变最大内存限制值 setvcpus 改变虚拟 CPU 的号 suspend 挂起一个域 ttyconsole tty 控制台 undefine 取消定义一个非活跃的域 uri 打印管理程序典型的URI vol-create 从一个 XML 文件创建一个卷 vol-create-as 从一组变量中创建卷 vol-delete 删除卷 vol-dumpxml XML 中的卷信息 vol-info 存储卷信息 vol-list 列出卷 vol-path 将卷 UUID 转换为卷路径 vol-name 将卷 UUID 转换为卷名称 vol-key 将卷 UUID 转换为卷密钥 vcpuinfo 域 vcpu 的信息 vcpupin 控制域 vcpu affinity version 显示版本 vncdisplay vnc 显示 start 开始 [root@pgserver scripts]# virsh start vm1 list 列出域 [root@pgserver scripts]# virsh list Id 名称 状态 ---------------------------------- 0 Domain-0 running 2 pgsys1 闲置 reboot 正常重新启动一个域(虚拟机) [root@pgserver scripts]# virsh reboot vm1 shutdown 正常关闭一个域(虚拟机) [root@pgserver scripts]# virsh shutdown vm1 destroy 强制立即停止一个域(虚拟机) [root@pgserver scripts]# virsh destroy vm1 save 把一个域的状态保存到一个文件 (挂起) restore 从一个存在一个文件中的状态恢复一个域 (恢复) console 显示虚拟机屏幕: virt-viewer pgsys1 克隆虚拟机: (克隆完要改IP/NETWORK信息) virt-clone -o vm1 -n vm5 -f /var/ftp/xen/vm5.img -d 先来克隆 virt-clone -o vm1 -n vm5 -f /var/ftp/xen/vm5.img -d 克隆vm1命名为vm5,新生成的vm5的映像文件是/var/ftp/xen/vm5.img,-d显示过程 [root@pgserver xen]# virt-clone -o pgsys1 -n pgsys2 -f /disk1/xen/pgsys2.img -d --nonsparse为虚拟机添加硬盘
virt-install --nographics -n qingvm05 -r 8129 -f /a8root/xen/qing/centos5-3.img -l
xen ks安装方法:
1.生成一个img文件
dd if=/dev/zero of=cwm_vm2.img bs=1024k count=8000
2.编辑ks文件
[root@gw2 install]# cat ks_64_vm_org.cfg
# Kickstart file automatically generated by anaconda.
install
url --url
lang en_US.UTF-8
network --device eth0 --bootproto static --ip 192.168.200.74 --netmask 255.255.254.0 --gateway 192.168.200.2 --nameserver 202.106.0.20 --hostname vm_org
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc America/New_York
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
# Partiton
clearpart --linux --drives=xvda
part /boot --size 101 --ondisk=xvda
part swap --size 1000 --ondisk=xvda
part pv.01 --size 5001 --grow --ondisk=xvda
volgroup rootvg pv.01
logvol / --vgname=rootvg --size=1001 --grow --name=rootvol
rootpw --iscrypted $1$MqJdtS0W$tjx0YhdUkNVwaZm1grhTU.
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai
# Install OS instead of upgrade
install
services --disabled=acpid,apmd,bluetooth,cpuspeed,cups,fristboot,gpm,haldaemon,hidd,mdmonitor,mcstrans,ip6tables,netfs,messagebus,nfslock,pcscd,portmap,xfs,readahead_early,restorecond,rpcgssd,rpcidmapd,sendmail
%packages
@development-tools
ntp
lynx
elinks
mc
vim-minimal
iproute
iptraf
gcc
gcc-c++
lrzsz
sysstat
openssl-devel
# INSTALL SNMP
net-snmp
net-snmp-utils
net-snmp-perl
net-snmp-libs
#squid
#kernel-PAE
#kernel-PAE-devel
#sys_config_zhou
compat-libstdc++-33
%pre
#!/bin/sh
echo " Welcome to my kickstart"
%post
(echo -en "# ntp sync time\n01 * * * * root /usr/sbin/ntpdate clock.redhat.com > /dev/null; hwclock --systohc" >> /etc/crontab ) 1>/root/post-sc.log 2>&1
#==== CHANGE YUM.CONF =====
rpm -Uhv
rpm -Uvh
rpm -Uvh
mkdir -p /a8root/soft/yumcache
perl -p -i -e 's/cachedir\=\/var\/cache\/yum/cachedir=\/a8root\/soft\/yumcache/g' /etc/yum.conf
perl -p -i -e 's/keepcache\=0/keepcache=1/g' /etc/yum.conf
# install tools
yum --disablerepo=* --enablerepo=rpmforge -y install nload
rpm -Uvh
#==== CHANGE ULIMIT ====
echo -en "* soft nofile 32767\n" >> /etc/security/limits.conf
echo -en "* hard nofile 65535\n" >> /etc/security/limits.conf
#==== UPDATE SSHD ====
yum -y update "openssh*"
perl -p -i -e 's/^#Port(\s+)22/Port 2222/g' /etc/ssh/sshd_config
perl -p -i -e 's/--dport 22 -j ACCEPT$/--dport 2222 -j ACCEPT/g' /etc/sysconfig/iptables
3. virt-install --nographics -n cwm_vm3 -r 512 -f /a8root/xen/cwm_vm3.img -l -x "ks= ip=192.168.200.55 netmask=255.255.254.0 gateway=192.168.200.2 "
扩容有两种方案:一、给虚拟机再加一个img文件;二、给centos.5-3.x86.img扩容
方案一比较简单,我就不细说了。下面说下第二种方案。
1、停止正在运行的虚拟机。
2、为centos.5-3.x86.img增容。
# dd if=/dev/zero bs=1024k count=1024 >> centos.5-3.x86.img
注意红色的部分,是双箭头“>>”,而不是单箭头“>”,否则的话,你将会得到一个1G大小的空文件
3、强制检查
#e2fsck -f
centos.5-3.x86.img
4、改变虚拟机文件系统的大小
# resize2fs
centos.5-3.x86.img
5、重新启动虚拟机,就可以看到根分区多了1G
或
dd if=/dev/zero of=vm01.img bs=1 count=1 seek=20G conv=notrunc
e2fsck -f vm01.img -y
resize2fs -p vm01.img
另一种方法:
You need to do something like
# Create new empty disk-image
dd if=/dev/zero of=disk-image count=10240
# set up a loop-device for it
losetup /dev/loop2 disk-image
# initialize that loop-device for LVM
pvcreate /dev/loop2
# Create a VG on it
vgcreate Test /dev/loop2
Now you can create Logical Volumes on that VG, e.g.:
# Create a logical volume
lvcreate 4M MyLV Test
# Create a filesystem on it
mke2fs /dev/Test/MyLV
# mount the filesystem
mkdir MyLV
mount /dev/Test/MyLV MyLV
And if you want to remove everything
umount MyLV
rmdir MyLV
lvremove /dev/Test/MyLV
vgremove Test
losetup -d /dev/loop2
rm disk-image
Xen环境下为DomU在线添加磁盘空间设备 Xen环境内,可以为运行中的DomU,动态添加磁盘设备。
以下为系统为RHEL5.2的系统在线添加磁盘的方法:
在Dom0端建立新的逻辑卷:
# lvcreate vg0 -n xen_rh01 -L 15G
Logical volume "xen_rh01" created
为名称为“rh501”的虚拟机添加设备文件为xvdb:
# xm block-attach rh501 phy:/dev/vg0/xen_rh01 /dev/xvdb w
DomU的终端出现下列信息:
xvdb: unknown partition table
用下列命令可以动态删除设备文件:
确认设备的ID:
# xm block-list rh501
Vdev BE handle state evt-ch ring-ref BE-path
51712 0 0 4 9 8 /local/domain/0/backend/vbd/3/51712
51728 0 0 4 12 330 /local/domain/0/backend/vbd/3/51728
* 上述命令行执行结果的最后一行的最后的五位数为新添加的磁盘设备
删除设备:
# xm block-detach rh501 51728
(Usage: xm block-detach [-f|--force])
根据需要可以用 -f (强制执行)选项
1.增加内存
只要修改虚拟机的配置文件就可以了[root@vmxen vm]# cat /etc/xen/vm4
name = "vm4"
uuid = "705ae6ad-3ab2-5447-8e00-eeee939e4a2c"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ "tap:aio:/vm/vm4.img,xvda,w","tap:aio:/vm/vm4hd2.img,xvdb,w" ]
vif = [ "mac=00:16:36:48:25:65,bridge=xenbr0,script=vif-bridge" ]
注意:修改虚拟机内存前需要把剩下的所有内存回收,分配给domain-0 ,否则会出现内存与实际内存不符的情况。
命令:
xm list
xm mem-set Domain-0 6144(实际剩余内存)vi /etc/xen/hostname
maxmem = 2048
memory = 2048
2.增加硬盘
首先增加一个img文件作为虚拟机的新硬盘, dd if=/dev/zero of=/vm/vm4hd2.img bs=1M count=2048
然后修改虚拟机配置文件 ,增加xvdb的新磁盘。
disk = [ "tap:aio:/vm/vm4.img,xvda,w","tap:aio:/vm/vm4hd2.img,xvdb,w" ]
这样,重启vm后输入fdisk -lh就可以看到第二块硬盘了。
注意:比较好的方法是建虚拟机时就建两块硬盘,xvda用来装系统,xvdb用来存放数据,这样在硬盘空间不足时可以再增加一块硬盘或者扩充xvdb的容量,对系统的影响比较小。
比如:xm1 的xvda为8G装系统,xvdb 32G存放数据。
3.新建虚拟机
只要拷贝xen vm的img镜像文件和配置文件,并修改配置文件中的镜像路径和虚拟机名称就可以了。
注意要修改虚拟机的mac地址,要不然会出现冲突。
4.让虚拟机随宿主机一起启动。
只要在/etc/xen/auto建立一个xen vm配置文件的链接就可以了。
比如: ln -s /etc/xen/vm1 /etc/xen/auto/vm1.