partprobe 是一个用于通知操作系统内核重新读取磁盘分区表的命令行工具。它的名字来源于 “partition”(分区)和 “probe”(探测)。

为什么需要它?—— 核心原因

当你使用 fdisk, sfdisk, gdisk, parted 等工具修改了磁盘的分区表后(例如创建或删除了一个分区),这个更改首先只是写在了磁盘本身的分区表区域。

然而,操作系统内核在启动时已经将旧的分区表信息读入了内存。如果内核不重新读取磁盘,它就不会知道分区已经发生了变化。

这时就会遇到一个问题:你虽然创建了新的分区(比如 /dev/sdb1),但系统里可能看不到这个设备文件,或者你试图格式化它时系统会报错。

partprobe 的作用就是强制内核立即更新其内存中的分区信息,而无需重启整个系统。


sfdisk 等工具的关系

现代版本的 sfdisk、parted 在成功完成分区操作后,通常会自动尝试调用 partprobe 或类似的机制来通知内核。但这并不总是 100% 可靠,尤其是在脚本中或者某些特定情况下(例如设备正被繁忙使用时)。

因此,手动运行 partprobe 是一个确保万无一失的好习惯


语法和常用用法

基本语法:

常用用法示例:

  1. 通知内核重新读取所有磁盘的分区表
    这是最常用的方式,让 partprobe 自己检测所有需要更新的磁盘。

  • 通知内核重新读取指定磁盘的分区表
    如果你只修改了某一块磁盘(例如 /dev/sdb),可以指定设备名。

  • 显示详细信息(冗长模式)
    使用 -s 选项可以让 partprobe 显示它正在做什么,方便调试。

替代方案和注意事项

  • 重启系统:重启电脑是肯定能让内核重新读取所有分区表的方法,但这显然太麻烦了。

  • blockdev 命令:blockdev –rereadpt /dev/sdb 这个命令的作用与 partprobe /dev/sdb 非常相似,也是强制内核重新读取指定设备的分区表。

  • 危险情况:如果某个分区正在被使用(例如已经被挂载),内核可能会拒绝重新读取分区表,这是出于安全考虑,防止数据损坏。在这种情况下,你应该先卸载相关分区。

一个典型的工作流程

假设你有一块新磁盘 /dev/sdb,想要分区并格式化:

  1. 使用 sfdisk 分区

  • (关键步骤) 让内核识别新分区
    即使 sfdisk 可能已经尝试过,手动执行一下更保险。

  • 检查分区是否可见

  • 格式化新分区

  • 挂载并使用

总结

命令 作用对象 主要功能
sfdisk 磁盘的分区表 修改分区表(创建、删除等)
partprobe 操作系统内核 通知内核分区表已更改,请重新读取并更新内存中的信息

简单来说:

  • sfdisk 是“写”磁盘的。

  • partprobe 是“通知”系统的。

所以,在你用 sfdisk 改变了磁盘的“书籍目录”(分区表)后,记得用 partprobe 这个“广播”告诉系统的“图书管理员”(内核):“目录更新了,需要刷新!”。