难题:缩小物理卷
IBM AIX LVM 提供了若干特性,可以使您在不宕机的情况下回收未利用的磁盘空间。您可以使用 chfs 缩小文件系统,并从卷组 (VG) 中移除未使用的物理卷 (PV),从而将存储空间分配到其他位置。
然而,如果希望缩小 AIX PV 来收回未使用的磁盘空间,您将会对 PV 造成破坏。如果有一个大的 SAN LUN,其中包含大量未使用的物理分区 (PP),您可以备份数据、减小 LUN,并将数据恢复到较小的 PV 中。然而,这将造成系统宕机,这是不可接受的。在完成数据清理后,如果某个大型 LUN 需要回收一些空间,它应当尽可能地实现无缝操作。
解决方案:迁移到一个较小的新物理卷
您可能无法缩小正在使用中的 PV 的大小,但是您可以创建一个较小的新 SAN LUN,并将它添加到现有 VG,然后将数据从较大的 PV 迁移到较小的 PV。完成这些操作后,原来那些较大的 PV 就可以从 VG 中移除。此后,可以通过 rmdev 将 hdisk 从 Object Data Manager (ODM) 中移出。然后,您可以重新将 SAN 存储用于其他用途。
该过程要求新的 PV 具有合适的大小和特征,从而能够添加到现有 VG。它必须有足够大来存放原始 PV(正在使用的 PP)中的所有数据。该过程还假设没有发生任何逻辑卷 (LV) 划分,因为这将限制使用 mklvcopy 运行逻辑卷镜像的能力。
对于本例,提供了一个具有 50 GB PV 的 VG,名称为 datavg。lspv 命令显示了 PV 及空闲和使用中 PP 的总大小(参见 清单 1)。
清单 1. 显示物理卷特征:
- # lspv hdisk1
- PHYSICAL VOLUME: hdisk1 VOLUME GROUP: datavg
- PV IDENTIFIER: 00cb07a45a12b4ca VG IDENTIFIER 00cb07a400004c00000001345a26db3e
- PV STATE: active
- STALE PARTITIONS: 0 ALLOCATABLE: yes
- PP SIZE: 512 megabyte(s) LOGICAL VOLUMES: 1
- TOTAL PPs: 99 (50688 megabytes) VG DESCRIPTORS: 2
- FREE PPs: 0 (0 megabytes) HOT SPARE: no
- USED PPs: 99 (50688 megabytes) MAX REQUEST: 256 kilobytes
- FREE DISTRIBUTION: 00..00..00..00..00
- USED DISTRIBUTION: 20..20..19..20..20
- MIRROR POOL: None
这里有一个增强的 journaled 文件系统 (JFS2),称为 /scratch,它分配有 49.50 GB 空间,其中有超过 35 GB 的空闲空间。该文件系统创建时使用的是 INLINE JFS2 日志:
缩小文件系统
由于文件系统正在使用的空间不足其所分配空间的三分之一,因此可以缩小它的总磁盘分配。您可以通过 chfs 缩小文件系统的大小。下面的命令可以将其大小减小 30 GB。
- # chfs -a size=-30G /scratch
- Filesystem size changed to 40894464
- Inlinelog size changed to 78 MB.
文件系统的总磁盘分配已经减少到 19.50 GB:
- # df -gI /scratch
- Filesystem GB blocks Used Free %Used Mounted on
- /dev/scratchlv 19.50 14.08 5.42 73% /scratch
该过程在 PV 上释放了一些 PP,如 清单 2 中的 lspv 命令所示。
清单 2. lspv 显示空闲的物理分区
- # lspv hdisk1
- PHYSICAL VOLUME: hdisk1 VOLUME GROUP: datavg
- PV IDENTIFIER: 00cb07a45a12b4ca VG IDENTIFIER 00cb07a400004c00000001345a26db3e
- PV STATE: active
- STALE PARTITIONS: 0 ALLOCATABLE: yes
- PP SIZE: 512 megabyte(s) LOGICAL VOLUMES: 1
- TOTAL PPs: 99 (50688 megabytes) VG DESCRIPTORS: 2
- FREE PPs: 60 (30720 megabytes) HOT SPARE: no
- USED PPs: 39 (19968 megabytes) MAX REQUEST: 256 kilobytes
- FREE DISTRIBUTION: 00..01..19..20..20
- USED DISTRIBUTION: 20..19..00..00..00
- MIRROR POOL: None
向卷组添加一个更小的物理卷
下一步是向现有 VG 添加一个较小的新 PV。该 PV 应当至少具有与原始较大 PV 相同的冗余和输入/输出 (I/O) 性能。例如,它应当是一个同等的独立磁盘冗余阵列 (RAID)。还应当设置任何其他调优特性(如队列深度)以确保系统性能与原始较大 PV 相匹配。
创建一个新的 LUN,将其分配给 AIX 逻辑分区 (LPAR)。在本例中,新的 LUN 为 20 GB:
- # cfgmgr
lspv 命令的输出显示,新磁盘名为 hdisk2(参见 清单 3),并且它不属于某个 VG。
清单 3. 列出新的磁盘
- # lspv
- hdisk0 00c5a47e3f356f3c rootvg active
- hdisk1 00cb07a45a12b4ca datavg active
- hdisk2 none None
您可以使用 getconf 命令在磁盘添加到 VG 之前查看它的大小。以 MB 为单位显示磁盘大小:
- # getconf DISK_SIZE /dev/hdisk2
- 20480
使用 extendvg 命令将磁盘添加到现有 VG:
- # extendvg datavg hdisk2
- 0516-1254 extendvg: Changing the PVID in the ODM.
将逻辑分区镜像或迁移到新的物理卷
您可以将 LV 镜像到新 PV,在两个 PV 之间同步所有 PP 后即可将副本从原始 PV 中移除。
- mklvcopy -k scratchlv 2
mklvcopy 还提供了其他选项。例如,您可以将同步推迟到一个更安静的时间。您还可以指定磁盘分配策略。mklvcopy 的官方文档提供了必要的细节(请参阅 参考资料)。
从原始物理卷中移除副本
完成同步后,您可以使用 rmlvcopy 从原始 PV 中移除副本。一定要指定其中包含您希望移除的副本 PV。
- rmlvcopy scratchlv 1 hdisk1
您可以使用 lspv 命令确认原始 PV 中没有正在使用的 PP。如果还有一些 PP 正在使用,那么可以使用 lspv -l PVNAME 列出 PV 上的 LV。当确定所有 PP 都转移到其他 PV 中后,可以使用 reducevg 将原始 PV 从 VG 中移除:
- reducevg datavg hdisk1
您应当能够使用 rmdev 从 ODM 中移除 PV:
- rmdev -d -l hdisk1
***,您可以移除 LUN 或将它分配给其他用途。
避免宕机
可以看到,LVM 特性允许您在不对用户产生影响的情况下移动数据,甚至移动到更小的磁盘。通过利用 LVM 镜像和迁移功能,您可以保持系统运行并恢复珍贵的存储空间(如果过度分配的话)。