免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3154 | 回复: 6
打印 上一主题 下一主题

[高级应用] 原创:AIX LVM基础结构学习心得!(完) [复制链接]

招聘 : 系统集成
论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-14 17:41 |只看该作者 |倒序浏览
原创:AIX LVM基础结构学习心得!(完)


一、前言

在学习AIX LVM基础结构的过程中,有一些心得,在此和大家一起交流

学习的方式是基于od命令,直接查看相关设备文件的二进制代码,从而分析LVM基础结构,以及LVM高级命令的效果


二、LVM配置信息保存位置

LVM中的配置信息,比如VG、LV、FS保存在两个部分

1)磁盘本身上的数据块中

这部分可以通过低级LVM命令或者od命令直接查看

2)ODM数据库中

ODM数据库中的信息直接源于磁盘数据块,可以通过高级LVM命令或者ODM命令查看


LVM命令会修改 1)和2)中的相关配置信息


ODM和磁盘数据块中信息不一致时,可以通过相应的同步命令,根据磁盘数据块中的信息来更新ODM

三、PV

每个PV头部有一个保留区,主要保留PVID信息


PV保留区如下:

0000200  00c9 bbed 1c16 5948 0000 0000 0000 0000
0000220  0000 0000 0000 0000 0000 0000 0000 0000
*
0000300

注意:其中的 00c9 bbed 1c16 5948就是PVID


当把磁盘设置为pv=yes时,会在保留区生成这样的PVID

反之pv=clear时,则清除保留区中的PVID


磁盘只有设置为pv=yes,有了PVID后,才能够继续下面后继LVM操作



四、VG

VG是由一个或者多个PV组成

VG的信息保存在VGSA和VGDA中,当磁盘设置为pv=yes时,除了在PV保留区中写入PVID外。另

外保留部分空间给VGSA和VGDA


需要注意的是,创建VG时的参数,如是否支持大VG,会影响分配给VGSA和VGDA的空间大小


当创建VG的时候,向VGSA和VGDA空间里写入相应的参数


根据VG中的PV数量,VGDA在PV上有一份或者两份,具体如下:


PV数                       1#PV   2#PV  3#PV

   1        VGDA数         2
   
   2        VGDA数         2          1

   3        VGDA数         1           1       1


VGSA内容举例如下:

十六进制格式

0010000  4667 a0e6 2462 3f5d 0000 0000 0000 0000
0010010  0000 0000 0000 0000 0000 0000 0000 0000
*
0010fe0  0000 0000 0000 0000 0000 0000 0001 0000
0010ff0  0000 0000 0000 0000 4667 a0e6 2462 3f5d


VGDA内容举例如下:

十六进制格式
0011000  4667 a33b 2aba 553c 00c2 2f2f 0000 4c00
0011010  0000 0113 04cc 9a47 0009 0100 001c 0002
0011020  0003 0832 0000 0001 0001 0000 0000 0000
0011030  0000 0832 0000 0000 0000 0000 0000 0000
0011040  0000 0000 0000 0000 0000 0000 0000 0000
*





ASCII字符格式


0113200    h   d   5  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0113210   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0113240    h   d   6  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0113250   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0113280    h   d   8  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0113290   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
01132c0    h   d   4  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
01132d0   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0113300    h   d   2  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0113310   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0



对比 lsvg的输出结果,可以看出来,VG所有信息都包括在了VGSA和VGDA中

比如:
0011000  4667 a33b 2aba 553c 00c2 2f2f 0000 4c00
0011010  0000 0113 04cc 9a47 0009 0100 001c 0002

中的00c2 2f2f 0000 4c00 0000 0113 04cc 9a47即为VGID

VG中的LV名也包括在内

所以ODM中的内容是源自于VGSA和VGDA


对于exportvg来说,只是从ODM中删除了VG相关信息,但是用od查看hdiskX时,上述VGDA信息仍

然存在,因此importvg时,就根据VGDA信息把VG信息重新写入到ODM中


五、LV

VG下划分LV,用于FS或者做raw设备

LV基本分配单位是逻辑块

在每个LV的头部0号逻辑块作为LVCB,用于保存LV配置信息


LVCB内容举例:

ASCII代码

0000000    A   I   X       L   V   C   B  \0  \0   j   f   s  \0  \0  \0
0000010   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   0   0   c   2   2   f
0000030    2   f   0   0   0   0   4   c   0   0   0   0   0   0   0   1
0000040    1   3  \0   h   d   1  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000050   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0000080   \0  \0  \0   T   h   u       J   u   n           7       0   6
0000090    :   0   8   :   4   4       2   0   0   7  \n  \0  \0  \0  \0
00000a0   \0   T   h   u       J   u   n           7       0   6   :   0
00000b0    8   :   4   4       2   0   0   7  \n  \0  \0  \0  \0  \0   2
00000c0    2   F   2   F   4   C   0   0  \0   y   m   c  \0   y  \0
00000d0   \0 001  \0 001   /   h   o   m   e  \0  \0  \0  \0  \0  \0  \0
00000e0   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0


从中可以看出,LVCB中有mount点等相关信息


LVCB被破坏后,可以用低级命令putlvcb来修复,或者直接通过编辑二进制文件来修复



