Chapter7 LVM、文件系统、磁盘问题诊断
★当每个硬盘被加入一个卷组(VG)的时候就被分配了一个物理卷标识符(PVID)。不能
使用dd命令拷贝两个物理卷的内容,因为PVID也会被拷贝的,这样两个不同的物理卷就有
了相同的PVID,系统会出错。
★当硬盘出现错误的时候,一般会进行数据重定位。有三种类型的数据重定位:
1)硬盘内部的数据重定位:最底层的重定位,发生在磁盘内部,出现的时候不会通知用户

2)由LVM产生的硬件重定位:更高层次的重定位,LVM将有问题的物理地址A上的数据拷贝
到物理地址B,LVM会继续读地址A上的数据,但是硬盘已经将真实的IO转向物理地址B。
3)软件重定位:最高层次的重定位,也由LVM设备产生。LVM生成一个坏道表,当读物理地
址A上的数据时,先检查坏道表,如果A在坏道表中,就转向物理地址B。
当用户觉得LVM有问题的时候,首先要做的事情就是备份,尽可能地保存卷组中的数据。卷
组发生问题后进行的备份需要和发生问题前进行的备份进行对比。
★ODM 重新同步:
LVM发生问题往往是硬盘的物理问题造成ODM中的数据与硬盘上储存的VGDA,VGSA,LVCB不同
步。当LVM操作不正常地结束并和ODM不一致的话,ODM就会出错。例如,当导入一个卷组的
时候,ODM所在文件系统(通常是root,/)大小溢出。
1)如果用户觉得某个卷组的ODM有问题,使ODM与正确的数据同步的方法是:将该卷组从系
统中varyoff并export,再import并varyon卷组,这样就可以刷新ODM中的数据。不过这种
方法只能对非rootvg 的卷组有效。
2)对于rootvg卷组,可以使用命令#redefinevg rootvg来刷新ODM中的数据。该命令将对
系统中硬盘和卷组的对应关系进行检测。
3)如果硬盘上的LVM信息出错,使用命令#synclvodm –v myvg来重建并同步LVCB,VGDA等
信息。该命令将同步myvg卷组中所有的逻辑卷。
4)如果卷组中的一个或多个逻辑卷被做过镜像,并且怀疑镜像可能有损坏可以使用命令#
syncvg –l lv02。这个命令将同步逻辑卷lv02的镜像。用syncvg命令可用来同步单个逻辑
卷,或者一个物理分区或者整个卷组。
★导入卷组(importvg)的问题:
如果使用importvg命令不能成功将一个卷组导入进一个系统的话,很有可能是下面的几种
问题:
1)AIX的版本:检查要导入的卷组是否被系统运行的AIX版本支持。低版本的AIX不能支持
由高版本的AIX所导出的卷组。
2)错误的PVID:检查要导入的卷组中的硬盘是否都有有效的PVID号。可以使用#lspv命令
来显示硬盘的PVID号,如果某个盘不显示PVID号,使用#chdev命令来解决问题。例如#chd
ev –l hdisk4 –a pv=yes命令就可以使一个原先没有PVID的hdisk4获得一个正确的PVID
号。
3)当卷组导出后硬盘被更改了:
0516-056 varyon testvg:The volume group is not varied on because a physical v
olume is maked missing.Run diagnostics.
如果使用importvg命令失败,并且出现以上错误信息的话,说明有物理卷丢失了,很有可
能是在卷组被导出后又对硬盘进行了变更。可以使用#importvg –f命令来对卷组进行强制
导入。然后根据情况使用#reducevg命令来去除系统提示出错的硬盘。
4)共享的硬盘环境:在共享硬盘的环境,比如说一个SSA系统,在被2个或者更多的系统所
使用的情况下,定义的物理卷就不可以用了,因为它们已经被其它的机器导入并且vary o
n了。此时应使用lspv命令在所有的机器上对比PVID号。
如果使用importvg命令失败,通过查询错误日志可以找到问题所在。
★扩展最大的物理分区(PP)量:
当在一个卷组中加入一个比该卷组现有容量大的多的硬盘时,很有可能出现先前定义的PP
数量不够。可以使用#lsvg testvg命令来查看现有的卷组信息。使用命令#chvg –t 2 te
stvg可以将testvg卷组的最大PP量扩大为原来的两倍。
★更换硬盘
1)如何检查磁盘错误:通常情况下错误日志分析系统在系统错误的时候会给root用户发一
封邮件,通过查看邮件可以得到硬盘错误信息。也可以使用命令#lsvg –l mirrorvg来查
看所有镜像的信息,如果某个镜像逻辑卷的LV STATE为stale状态,就表明该镜像卷不处于
同步状态。使用#errpt命令来查看错误日志,错误日志的信息将会显示该镜像卷不处于同
步状态的原因。在更换硬盘前,需要对文件系统做好备份,以避免在更换过程中出现不可
预料的问题。如果文件系统中含有数据库文件,需要使用特定的数据库备份工具来备份。
2)卸载一块坏的硬盘:使用rmlvcopy命令卸载一个逻辑卷镜像的物理分区,该物理分区处
于坏的硬盘上。例如命令#rmlvcopy lvdb02 1 hdisk4,该条命令的含义为去除逻辑卷lvd
b02在物理卷hdisk4上的镜像,命令执行完后,该逻辑卷每个LP对应一个PP,也就是说该逻
辑卷没有镜像。使用#lslv –l lvdv02检查上一条命令执行完毕后的结果。然后使用命令
#reducevg –f mirrorvg hdisk4将原先做为镜像用的hdisk4物理硬盘从卷组中去除。使用
命令#lsvg –l mirrorvg来检查上一条命令执行后的结果。使用命令#rmdev –d –l hdi
sk4将该硬盘信息从ODM库中去除。(注意,上述步骤可以用来卸载SCSI硬盘,但是对于SS
A硬盘还需要在smit菜单中将pdisk和hdisk的对应关系去除。)现在就可以安全地将坏的硬
盘从槽位中拔出来。
3)添加一块新的硬盘:下面的步骤讲述的是如何在一个生产环境中添加一块新的硬盘。将
硬盘插入槽位后使用命令#cfgmgr来使系统识别出新的硬盘,并且会将该硬盘做为一个正确
的对象添加进该系统。如果使用命令#cfgmgr –v则会显示更详细的信息,方便进行除错。
使用命令#lsdev –Cc disk来检查系统是否已经识别出新加的硬盘。然后使用命令#exten
dvg mirrorvg hdisk4把该硬盘添加进卷组。重新建立逻辑卷的镜像#mklvcopy lvdb02 2
hdisk4。执行了上述命令后逻辑卷lvdb02的每1个LP就对应2个PP,也就是说为逻辑卷lvdb
02在hdisk4上建立了一个镜像。不过镜像卷还没有和逻辑卷同步,使用命令#syncvg –p
hdisk4将逻辑卷和物理卷同步。syncvg命令可以对物理卷、逻辑卷、卷组进行同步。
4)在错误地移除一块硬盘后所需的处理:如果在拔除硬盘前对系统没有进行正确的操作,
拔除后系统又重启了,这时候就需要使用命令#synclvodom –v lvxxx来重建LVCB信息。不
过这种情况通常适用于剩余的文件系统不依赖于拔除的硬盘。如果文件系统分布在所有的
硬盘上,包括坏的,这时候一般只能使用备份来恢复了:(。
★AIX JFS问题:
和LVM中产生的问题一样,AIX JFS产生的问题也可以追溯到底层的物理硬盘的问题。
使用命令#lsjfs来检查各个挂载点上的文件系统的信息。
★增加文件系统的大小:例如使用命令#chfs –a size=+300000 /usr可以把./usr的大小
增加300000个block的大小,每个bolck的大小为512byte。如果不加“+”就表示为增到到
,比如#chfs –a size=300000 /usr就表示把/usr增大到300000个512的byte,大约为150
M。注意这里实际增加的容量和增加到的容量都是PP大小的整数倍,因为分配给文件的最小
的块就是一个PP。
★系统的检查和恢复:使用命令#fsck /mountpoint来检查挂载点的文件系统,建议用户在
每次挂载文件系统之前都使用该命令来检查。如果执行了该命令后发现文件系统有错误那
系统会提示是否修复该错误,如果不能修复,那就只能从备份上恢复了:(。
★修复一个坏的超级块(superblock):如果在使用fsck或者mount命令时出现下面的错误
,就表明存在一个损坏的超级块。
fsck: Not an AIX3 file system
fsck: Not an AIXV3 file system
fsck: Not an AIX4 file system
fsck: Not an AIXV4 file system
fsck: Not a recognized file system type
mount: invalid argument
使用命令# dd count=1 bs=4k skip=31 seek=1 if=/dev/lv00 of=/dev/lv00可以从备份上
还原的错误的超级块。这里count表示的if模块的数量,bs表示的是指定的模块的大小,s
kip表示的是在开始拷贝之前跳过的模块数量,seek表示的是在开始拷贝之前从输入文件寻
找seek所指定的记录。在很多情况下,从备份上回复超级块会覆盖文件系统,如果问题还
不能解决的话重建一个文件系统再从备份上恢复。
★稀疏文件:不是所有的逻辑块都被分配一个相应的逻辑块的文件叫做稀疏文件。稀疏文
件一般用于数据库文件。使用#ls命令只能查看稀疏文件开始文件块和结束文件块之间的大
小,而不能查看文件真正的大小,这时候需要使用命令#du –rs sparsefile来查看。#ta
r命令不具备备份稀疏文件的功能。新的AIX5版本中的restore和backup命令提供了对稀疏
文件的支持。
★卸载文件系统的问题:在卸载文件系统的时候有可能遇到这样的错误提示:
Device busy或者
A device is already mounted or cannot be unmounted
如果一个文件系统打开了一个文件,那么必须在卸载之前将该文件关闭。例如:
# umount /home
umount: 0506-349 Cannot unmount /dev/hd1: The requested resource is busy.
# fuser -x -c /home
/home: 11630
# ps -fp 11630
UID PID PPID C STIME TTY TIME CMD
guest 11630 14992 0 16:44:51 pts/1 0:00 -sh
# kill -1 11630
# umount /home
1)当用户要卸载/home挂载点的时候,系统提示设备正忙,这时可以使用#fuser –x –c
/home来查看哪个进程还在访问home挂载点。系统显示进程号为11630的进程还在访问hom
e挂载点。使用命令#ps –fp 11630来查看该进程的详细信息,用过#kill –l 11630来将
该进程杀死。这时候就可以成功卸载/home挂载点了。
2)如果还是不能卸载掉文件系统,很有可能是系统加载了一个扩展内核,这时候扩展内核
所在的文件系统就不能被成功地卸载掉。即使使用fuser也不能查看是什么扩展内核还在运
行,因为这不是用户进程加载的,但是可以使用命令#genkex来查看系统加载的所有的扩展
内核,以及内核的代码是在哪个文件系统上的。
3)如果A文件系统下面又挂载了另外一个B文件系统,那么A文件系统是不能被卸载的,必
须先将B文件系统卸载掉之后再卸载A文件系统。
4)删除一个文件系统:在删除一个文件系统之前,首先需要把该文件系统卸载掉,使用命
令#rmfs来卸载文件系统。对于JFS类型的文件系统,rmfs命令不仅将文件系统所在的逻辑
盘移除掉,而且删除/etc/filesystems文件中对应的文件系统的信息。例如:
# umount /u/testfs
# rmfs /u/testfs
rmlv: Logical volume lv02 is removed.
先卸载掉/u/testfs文件系统,然后使用rmfs命令就可以成功删除testfs文件系统。
★磁盘定额:磁盘定额系统可以通过3个参数来确定:1.用户和组的最低限额2.用户和组的
最高限额3.磁盘定额的使用宽限期限。这些参数都可以使用命令#edquota来变更。最低限
额指的是用户或组至少要拥有的1KB文件块或是文件的数量,最高限额指的是最多拥有的数
量,使用宽限期指的是用户资源超过最高限额的期限,一般系统默认是一个星期。如果一
个文件系统起用了磁盘定额功能,那么会在根目录下生成quota.user和quota.group两个用
来记录定额的文件。使用磁盘定额的情况一般为以下3种:1.系统的磁盘空间有限2.文件系
统需要更高的安全性3.磁盘使用量大。注意:/tmp目录中经常会生成各种临时文件,所以
不能对其进行定额。
安装磁盘定额的步骤:
1.检查系统上是否已经安装了quota的文件包
# lslpp -l |grep bos.sysmgt.quota
2.确定需要磁盘定额的文件系统,这里我们假设为/home
3.将userquota和groupquota添加进/home文件系统的属性
       # chfs -a "quota = userquota,groupquota" /home
4.如果文件系统还没有挂载,挂载文件系统
5.使用edquota命令来编辑定额属性
       # edquota -u quotausr(编辑用户定额属性)
       # edquota -g quotagrp(编辑组定额属性)
       edquota命令其实是调用了vi来对一个临时文件进行编辑。
6.激活定额
# quotaon -u /home
7.比较设置的定额和当前磁盘使用情况
       # quotacheck /home
★交换分区
AIX操作系统中经常会出现以下和交换分区(paging space)有关的问题:
*所有的交换分区都被建立在了一块硬盘上
    *交换分区空间用尽
*硬盘上的交换分区分配不均衡
*卷组中的交换分区碎片
★创建和增大交换分区的建议
1)一个硬盘上只建一个物理分区,不要超过1个
2)启动过程中所有的进程涉及到的交换空间都是在系统默认的交换分区(hd6)上的。当
所有的交换分区都启动后,交换分区就以4KB为单位进行循环的管理。如果有多个物理卷,
但是只在其中一块物理卷上建立了多个交换空间,这样并不能分担系统的交换活动,而应
该在每一个物理卷上建立一个交换分区。
3)        不要在一个使用频繁的物理卷上建立交换分区,比如说一个有数据库文件的分区。
4)        所有的交换分区的大小要相同,如果交换分区的大小不相同,当小的用完以后,交换
操作就集中在大的分区上。
5)        不要把一个交换分区分布在不同的物理卷上,这样会降低交换分区的性能,如果需要
使用一个没有交换分区的物理卷上的空间来增大交换分区的话,此时应该新建一个交换分
区。
6)        为了达到最好的性能,应该在连接不同SCSI卡的硬盘上建立交换分区。
★检查是否需要增大交换分区
交换分区过大会造成磁盘空间浪费,如果交换分区过小的话也会给系统造成一系列的问题
。当系统出现以下提示的时候就说明交换分区太小了,需要扩大:
INIT: Paging space is low
ksh: cannot fork no swap space
Not enough memory
Fork function failed
fork () system call failed
Unable to fork, too many processes
Fork failure - not enough memory available
Fork function not allowed. Not enough memory available.
Cannot fork: Not enough space
使用命令#lsps –s来查看交换分区的使用率是否大于80%,如果大于80%就需要增大交换
分区了。
使用命令:
#iostat
#vmstat
#lsps
来查看系统吞吐状况,以决定是否需要扩大交换分区。
★减小或移除交换分区
如果需要移除或者减小一个交换的分区话,首先需要更改交换分区的auto属性,当auto属
性为no的时候,系统启动的时候不会自动激活该交换分区,才可以对其进行相应的操作。
在AIX Version 4.x中要移除一个交换分区必须要重启系统,因为系统不能动态地停止一个
交换分区。只有在系统重启后,交换分区不被自动激活了,才能对其进行移除。
在AIX Version 4.x中要减小一个交换分区的方法是先删除原来的交换分区,然后新建一个
所需大小的交换分区。激活交换分区只需使用命令#mkps即可,不必重启系统。
注意:不正确地删除了系统默认的交换分区的话会造成系统不能重启。
只有在将交换分区停止了以后才能将其移除。如果删除系统默认的交换分区(hd6,hd61)
需要经过特殊的步骤。因为默认的交换分区在系统启动的过程中是通过shell脚本执行的,
要删除默认的交换分区必须要先更改这些脚本然后再创建一个新的boot镜像。
下面的步骤演示的是如果将一个非系统默认的交换分区从系统中移除。
1.        检查系统中现有的交换分区
#lsps –a
2.        将paging00的auto属性更改为no
       # chps -a n paging00
3.        如果该交换分区还在使用中那就需要重启系统。重启之前检查一下系统默认的dump设
备指向一个可用的交换分区
       # sysdumpdev –l
       这里显示的primary应该指向一个可用的交换分区,而不是需要移除的交换分区。
4.        系统重启后就可以使用rmps命令将paging00从系统中移除
       # rmps paging00       
如果需要移除的是系统默认的交换分区的话就需要先将系统默认的dump设备指向一个可用
的交换分区:
#sysdumpdev -P -p /dev/new_dump_device
在AIX 5L中可以使用swapoff命令将交换分区中的交换内容移除掉,然后在使用rmps命令将
交换分区移除。例如:
# swapoff /dev/paging00
# rmps paging00
在AIX 5L中还可以动态地减小交换空间的大小。
       # chps -d 1 paging00
    该条命令可以将交换分区的paging00的大小减小1个LP。