storage-resize
Linux 磁盘扩容技能(RPM 包管理系统),实现云盘扩容后自动完成分区调整和文件系统扩容。支持系统盘/数据盘在线扩容,适配 XFS/EXT4/Btrfs 文件系统。适用于 RPM 包管理的 Linux 系统(如 Alibaba Cloud Linux)。
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-12
- Stars
- ★ 662
- Forks
- 193
01 前言 Front Matter
- name
- storage-resize
- layer
- system
- version
- 1.0.0
- lifecycle
- operations
- description
- Linux 磁盘扩容技能(RPM 包管理系统),实现云盘扩容后自动完成分区调整和文件系统扩容。支持系统盘/数据盘在线扩容,适配 XFS/EXT4/Btrfs 文件系统。适用于 RPM 包管理的 Linux 系统(如 Alibaba Cloud Linux)。
- dependencies
- [ "aliyun-ecs" ]
02 资源文件 2
- 参考文档examples.md8.6 KB
- 参考文档reference.md10.4 KB
03 SKILL.md 正文
Storage resize - 磁盘扩容
核心定位
两阶段磁盘扩容流程:
- 云平台阶段:使用
aliyun-ecsskill 完成云盘扩容 - 操作系统阶段:执行分区调整和文件系统扩容
重要约束:
- ☁️ 阿里云云盘仅支持扩容,不支持缩容
- ? 支持系统盘和数据盘两种场景
- ⚡ 在线扩容:云盘扩容后无需重启实例,通过 NVMe 重新扫描即可识别(NVMe 设备)
前置要求
1. 依赖技能
本技能依赖 aliyun-ecs skill 进行云平台操作:
- 查询磁盘信息 (
DescribeDisks) - 执行磁盘扩容 (
ResizeDisk) - 查询实例信息 (
DescribeInstances)
2. 工具安装
# 检查并安装必要工具
yum install -y cloud-utils-growpart xfsprogs e2fsprogs btrfs-progs
# 验证工具已安装
which growpart xfs_growfs resize2fs
3. 权限要求
- 阿里云 CLI 认证:需配置
aliyun configure(优先使用 EcsRamRole) - 系统权限:需要 root 权限执行分区和文件系统操作
快速开始
一键扩容流程
# 1. 确认设备名称和文件系统类型
lsblk -f /dev/nvme0n1
# 2. 云平台扩容(使用 aliyun-ecs skill)
# aliyun ecs ResizeDisk --DiskId <disk-id> --NewSize <new-size> --RegionId <region>
# 3. NVMe 设备重新扫描(让 OS 识别新容量)
echo 1 > /sys/block/nvme0n1/device/rescan_controller
# 4. 确认新容量已识别
lsblk /dev/nvme0n1
# 5. 扩容分区
growpart /dev/nvme0n1 3
# 6. 扩容文件系统(根据类型选择命令)
xfs_growfs / # XFS(使用挂载点)
resize2fs /dev/nvme0n1p3 # EXT4(使用设备路径)
# 7. 验证
df -h /
文件系统支持
| 文件系统 | 扩容命令 | 参数类型 | 备注 |
|---|---|---|---|
| XFS | xfs_growfs /mountpoint |
挂载点 | Alinux4 默认文件系统 |
| EXT4 | resize2fs /dev/vdb1 |
设备路径 | 支持在线扩容 |
| Btrfs | btrfs filesystem resize max /mountpoint |
挂载点 | 需要 btrfs-progs |
文件系统类型检测
# 方法 1: 使用 df
df -T /
# 方法 2: 使用 lsblk
lsblk -f /dev/nvme0n1p3
# 方法 3: 使用 mount
mount | grep "on / "
完整流程
步骤 1: 云平台扩容(使用 aliyun-ecs skill)
# 获取实例 ID 和地域(ECS 实例内)
INSTANCE_ID=$(curl -s http://100.100.100.200/latest/meta-data/instance-id)
REGION_ID=$(curl -s http://100.100.100.200/latest/meta-data/region-id)
# 查询系统盘信息
aliyun ecs DescribeDisks \
--RegionId $REGION_ID \
--InstanceId $INSTANCE_ID \
--DiskType system
# 执行扩容(例如:40GB → 90GB)
aliyun ecs ResizeDisk \
--DiskId d-bp1234567890abcdef \
--NewSize 90 \
--RegionId $REGION_ID
步骤 2: 操作系统内扩容
# 2.1 识别设备类型
lsblk
# 2.2 NVMe 设备重新扫描(关键步骤!)
# 云盘扩容后,NVMe 设备需要重新扫描控制器才能识别新容量
echo 1 > /sys/block/nvme0n1/device/rescan_controller
# 2.3 验证新容量已识别
lsblk /dev/nvme0n1
# 2.4 扩容分区
growpart /dev/nvme0n1 3
# 2.5 扩容文件系统
# 先确认文件系统类型
FS_TYPE=$(df -T / | tail -1 | awk '{print $2}')
if [ "$FS_TYPE" = "xfs" ]; then
xfs_growfs /
elif [ "$FS_TYPE" = "ext4" ]; then
resize2fs /dev/nvme0n1p3
elif [ "$FS_TYPE" = "btrfs" ]; then
btrfs filesystem resize max /
fi
# 2.6 验证结果
df -h /
lsblk /dev/nvme0n1
设备类型识别
| 设备类型 | 示例 | 重新扫描方法 |
|---|---|---|
| NVMe | /dev/nvme0n1 |
echo 1 > /sys/block/nvme0n1/device/rescan_controller |
| VirtIO | /dev/vda |
blockdev --rereadpt /dev/vda |
| SATA | /dev/sda |
blockdev --rereadpt /dev/sda |
自动识别脚本
DEVICE="/dev/nvme0n1"
if [[ "$DEVICE" == /dev/nvme* ]]; then
# NVMe 设备
echo 1 > /sys/block/$(basename $DEVICE)/device/rescan_controller
elif [[ "$DEVICE" == /dev/vd* ]] || [[ "$DEVICE" == /dev/sd* ]]; then
# VirtIO 或 SATA 设备
blockdev --rereadpt $DEVICE
fi
故障排查
问题 1: 未找到 growpart 命令
# 安装工具包
yum install -y cloud-utils-growpart
问题 2: 云盘扩容后 OS 未识别新容量
# NVMe 设备:重新扫描控制器
echo 1 > /sys/block/nvme0n1/device/rescan_controller
# 验证
lsblk /dev/nvme0n1
问题 3: xfs_growfs 报错 "not mounted"
# XFS 必须使用挂载点,不能使用设备路径
xfs_growfs /data # ✓ 正确
xfs_growfs /dev/vdb1 # ✗ 错误
# 确认挂载点
mount | grep vdb
问题 4: resize2fs 报错 "Device busy"
# EXT4 支持在线扩容,确保设备已挂载
# 如果未挂载,先挂载再扩容
mount /dev/vdb1 /data
resize2fs /dev/vdb1
问题 5: 扩容后容量未变化
# 逐步检查
lsblk /dev/nvme0n1 # 检查云盘容量(应显示新容量)
lsblk /dev/nvme0n1p3 # 检查分区容量(应显示新容量)
df -h / # 检查文件系统容量(应显示新容量)
# 根据结果定位问题所在步骤
问题 6: blockdev --rereadpt 报错 "Device or resource busy"
# 这是正常现象,当设备已挂载时无法重新读取分区表
# NVMe 设备使用 rescan_controller 方法
echo 1 > /sys/block/nvme0n1/device/rescan_controller
# 如果仍然无效,可能需要重启实例
最佳实践
1. 扩容前备份
# 创建快照备份
aliyun ecs CreateSnapshot \
--DiskId d-bp1234567890abcdef \
--SnapshotName "pre-resize-backup-$(date +%Y%m%d)"
2. 在线扩容流程
# 1. 云平台扩容
aliyun ecs ResizeDisk --DiskId <disk-id> --NewSize <new-size> --RegionId <region>
# 2. 等待云平台生效
sleep 10
# 3. 验证云平台扩容完成
aliyun ecs DescribeDisks --RegionId <region> --DiskIds "[\"<disk-id>\"]"
# 4. OS 内重新扫描
echo 1 > /sys/block/nvme0n1/device/rescan_controller
# 5. 扩容分区和文件系统
growpart /dev/nvme0n1 3
resize2fs /dev/nvme0n1p3 # 或 xfs_growfs /
3. 自动化脚本
#!/bin/bash
# auto-expand-disk.sh
set -e
DEVICE=$1
PARTITION=$2
NEW_SIZE=$3
# 自动检测文件系统类型
FS_TYPE=$(lsblk -f /dev/${DEVICE}${PARTITION} --noheadings --output FSTYPE | tr -d ' ')
# 扩容分区
growpart /dev/$DEVICE $PARTITION
# 扩容文件系统
if [ "$FS_TYPE" = "xfs" ]; then
MOUNTPOINT=$(df /dev/${DEVICE}${PARTITION} | tail -1 | awk '{print $6}')
xfs_growfs $MOUNTPOINT
elif [ "$FS_TYPE" = "ext4" ]; then
resize2fs /dev/${DEVICE}${PARTITION}
fi
echo "✅ 扩容完成!"
df -h /
扩展资源
- 详细示例: 参见 examples.md
- 技术参考: 参见 reference.md
- 依赖技能: aliyun-ecs
适用版本: Alinux4
最后更新: 2026-03-19
依赖技能: aliyun-ecs
04 同仓库更多 Skills
ws-ckpt
Linux 工作区快照(ws-ckpt)。用户想保存或备份工作区当前状态("保存一下"、"留个底"、"先备份"), 想撤销或恢复文件改动("回滚"、"撤销"、"改回去"、"恢复到之前"、"刚才那版"), 想查看、对比或删除历史版本,或要开启/关闭每回合自动快照、定时快照、快照保留策略时使用。 用户没提"快照"、只表达保存或恢复工作区文件的意图时同样适用;用户点名 git 操作(commit、branch、reset 到某提交)时不适用。
skillfs-mount
Help users configure, mount, and unmount a skillfs FUSE virtual filesystem on their local machine (e.g. for openclaw). Covers analyzing existing skill usage to suggest view configuration, generating skillfs-views.toml, mounting, and graceful unmount. Use this skill when the user asks to: set up skillfs, configure skill views, mount or unmount skillfs, check if skillfs is running, or get help organizing their skills directory (especially for openclaw users).
test-skill
A test skill used in integration tests.
upgrade-alinux-kernel
Alibaba Cloud Linux (Alinux) 升级Linux操作系统内核。当用户需要升级、更新或变更ECS Linux实例的内核版本时使用。
shell-scripting
Use this skill when writing bash or zsh scripts, parsing arguments, handling errors, or automating CLI workflows. Triggers on bash scripting, shell scripts, argument parsing, process substitution, here documents, signal trapping, exit codes, and any task requiring portable shell script development.
regex-mastery
Use this skill when writing regular expressions, debugging pattern matching,optimizing regex performance, or implementing text validation. Triggers on regex, regular expressions, pattern matching, lookahead, lookbehind, named groups, capture groups, backreferences, and any task requiring text pattern matching.