12年 linux 系统运维工程师,网络架构设计、优化,故障处理。
分类: 虚拟化
2011-11-15 16:36:37
开始安装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.img4、改变虚拟机文件系统的大小# resize2fs centos.5-3.x86.img5、重新启动虚拟机,就可以看到根分区多了1G或dd if=/dev/zero of=vm01.img bs=1 count=1 seek=20G conv=notrunce2fsck -f vm01.img -yresize2fs -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/loop2Now 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 MyLVAnd 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.