使用parted脚本化批量创建GPT均等分区,需先获取磁盘总大小(MiB)、计算单个分区大小,从1MiB起始循环执行mkpart命令,忽略对齐警告,预留尾部空间,并用partprobe同步内核。

在大型虚拟化宿主机(如 KVM/QEMU 或 VMware ESXi 管理的 Linux 宿主)上,用 parted 一键划分数十个完全均等的微型分区,关键在于**避免手动重复输入、规避对齐警告、确保 GPT 兼容性,并适配虚拟磁盘特性**。它不是真正“一键”,但可通过交互式脚本化 + 精确计算实现高效批量划分。
确认目标磁盘与基础参数
先用 lsblk -d -o NAME,SIZE,ROTA,MODEL 找出待分区的裸盘(如 /dev/vdb),排除系统盘和已挂载设备。注意:虚拟磁盘通常无旋转延迟(ROTA=0),适合最小对齐(-a minimal)。记录总大小(单位建议统一为 MiB):
- 运行
blockdev --getsize64 /dev/vdb获取字节数,再除以 1024² 得到 MiB 值(例如 2097152 MiB = 2 TiB) - 确定分区数量(如 32 个),则每个分区大小 = 总 MiB ÷ 数量(向下取整到最接近的 MiB,保留少量尾部空间防溢出)
- GPT 分区起始推荐从 1MiB 开始(避开 LBA0 和保护性 MBR 区域),结束位置按累加计算
用 parted 脚本模式批量创建均等分区
不进交互式,直接用命令链一次性完成分区表初始化与全部分区创建:
- 执行:
parted -s /dev/vdb mklabel gpt(清空并设 GPT) - 计算起始偏移(如 1MiB),然后循环生成
mkpart primary 1MiB 65536MiB类命令——但更稳妥的是用 shell 循环构造完整命令串:
示例(32 个均分分区,每份约 65535MiB):
DISK=/dev/vdb; TOTAL=$(expr $(blockdev --getsz $DISK) \* 512 / 1024 / 1024); PER=$((TOTAL / 32)); START=1; for i in $(seq 1 32); do END=$((START + PER - 1)); echo "mkpart primary ${START}MiB ${END}MiB"; START=$((END + 1)); done | parted -s $DISK该命令自动计算起止点、逐条提交,全程无交互、不报错中断(若某步失败会终止)。成功后 parted /dev/vdb print 可验证 32 个连续、等大的 primary 分区。
处理常见陷阱与优化项
虚拟环境中易被忽略但影响实际可用性的问题:
-
对齐警告必须忽略:GPT 下
mkpart若提示 “not properly aligned”,一律加ignore——虚拟磁盘扇区抽象层无需物理对齐,强制对齐反而浪费空间 -
不依赖 fs-type 参数:parted 的
mkpart primary ext4 ...仅做标记,实际格式化仍需后续mkfs.ext4 /dev/vdb1;建议分区时省略 fs-type,避免误导 -
立即通知内核:批量分区后执行
partprobe /dev/vdb或udevadm trigger --subsystem-match=block,确保/dev/vdb{1..32}设备节点即时生成 - 预留最后 1MiB 不分配:防止因四舍五入导致末尾越界,提升 GPT 表完整性校验通过率
后续自动化衔接(可选)
划分只是第一步。若需配套完成格式化与挂载,可追加:
- 用
for i in {1..32}; do mkfs.ext4 -q /dev/vdb$i; done快速格式化 - 生成
/etc/fstab条目:每行类似/dev/vdb1 /mnt/disk1 ext4 defaults,noatime 0 2 - 批量创建挂载点并 mount:
mkdir -p /mnt/disk{1..32} && mount -a

















