CentOS 上扩展 Informix 存储的可行路径
- 方式一:先扩展操作系统磁盘(LVM 或云盘),再让 Informix 自动或手动把空间加进数据库空间(dbspace/sbspace)。适合已有 LVM、云盘或虚拟磁盘扩容场景。
- 方式二:不改动 OS 分区,直接把新磁盘做成裸设备或普通文件,作为新 chunk 加入 Informix(适合无法调整现有分区或需快速上线新空间)。
- 方式三:启用或优化 Informix 的自动空间管理(Storage Pool + SP_AUTOEXPAND),让服务器在需要时自动加 chunk/扩 chunk,减少人工介入。
前置检查与准备
- 识别新增空间:在虚拟机或物理机扩容后,先让系统识别新容量。
- 扫描 SCSI:for host in /sys/class/scsi_host/host*/; do echo “- - -” > “$host/scan”; done
- 更新分区表:partprobe
- 查看设备:lsblk、fdisk -l
- 确认文件系统类型:df -Th(常见为 XFS/EXT4)。
- 检查 Informix 当前空间与 chunk:
- 数据库空间与 chunk:onstat -d
- 临时空间配置:onstat -c | grep DBSPACETEMP
- 备份与维护窗口:全量备份(如 ontape -s)、设置维护模式或确保业务低峰操作。
- 权限与路径:确保 informix 用户对目标目录/设备有读写权限。
方案一 LVM 或云盘扩容后扩展到 Informix
- 场景 A:新增一块磁盘到现有卷组(推荐,灵活)
- 初始化并加入卷组:
- pvcreate /dev/sdb
- vgextend <VG名> /dev/sdb
- 扩展逻辑卷(LV):
- lvextend -l +100%FREE /dev/<VG名>/<LV名>
- 扩展文件系统(使 OS 层可见):
- XFS:xfs_growfs <挂载点>
- EXT4:resize2fs <LV设备>
- 让 Informix 使用新增空间:
- 自动:确保启用自动扩展(见下一节),按需触发自动加 chunk/扩 chunk。
- 手动:在 onstat -d 找到需要扩展的 dbspace,使用 SQL 管理 API 增加 chunk 或扩展 chunk(见下一节命令示例)。
- 场景 B:现有磁盘容量变大(如云盘在线扩容后)
- 扩展分区(保持起始扇区不变,仅扩大结束扇区):
- growpart /dev/xvda 1(示例为第 1 分区)
- 扩展 PV(若分区是 LVM PV):pvresize /dev/xvda1
- 扩展 LV 与文件系统(同场景 A 步骤 2–3)。
- Informix 侧扩展空间(自动或手动,见下一节)。
方案二 新增磁盘作为新 Chunk 直接加入 Informix
- 裸设备方式(性能更好,需内核支持并关闭 SELinux 或正确打标签):
- 分区并赋权:
- parted /dev/sdc mklabel gpt mkpart infxchunk1 1G 100%
- chown informix:informix /dev/sdc1
- 在 Informix 中增加 chunk(SQL 管理 API):
- 增加 dbspace 的 chunk:execute function admin(‘add chunk to dbspace’, ‘<dbspace_name>’, ‘/dev/sdc1’, ‘0’, ‘<size_in_KB>’);
- 增加 sbspace/blobspace 的 chunk:execute function admin(‘add chunk to sbspace’, ‘<sbspace_name>’, ‘/dev/sdc1’, ‘0’, ‘<size_in_KB>’);
- 普通文件方式(部署快速,性能略低):
- 创建数据文件并赋权:
- truncate -s G /u02/informix/chunkfile01
- chown informix:informix /u02/informix/chunkfile01
- 在 Informix 中增加 chunk(与上同,仅路径指向文件)。
- 验证:onstat -d 应能看到新 chunk 及其大小、空闲页。
方式三 启用或优化 Informix 自动空间管理
- 启用与配置要点:
- 创建/维护 storage pool(可包含裸设备、普通文件、目录),供服务器自动或手动扩展空间使用。
- 标记 chunk 为可扩展(extendable)。
- 可调整创建/扩展的 chunk 大小、自动扩容阈值与等待时间、低空间监控任务频率。
- 参数 SP_AUTOEXPAND 默认为 1(开启自动扩展);设为 0 则关闭自动创建/扩展 chunk。
- 常用 SQL 管理 API 示例(以 sysadmin 身份执行):
- 创建 storage pool 条目:
- execute function admin(‘create storage pool entry’, ‘/dev/sdc1’, ‘raw’, ‘<size_in_KB>’);
- execute function admin(‘create storage pool entry’, ‘/u02/informix’, ‘cooked’, ‘<size_in_KB>’);
- 手动扩展 dbspace(立即加 chunk):
- execute function admin(‘expand dbspace’, ‘<dbspace_name>’, ‘<size_in_KB>’);
- 手动扩展 chunk(扩现有 chunk,适用于未镜像的 dbspace/临时 dbspace/plogspace):
- execute function admin(‘extend chunk’, ‘<chunk_path_or_number>’, ‘<additional_size_in_KB>’);
- 将空 dbspace 的空间归还 storage pool:
- execute function admin(‘return space to storage pool’, ‘<dbspace_name>’);
- 注意:若 DBSPACETEMP 中列出的临时 dbspace 未自动扩展,可能在排序/建索引时报空间不足,需手动为其增加 chunk 或使用更大的临时 dbspace。
验证与回退建议
- 验证:
- OS 层:df -h、lsblk(容量应已增加)。
- Informix 层:onstat -d(新 chunk 出现、空闲页增加)、onstat -m(告警消失)、业务写入/导入测试。
- 回退:
- 自动/手动扩展的 chunk 一般不可逆缩小;如需回收,可新建更小的 dbspace/sbspace 迁移数据后下线旧 chunk。
- 变更前务必有可用备份与回滚方案,变更中保持维护窗口与监控告警。