标签为 LVM 的文章

XenServer 6.2 填坑之 LVM软件包降级

背景:
近期,因为新机房建设,有近30台高配的XenServer上架,随之而来的就是创建近300台虚拟机。
如果采用传统的方法,创建模板,然后手动更改IP地址,磁盘,CPU,内存等大小,会浪费很多时间,因此我一直在考虑将整个流程全部自动化。
最后经过一路填坑和试错,终于成功了。但这些不会在本文中展示,后面会有写文章来分享我的自动化脚本和VM模板。

在这一篇文章中,我要讲的是我此次遇到的最大的坑,而这个坑所有使用XenServer6.2的人都可能会遇到。
情况发生在我用脚本自动化创建VM的过程中,之前的几十台一直正常,结果等所有的创建完成之后。上去一看,后面几百台的VM磁盘居然都没有自动扩容,这不应该啊,所有的服务器环境应该都是相同的。

经过我的排错,发现在做resize的时候有如下报错:
[root@idc1-server4 ~]# xe vdi-resize uuid=786fb0eb-1fd1-4746-86a5-8facd4d0ebc2 disk-size=50GiB

 
Error code: SR_BACKEND_FAILURE_110
Error parameters: , VDI resize failed [opterr=Command ['/usr/sbin/lvcreate', '-n', 'inflate_786fb0eb-1fd1-4746-86a5-8facd4d0ebc2_21525168128', '-L', '4', 'VG_XenStorage-aa1cc675-5367-9a3a-14b9-85b0fc9400c0', '--addtag', 'journaler', '--inactive', '--zero=n'] failed (3): /usr/sbin/lvcreate: unrecognized option `--inactive'
Error during parsing of command line.], 

好端端的命令怎么会提示参数错误呢?经过一番搜索,发现了一位和我同样悲剧的老外:
http://www.experts-exchange.com/OS/Linux/Distributions/Q_28271130.html

接着经过一番检查,就不难发现一些坑爹的情况:
[root@idc1-server4 ~]# lvm version

 
  LVM version:     2.02.88(2)-RHEL5 (2013-06-25)
  Library version: 1.02.67-RHEL5 (2011-10-14)
  Driver version:  4.15.0

[root@idc1-server4 ~]# cat /etc/redhat-release

 
CentOS release 5.10 (Final)

系统应该是XenServer的,结果却变成了CentOS 5.10。

对比创建成功的XenServer:
[root@idc1-server1 ~]# lvm version

 
  LVM version:     2.02.84(2)-RHEL5 (2011-08-26)
  Library version: 1.02.63-RHEL5 (2011-06-10)
  Driver version:  4.15.0

[root@idc1-server1 ~]# cat /etc/redhat-release

 
XenServer release 6.2.0-70446c (xenenterprise)

然后再检查lvcreate命令所在的lvm2软件包:
[root@idc1-server1 ~]# rpm -qa | grep lvm2

 
lvm2-2.02.84-6.xs1120

[root@idc1-server4 ~]# rpm -qa | grep lvm2

 
lvm2-2.02.88-10.el5

版本果然不同,看上去主机idc1-server4上的lvm2要更新一些,但其实idc1-server1上的lvm2才是Citrix打了专门的patch之后的,支持功能更多。
于是我赶紧发了一封邮件,让所有人不要在XenServer上随意使用YUM安装软件,同时禁用了默认的CentOS-Base.repo。

但是问题还是要解决啊,上面的老美说直接重装XenServer,这个太伤了,那么多还要去机房现场操作,我会死掉的。

于是我开始辛辛苦苦的寻找lvm2-2.02.84-6.xs1120这个软件包,哈哈,Google的搜索结果为0条。
那么是不是就没救了呢?我继续尝试从XenServer的ISO里面去找,依然找不到。

最后,我愤怒了,直接到idc1-server1上将所有lvm2相关的文件打包,然后到有问题的服务器上强行卸载lvm2再解压。
就这样,我用暴力填好了这个坑,看着自己的脚本又能够不停的刷屏,自动创建VM,我感动的都快哭了。

 
[root@idc1-server2 dong]# ssh idc1-server1 'cd /tmp; rpm -ql lvm2-2.02.84-6.xs1120 > /tmp/lvm.list; tar -T /tmp/lvm.list -czf /tmp/lvm.tgz' 
tar: Removing leading `/' from member names
[root@idc1-server2 dong]# scp root@idc1-server1:/tmp/lvm.tgz /tmp/
lvm.tgz             100% 2113KB 704.2KB/s   00:03    
[root@idc1-server2 dong]# scp /tmp/lvm.tgz idc1-server4:/tmp/
lvm.tgz              100% 2113KB   2.1MB/s   00:01    
[root@idc1-server2 dong]# ssh idc1-server4 'rpm -qa | grep lvm2 | xargs rpm -e --nodeps'
warning: /etc/lvm/lvm.conf saved as /etc/lvm/lvm.conf.rpmsave
[root@idc1-server2 dong]# ssh idc1-server4 'cd /;tar xzf /tmp/lvm.tgz'

,

1 Comment

2008-8-7工作笔记--LVM磁盘管理

2008-8-7工作笔记--LVM磁盘管理
-------------------------------------------------------------------------------------------
如何挂载一块从别的机器上取下的做了LVM的硬盘:
1.fdisk -l //查看新增的硬盘是否已经被识别
2.vgscan //扫描LVM卷
3.vgchange -ay
4.lvscan //如果正常则会显示出硬盘的LV状态都是 active
5.mount -t ext3 /dev/VGname/LVname /mnt/lvmdisk/
-------------------------------------------------------------------------------------------
如何将一块新硬盘添加到现有的LVM中,以达到扩容目的:
1.fdisk -l //查看新增的硬盘是否已经被识别
2.fdisk /dev/sdb //创建一个新的分区sdb1,并使用t参数标记为8e(即Linux LVM)
>n
>t
>8e
3.pvcreate //建立物理卷
4.vgextend VolGroup00 /dev/sdb1 //将新增的屋里卷加入到卷组中去
5.lvextend -L +800G /dev/VolGroup00/LogVol00 //将新增的80G硬盘的所有空间都加到逻辑卷中去
6.RHEL4: ext2online /dev/VolGroup00/LogVol00
RHEL5: resize2fs -p /dev/VolGroup00/LogVol00
//激活新增的空间
7.df -h //此时便可以看到新增的空间了
-------------------------------------------------------------------------------------------
如何删除一个现有的LVM:
1.umount 所有vg0下的lv
2.lvremove /dev/vg0/lv0
3.vgchange -an /dev/vg0 (休眠vg0,-ay是激活)
4.vgremove vg0 //移除vg0
-------------------------------------------------------------------------------------------
如何删除一个现有LVM中的物理卷,以取出新增的硬盘:
1.转移数据 pvmove /dev/sdb1 [sdc1] //如果想指定转移的物理卷则在后面输入,默认是其它地方
2.pvreduce vg0 /dev/sdb1 把sdb1从卷组中删除
-------------------------------------------------------------------------------------------
一些常用的LVM管理命令:
扩展VG: vgextend vg0(卷组名) /dev/sdb1(PV名)
扩展LV: lvextend -L +10G(空间大小) /dev/vg0/lv0(LV名)
查看信息: vgdisplay /dev/vg0 , lvdisplay /dev/vg0/lv0
数据迁移: pvmove /dev/sdb1 /dev/sdc1
-------------------------------------------------------------------------------------------
所有命令列表:
1.extendfs 扩展一个离线文件系统
2.lvchange 改变一个逻辑卷的的属性
3.lvcreate 在卷组中创建一个逻辑卷
4.lvdisplay 显示逻辑卷的信息
5.lvextend 增加分配给逻辑卷的物理区域数
6.lvlnboot 将逻辑卷设为启动,交换或内存映像卷
7.lvmerge 将以前镜像的卷合并成一个逻辑镜像卷
8.lvreduce 减少分配给逻辑卷的物理区域数
9.lvremove 从卷组中删除一个或多个逻辑卷
10.lvrmboot 删除联接到启动,交换或内存映像卷的逻辑卷
11.lvsplit 将镜像的逻辑卷分成两个逻辑卷
12.lvsync 同步在一个或多少失效逻辑卷上的逻辑卷镜像
13.pvchange 改变卷组中的物理卷的属性
14.pvcreate 创建一个可以被卷组使用的物理卷
15.pvdisplay 显示卷组中一个或多个物理卷的信息
16.pvmove 将分配的物理区域从一个物理卷转移鲐其他物理卷
17.vgcfgbackup 保存卷组LVM配置
18.vgcfgrestore 将LVM配置恢复 到卷组
19.vgchange 开关卷组的一些状态
20.vgcreate 创建一个卷组
21.vgdisplay 显示卷组信息
22.vgextend 通过添加物理卷扩展一个卷组
23.vgexport 从系统输出一个卷组
24.vgimport 向系统输入一个卷组
25.vgscan 扫描卷组的系统物理卷
26.vgreduce 通过删除一个或多个物理卷减小卷组
27.vgremove 从系统上删除一个或多个卷组的定义
28.vgsync 同步在一个或多个失效卷组上的逻辑镜像

No Comments