partx可在不解挂文件系统时强制内核刷新分区表,因其仅通过ioctl向内核提交分区表解析结果,不依赖设备空闲,也不影响已挂载文件系统;需确保磁盘分区表已真实写入,推荐用partx -u /dev/sdb更新,失败时可partx -d && partx -a组合操作。

在不解挂文件系统的情况下,用 partx 强制让内核刷新分区表,核心是「不依赖设备是否被占用」,而是直接操作内核的分区缓存。关键在于:partx 不要求设备空闲,它只向内核提交分区表解析结果,不涉及读写数据或挂载状态。
先确认分区表已真实写入磁盘
partx 本身不修改磁盘,只通知内核“请按当前磁盘上的分区表重新登记”。所以必须确保 fdisk、parted 等工具已完成写入(即执行了 w 或 quit 并成功退出),否则 partx 读到的仍是旧数据。
- 运行
fdisk -l /dev/sdb或parted /dev/sdb print,确认新分区已显示 - 检查
/proc/partitions中是否已有新分区条目(如sdb1)——若没有,说明磁盘未真正写入或内核尚未感知
用 partx -u 或 -a 触发强制重读
-u(update)是最稳妥的选择,它会尝试智能识别变化并更新,比 -a 更容错;-a 要求分区信息完全未登记,已在内核中存在时会报错。
- 刷新整个磁盘的分区信息:
sudo partx -u /dev/sdb - 若 -u 报错(如 “Device or resource busy”),可先清空再加载:
sudo partx -d /dev/sdb && sudo partx -a /dev/sdb - 验证结果:
partx -l /dev/sdb查看列表,ls /dev/sdb*确认节点是否生成(如/dev/sdb1)
为什么能绕过“设备忙”的限制
partx 工作在内核块设备层之上,它不打开设备文件进行 I/O,而是通过 ioctl(BLKRRPART 类似机制)请求内核重新解析磁盘开头的分区扇区。因此:
- 即使
/dev/sdb1正在被 mount 或 LVM 使用,partx 仍可执行 - 它不影响已挂载的文件系统——不会导致 umount、数据丢失或 IO 中断
- 但注意:若正在调整的分区就是当前根分区或正在使用的 swap,操作有风险,应避免
对比 partprobe 的差异
partprobe 本质也是发 BLKRRPART,但部分内核版本或虚拟化环境(如某些 KVM 镜像)对其响应不稳定;partx 更底层、更可控:
- partprobe 是“全盘重读”,无法指定范围
- partx 支持
--nr M-N只刷新特定分区号,适合精细操作 - 遇到
Device or resource busy时,partx 的-d && -a组合往往比反复跑 partprobe 更有效

