六、FS

FS的配置信息保存在超级块中,每个FS有两个超级块

主超级块在1号逻辑块,次超级块在31号逻辑块


超级块内容举例:


ASCII格式

0001000    e 207   !   C  \0  \0  \0  \0  \0  \0   @  \0  \0  \0  \0 003
0001010   \0  \b  \0  \0 020  \0  \0  \0   /   h   o   m   e  \0   /   h
0001020    o   m   e  \0  \0  \n  \0 003 001  \0  \0  \0   F   g   ?  ?
0001030   \0  \0  \0 001  \0  \0 002  \0  \0  \0  \b  \0  \0  \0  \0  \0
0001040   \0  \0  \0  \0  \0  \f      \0  \0  \0  \0  \0   F   g   ?025
0001050   \0  \0  \0  \0   F   g   ?  ? \0  \0  \0  \0  \0  \0  \0  \0
0001060   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
0001c10   \0  \0  \0  \0  \0  \0  \0  \0
0001c18


十六进制格式

0001000  6587 2143 0000 0000 0000 4000 0000 0003
0001010  0008 0000 1000 0000 2f68 6f6d 6500 2f68
0001020  6f6d 6500 000a 0003 0100 0000 4667 a0f2
0001030  0000 0001 0000 0200 0000 0800 0000 0000
0001040  0000 0000 000c 2000 0000 0000 4667 a215
0001050  0000 0000 4667 a1ae 0000 0000 0000 0000
0001060  0000 0000 0000 0000 0000 0000 0000 0000
*
0002000


对比lsfs结果,同样可以大体看出超级块各个byte的定义

注意:6587 2143是幻数,如果crfs是采用了默认参数,则幻数为 4321 8765


如果主超级块被破坏,可以通过dd拷贝次超级块来修复,或者直接编辑二进制文件来修复





FS被误删除后的恢复

用rmfs误删除FS,实际上只是删除了LVCB中的信息,超级块中的信息不变,FS中的数据也不会变


这样只要没有向这些空间写入新的数据,都可以做修复的

方法是:按照原来的参数mklv,恢复LVCB中的信息,编辑/etc/filesystem后,就可以mount FS,数据不会丢失




七、总结

上面是我学习LVM的一点体会,主要用的命令如下:



# od -x/c -N 64 /dev/hdisk1 +0200|more   PV保留区



# od -x/c /dev/hdisk1 +0x10000|more  VGSA

# od -x/c /dev/hdisk1 +0x11000|more  1# VGDA


# od -x/c /dev/hdisk1 +0x118400|more  2 # VGDA


# od –c/x  /dev/myfs00 +0x1000  主超级块

# od –cx  /dev/myfs00 +0x1f000  次超级块


建议大家在做LVM操作的时候,可以多用od查看设备文件二进制代码,这样可以更好地了解LVM命

令执行的效果,对于LVM基础结构有更多的了解

论坛徽章:
0
2 [报告]
发表于 2007-06-14 17:52 |只看该作者
楼主好人一个!

请问楼主两个问题:

这样看VGDA和VGSA的信息不容易看懂,看着看着脑袋发晕,有没有更直接的方法?

AIX 5.3能动态减小文件系统大小,既然能动态缩减文件系统,那么动态缩减LV也应该是可以的,但是AIX 5.3没有提供这样的接口,有没有什么方法可以做到?

多谢楼主了。

论坛徽章:
0
3 [报告]
发表于 2007-06-14 19:20 |只看该作者
楼主有心了

论坛徽章:
12
CU大牛徽章
日期:2013-09-18 15:20:4815-16赛季CBA联赛之同曦
日期:2016-02-01 20:28:25IT运维版块每日发帖之星
日期:2015-11-10 06:20:00操作系统版块每日发帖之星
日期:2015-10-28 06:20:002015亚冠之塔什干棉农
日期:2015-06-04 11:41:56丑牛
日期:2014-05-10 16:11:33技术图书徽章
日期:2013-09-23 13:25:58CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58数据库技术版块每日发帖之星
日期:2016-02-08 06:20:00
4 [报告]
发表于 2007-06-14 23:50 |只看该作者
原帖由 jtw 于 2007-6-14 17:52 发表
楼主好人一个!

请问楼主两个问题:

这样看VGDA和VGSA的信息不容易看懂,看着看着脑袋发晕,有没有更直接的方法?

AIX 5.3能动态减小文件系统大小,既然能动态缩减文件系统,那么动态缩减LV也应该是可以的 ...

动态缩小JFS2可以,但是缩小裸设备不可以,因为系统不知道裸设备上数据的分布。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2007-06-15 00:38 |只看该作者
有个readvgda命令可以用

论坛徽章:
0
6 [报告]
发表于 2007-06-15 10:12 |只看该作者
不错!

论坛徽章:
0
7 [报告]
发表于 2007-06-15 13:20 |只看该作者
原帖由 mike79 于 2007-6-14 23:50 发表

动态缩小JFS2可以,但是缩小裸设备不可以,因为系统不知道裸设备上数据的分布。


缩减文件系统,肯定是先缩减LV。如果不能缩减LV,怎么能缩减文件系统。我想应该是可以的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP