AIX FAQ 第 5 期
2009-09-06 00:00:00 来源:WEB开发网磁盘识别
在 AIX 上进行磁盘管理的首要任务就是要识别出系统上的磁盘,包括个数、大小、配置情况等信息。同时在 AIX 识别磁盘一般是不需要重新启动服务器的,新设备可以在线地进行添加。以下提供一些命令来实现磁盘的发现和信息的查看。
表 1. 磁盘管理命令
功能 | 命令 |
磁盘识别 | ledev – Cc disk |
厂商信息 | lscfg -vl |
磁盘分析 | diag |
清单 1 演示了在运行 cfgmnr 命令以后执行磁盘识别的结果。
清单 1. 磁盘识别
# lsdev -Cc disk
hdisk0 Available Virtual SCSI Disk Drive
# cfgmgr
# lsdev -Cc disk
hdisk0 Available Virtual SCSI Disk Drive
hdisk1 Available Virtual SCSI Disk Drive
清单 2. 相同环境下单独执行 lsdev 的输出
#lsdev -Cc disk
hdisk0 Available 3b-08-00-8,0 16 Bit LVD SCSI Disk Drive
hdisk1 Available 3b-08-00-10,0 16 Bit LVD SCSI Disk Drive
Logical Volume Manager 基本概念和术语
AIX 系统上的磁盘系统是由 Logical Volume Manager (LVM)来进行统一管理的。这个系统和 Windows 以及一些 Linux 的磁盘管理系统存在着不少差别,要想了解 AIX 的磁盘管理系统,就必须先要了解 LVM 相关的知识。
LVM 的基础概念包括 physical volumes(PV),volume groups(VG),physical partitions(PP),logical volumes(LV),logical partitions(LP),文件系统和裸设备(raw devices)。
图 1. 大致描述了一下 LVM 里各个概念之间的关系
每个单独的硬盘驱动器称为一个 PV(physical volume,PV),并具有一个名称(例如:hdisk0、hdisk1 或 hdisk2)。
所有 PV 属于一个名为 rootvg 的卷组(volume group,VG)。
一个卷组中的所有 PV 划分为相同大小的 PP(physical partition,PP)。
每个卷组中定义了一个或多个逻辑卷(logical volume,LV)。
具体的各个概念的解释和相互关系将在后面详细描述。
LVM 配置数据
所谓的 LVM 配置数据就是能够描述当前系统 LVM 情况的信息,属于系统十分重要的系统,系统管理员应当经常关注。这些数据的配置不当可能导致系统的宕机,以及服务的无法访问。
Object Data Manager 数据库
Object Data Manager (ODM)数据库保存着 AIX 系统大部分的配置数据,其中也包括磁盘的 PV ,VG ,LV 信息。ODM 数据库中的数据是和 Volume Group Descriptor Area (VGDA) 中信息的景象,同时它还同步了 Logical Volume Control Block (LVCB) 的信息,这两个重要的磁盘配置数据会在下面介绍到。
Volume Group Descriptor Area
VGDA 位于每个 PV 的最开始位置,它包含着 PV 所属的 vg 中所有 PV 和 lv 的描述信息。VGDA 可以被所有的 LVM 命令修改。操作系统可以通过它知道 vg 中包括那些 PV 和 lv。
每一个磁盘都至少包括一份 VGDA 数据。这在做 vary on 操作时候十分重要。VGDA 的时间戳用来决定哪个 VGDA 正在影响整个 vg 的属性。当然 vg 中的一个磁盘损坏后,VGDA 将无法更新,只有当替换了新的磁盘并执行 vary on 操作后,才能对新磁盘进行 VGDA 的同步。
VGDA 在磁盘被分配为 PV 时候生成,当 PV 被分配当一个 vg 以后,真正的群组数据才被分配给 VGDA 中,当 PV 被从 vg 中删除以后,相应的群组信息也会被清楚掉。
Volume Group Status Area
VGSA 包含着 PP 和 PV 的信息,多用于监视和维护数据的同步复制操作。VGSA 和 VGDA 都拥有重要的起始和结束时间戳,这个时间戳可以让 LVM 在执行 vary on 操作时知道哪些 VGSA 和 VGDA 是最新更新的。LVM 还需要所选的 VGSA 的时间戳与 VGDA 是一致的。
Logical Volume Control Block
LVCB 包含这 LV 的重要信息,如 LP 的数量或者磁盘分配策略。LVCB 的架构和放置的位置受所属的 VG 的类型决定。标准的 VG 中, LVCB 位于 LV 的用户数据第一个块。对于大型的 VG,还有一些 LVCB 会位于磁盘的 VGDA 中。在可伸缩的 VG 中,所有 LV 相关的数据都会作为 LVCB 的一部分存放在 VGDA 中。
下面的例子会使用 getlvcb 命令来查看逻辑卷 hd2 上的 LVCB 信息:
清单 3. getlvcb 命令
# getlvcb -TA hd2
AIX LVCB
intrapolicy = c
copies = 1
interpolicy = m
lvid = 00c4790e00004c0000000005491642c0.5
lvname = hd2
label = /usr
machine id = 4790E4C00
number lps = 33
relocatable = y
strict = y
stripe width = 0
stripe size in exponent = 0
type = jfs2
upperbound = 32
fs =
time created = Sun Sep 20 17:50:40 1970
time modified = Sun Sep 20 18:41:17 1970
Disk quorum(磁盘定额)
每个 VG 中的磁盘都至少有一个 VGDA 或 VGSA 。磁盘中 VGDA 的数量是由 VG 中包含的磁盘数量决定的,如下表所示。
表 2. VGDA 数量
条件 | VGDA 数量 |
VG 中只有 1 个磁盘 | 磁盘上有 2 个 VGDA。 |
VG 中有 2 个磁盘 | 第一个磁盘上有 2 个 VGDA,第二个磁盘有 1 个 VGDA。 |
VG 中有 3 个以上磁盘 | 每个磁盘上有各有一个 VGDA。 |
定额是一种状态,即卷组中 51% 或更多的 PV 可访问。定额是对活动的卷组描述符区域和卷组状态区域 (VGDA/VGSA) 数量的表决。
定额确保在发生磁盘故障时的数据完整性。
当在单个磁盘之上创建一个卷组时,该卷组最初有两个 VGDA/VGSA 区域驻留在该磁盘上。如果某个卷组由两个磁盘组成,则一个磁盘仍然具有两个 VGDA/VGSA 区域,但是另一个磁盘只有一个 VGDA/VGSA。当卷组由三个或更多个磁盘组成时,则每个磁盘仅分配一个 VGDA/VGSA。
图 2 显示了由于过多的磁盘及其 VGDA/VGSA 不可访问而致使 51% 的大多数 VGDA/VGSA 不再存在时丧失定额的情况。
图 2. 磁盘定额
当定额丧失时,卷组将自身 vary off,逻辑卷管理器 (LVM) 不再能够访问其中的磁盘。这样可以防止对该卷组进行进一步的磁盘 I/O,从而防止数据丢失或假设在发生物理问题时已将数据写入。此外,由于卷组已 vary off,用户会在错误日志中得到通知,从而获悉发生了硬件错误并且必须执行维修。
当您希望使用磁盘镜像来确保高可用性时,这具有一些影响。在一个两磁盘镜像的系统中,如果第一个磁盘发生故障,则会丧失 VGDA 的 66%,并且整个 PV 将变得不可用。
Physical volumes
PV 具有以下的一些特性:
每一个单独的磁盘驱动器就是一个 PV,它们都有自己单独的名字,如 hdisk0 ,hdisk1。
一个或多个 PV 可以组成一个 VG,一个 PV 只能属于唯一一个 VG。
不能将 PV 的一部分分配给一个 VG。
PV 可以分配给一个不属于同一类型的 VG,例如 SCCI 的 PV 分配到一个 SSA 的 VG。
PV 中的存储空间有 PP 组成。
VG 中的 PV 拥有相同的 PP 值。
PV 的常用命令:
lspv (smit lspv): 列出 PV 的详细信息。
chpv (smit chpv):改变 PV 的属性。
清单 4 演示了 lspv 命令的使用方法。
清单 4. lspv 命令
# lspv
hdisk0 00c4790ea0a455f0 rootvg
active
hdisk1 00c4790ecc77fd19 rootvg
active
# lspv hdisk0
PHYSICAL VOLUME: hdisk0 VOLUME GROUP: rootvg
PV IDENTIFIER: 00c4790ea0a455f0 VG IDENTIFIER
00c4790e00004c0000000005491642c0
PV STATE: active
STALE PARTITIONS: 0 ALLOCATABLE: yes
PP SIZE: 32 megabyte(s) LOGICAL VOLUMES: 10
TOTAL PPs: 639 (20448 megabytes) VG DESCRIPTORS: 2
FREE PPs: 572 (18304 megabytes) HOT SPARE: no
USED PPs: 67 (2144 megabytes) MAX REQUEST: 128
kilobytes
FREE DISTRIBUTION: 127..128..61..128..128
USED DISTRIBUTION: 01..00..66..00..00
下面是上述示例中的各个字段的含义。
PHYSICAL VOLUME 指定的 PV 的名称。
PV IDENTIFIER PV 标识符(在系统中是唯一的)。
PV STATE 该 PV 的状态。此状态定义了该 PV 是否可用于逻辑输入 / 输出操作。使用 chpv 命令可以更改此状态。
STALE PARTITIONS 过时分区的数量。
PP SIZE PP 的大小。这是卷组的一个特征,并且仅在创建卷组时作为 mkvg 命令的一个参数来进行设置。缺省大小为 4 MB。
TOTAL PPs 该 PV 上可用的 PP 总数,同时包括空闲和已使用的分区。
FREE PPs 该 PV 上可用的空闲分区数量。
USED PPs 该 PV 上已使用的分区的数量。
FREE DISTRIBUTION 此字段按照空闲 PP 所在的 PV 上的各个部分,总结了空闲 PP 在整个 PV 中的分布。
USED DISTRIBUTION 与 FREE DISTRIBUTION 相同,只不过是显示已使用的 PP 的分布。
VOLUME GROUP 该 PV 所分配到的卷组的名称。
VG IDENTIFIER 该 PV 所分配到的卷组的数字标识符。
ALLOCATABLE 是否允许系统分配该 PV 上的新 PP。
LOGICAL VOLUMES 该卷组中的逻辑卷的数量。
VG DESCRIPTORS 驻留在该特定 PV 上的该卷组的 VGDA 数量。
Volume groups
一个 VG 中可以拥有多个不同大小和类型的 PV。VG 可以分为三种类型,它们拥有不同的容量,如表 3 所示。
表 3. 不同 VG 的不同参数
VG 类型 | 最大的 PV 个数 | 最大的 LV 个数 | 每个 LV 拥有的最大 PP 个数 | 单个 PP 的最大容量 |
Normal VG | 32 | 256 | 32512 | 1Gb |
Big VG | 128 | 512 | 130048 | 1Gb |
Scalable VG | 1024 | 4096 | 2097152 | 128Gb |
VG 的相关命令如下表所示。
表 4.VG 相关命令
命令 | smit 快速命令 | 功能 |
lsvg | smit lsvg | 显示 VG 的信息。 |
mkvg | smit mkvg | 创建 VG。 |
chvg | smit chvg | 设置 VG 特性。 |
extendvg | smit extendvg | 向 VG 中增加新的磁盘。 |
reducevg | smit reducevg | 删除 VG 中的磁盘。 |
varyonvg | smit varyonvg | 激活 VG。 |
varyoffvg | smit varyoffvg | 让 VG 处于非激活状态。 |
exportvg | smit exportvg | 导出 VG 的定义。 |
importvg | smit importvg | 导入 VG 的定义。 |
下面的示例简单演示了 VG 命令的用法。
清单 5. VG 命令演示
显示 VG
# lsvg
rootvg
altinst_rootvg
# lsvg rootvg
VOLUME GROUP: rootvg VG IDENTIFIER:
00c4790e00004c0000000005491642c0
VG STATE: active PP SIZE: 32
megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 1278
(40896 megabytes)
MAX LVs: 256 FREE PPs: 1202
(38464 megabytes)
LVs: 13 USED PPs: 76 (2432
megabytes)
OPEN LVs: 10 QUORUM: 2
TOTAL PVs: 2 VG DESCRIPTORS: 3
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 2 AUTO ON: yes
MAX PPs per VG: 32512
MAX PPs per PV: 1016 MAX PVs: 32
LTG size (Dynamic): 128 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY:
Relocatable
创建 VG:
# mkvg -y new_vg hdisk1
new_vg
将 VG 变为 Big VG:
/usr/sbin/chvg -a y -Q y -B itso
扩展 VG 的命令:
# extendvg -f new_vg hdisk2
0516-1254 extendvg: Changing the PVID in the ODM.
当您把 VG 中的最后一块磁盘删除以后,VG 也自动的被删除。
# reducevg -df new_vg hdisk1
ldeletepv: Volume Group deleted since it contains no physical volumes.
导出(exporting)和导入(importing)VG
# lsvg
rootvg
itsovg
# varyoffvg itsovg
Chapter 4. Disks and file systems 105
# exportvg itsovg
# lsvg
rootvg
# importvg -y itsovg -f hdisk1
itsovg
# varyonvg itsovg
# lsvg
rootvg
itsovg
Logical volumes
LV 由一个或多个 LP 组成,每一个 LP 中必须至少包含一个 PP。一般情况下 LP 的大小和 PP 相同,但是 LP 也可以同时在多个 PP 上保留副本,达到冗余的目的。LV 上的数据以文件的形式分别存放在不同的目录中,这就是所谓的“文件系统”。当然,LV 的数据也可以裸 LV 的形式存在,当然,只有能够正确地使用它们的程序才支持这种格式。
PV 和 VG 是不能被用户和程序直接使用的,从而无法提供给它们相应的磁盘空间。只有 LV 才能让程序和用户来进行相应的存储,下面的表列出了常用的 LV 命令。
表 5. LV 相关命令
命令 | smit 快速路径 | 功能 |
lslv | smit lslv | 列出 LV 的相关信息。 |
mklv | smit mklv | 创建 LV。 |
chlv | smit chlv | 修改 LV 的属性。 |
rmlv | smit rmlv | 删除 LV。 |
extendlv | smit extendlv | 扩展 LV。 |
清单 6. LV 命令演示
创建 LV:
# mklv -t jfs2 itsovg 1G
fslv00
-t:指定 文件系统的格式
itsovg:VG 的名称
1G:LV 的大小
fslv00:生成的 LV 的名称
查看 LV 的信息:
# lslv fslv00
LOGICAL VOLUME: fslv00 VOLUME GROUP: itsovg
LV IDENTIFIER: 00c4790e00004c000000010acd6f6546.1 PERMISSION:
read/write
VG STATE: active/complete LV STATE: closed/syncd
TYPE: jfs2 WRITE VERIFY: off
MAX LPs: 512 PP SIZE: 32
megabyte(s)
COPIES: 1 SCHED POLICY: parallel
LPs: 32 PPs: 32
STALE PPs: 0 BB POLICY: relocatable
INTER-POLICY: minimum RELOCATABLE: yes
INTRA-POLICY: middle UPPER BOUND: 32
MOUNT POINT: N/A LABEL: None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV ?: yes
Serialize IO ?: NO
磁盘镜像
磁盘镜像就是对一个 LV 中的 LP 的多个 PP 进行同步操作,让它们保持数据的一致。这可以增加数据的可用性。
AIX 和 LVM 提供了 LV 级别的磁盘镜像功能,可以让 LV 在创建时就已经实现了镜像。
mklv 命令可以让您为 1 个 LV 选择 1 个或 2 个其它的 LV 来构建镜像。同时也可以通过 mklvcopy 命令来实现对已存在的 LV 创建镜像的功能。以下的因素可以进一步增加镜像中的数据可用性:
数据的副本数量:
3 个副本数量的可用性肯定会高于 2 个副本的。
副本的存放位置:
尽量将 LP 的副本存放在不同的 PV 上,这样可以增加数据的可用性,不至于在物理磁盘出现问题事,整个镜像都不可用。
mirrorvg 命令可以实现一个 VG 中所有 LV 的镜像。当然,这也可以通过对 VG 中所有的 LV 一一使用 mklvcopy 来实现,但首先必须保证目标 LV(被镜像的 LV)也是这个 VG 中的成员。
表 6 列出了常用的镜像命令。
表 6. 镜像命令
命令 | smit 快速路径 | 功能 |
mklvcopy | smit mklvcopy | 为 LV 创建副本 |
rmlvcopy | smit rmlvcopy | 为 LV 去除副本 |
mirrorvg | smit mirrorvg | 为 VG 上的已存在的 LV 创建副本 |
unmirrorvg | smit unmirrorvg | 去除指定 VG 或磁盘上的副本 |
syncvg | smit syncvg | 同步新添加的 LV 副本 |
清单 7 演示了以上一些镜像命令的使用方法。
清单 7. 镜像命令演示
查看系统的 PV。
# lspv
hdisk0 00c4790ea0a455f0 rootvg
active
hdisk1 00c4790ecc77fd19 None
hdisk2 00c4790ecd611578 altinst_rootvg
hdisk3 00c4790ecd54055d itso
active
#
为 rootvg 扩展,增加 hdisk1
# extendvg -f rootvg hdisk1
重新查看系统的 PV
# lspv
hdisk0 00c4790ea0a455f0 rootvg
active
hdisk1 00c4790ecc77fd19 rootvg
active
hdisk2 00c4790ecd611578 altinst_rootvg
hdisk3 00c4790ecd54055d itso
active
#
为 rootvg 中的 2 个 PV 进行镜像操作,因为 rootvg 为启动 VG,所以镜像后各个 PV 都可以作为启动的 PV。
# /usr/sbin/mirrorvg rootvg hdisk0 hdisk1
0516-1124 mirrorvg: Quorum requirement turned off, reboot system for
this
to take effect for rootvg.
0516-1126 mirrorvg: rootvg successfully mirrored, user should perform
bosboot of system to initialize boot records. Then, user must
modify
bootlist to include: hdisk0 hdisk1.
# bosboot -ad /dev/hdisk1
bosboot: Boot image is 25166 512 byte blocks.
bootlist -m normal hdisk0 hdisk1
磁盘空间
如果您系统的磁盘空间接近耗尽的话,您可以采用以下几种方法来进行修补。
自动跟踪并清除不需要的文件
限制用户对于特定目录的访问
添加新的磁盘以增加系统空间
要执行以上的命令,需要具有 root 权限。
自动跟踪并清除不需要的文件
使用 skulker 命令可以实现对文件系统中不重要文件的清理。
使用以下的命令:
skulker – p
可以实现清除的功能。清楚的对象会包括:
/tmp 目录下的所有文件
超过特定日期的文件
out 文件
core 文件
ed.hup 文件
限制用户对于特定目录的访问
您还可以通过限制用户对于特定目录的访问以及监视磁盘的使用量来释放更多的磁盘空间。
通过以下命令可以限制用户对于特定目录的访问:
chmod 655 目录名称
这个命令设置了只有目录的属主才能进行读写操作,其他用户只有读的权限。“目录名称”为所要限制的目录的完整路径。
对于某一个用户的磁盘使用量的监视可以通过在 /var/spool/cron/crontabs/adm 文件中增加以下条目来实现:
0 2 * * 4 /usr/sbin/acct/dodisk
这个条目的意思是:在每周四的凌晨 2 点执行 dodisk 命令。dodisk 命令可以实现磁盘使用量的统计。缺省地,dodisk 命令会对 /etc/filesystems 文件中指定的文件系统进行统计,当然,这些文件系统的定义条目中必须增加“account=true”的标识,例如下面的示例:
/scratch:
dev = /dev/fslv02
vfs = jfs2
log = INLINE
mount = true
account = true
添加新的磁盘以增加系统空间
您可以通过挂载其他磁盘驱动器的空间来扩展系统磁盘容量。主要是通过 mount 命令来实现的,如下示例所示:
mount -n nodeA -vnfs /usr/spool /usr/myspool
将 VG 设置为无 quorum
在 VG 中只有两个 PV 时,如果其中一个磁盘不可用,而这个磁盘又恰好是拥有 2 个 VGDA 的那块,则整个 VG 就将不可用,这都是 Disk quorum 策略的限制。当然,您可以通过取消 Disk quorum 策略来避免这种情况的发生。
这种操作一般适用于以下情况:
拥有 2 块磁盘的 VG,并做了 LV 镜像。
拥有 3 块磁盘的 VG,并做了 1 次或 2 次 LV 镜像。
这样就可以保证在 VG 中的一块磁盘不可用的时候,整个 VG 还能够继续工作。
具体使用的命令是 chvg:
chvg -Qn vgname
这里 -Qn 是指将 quorum 设置为 n,也就是取消Disk quorum,当然想恢复这个功能的话可以使用 –Qy 。 vgname 指的就是目标 VG 名称。
赞助商链接