腾讯云 CVM 上 Ubuntu 22.04,用 fdisk 给 /dev/vdb 加了一个分区,partprobe 没有任何输出,lsblk 里能看见 vdb3,/dev/vdb3 这个节点却不存在,mkfs 报 No such file or directory。
一开始怀疑是「分区表是 GPT,重新读表要用 BLKRRPART,普通用户执行权限不够」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。内核里的分区表还是旧的,partprobe 在设备被占用时只会安静地失败。还有一种是设备节点由 udev 生成,udev 没收到变更事件就不会去建节点。
还有一种情况,云盘支持在线扩容但不支持在线改分区表,得先触发一次总线重扫。
上来先确认内核眼里的分区情况
lsblk -f /dev/vdb && cat /proc/partitions | grep vdb
然后让内核重新读一次分区表
blockdev --rereadpt /dev/vdb
补一次 udev 事件把节点建出来
udevadm trigger --subsystem-match=block && udevadm settle
还有占用就先解挂再重读
partx -u /dev/vdb && ls -l /dev/vdb*
恢复的判定其实很直接。ls /dev/vdb* 能看到新分区节点,lsblk 里的 PARTUUID 与 fdisk -l 一致,mkfs.xfs 可以正常执行。
这里还有个坑。刷新失败最常见的原因是该盘上还有挂载点,先 umount 再操作;节点不生成时看 udevadm monitor 的输出,比反复敲 partprobe 有用得多。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
