Debian partprode 命令
partprobe 是一个用于通知操作系统内核重新读取磁盘分区表的命令行工具。它的名字来源于 “partition”(分区)和 “probe”(探测)。
为什么需要它?—— 核心原因
当你使用 fdisk, sfdisk, gdisk, parted 等工具修改了磁盘的分区表后(例如创建或删除了一个分区),这个更改首先只是写在了磁盘本身的分区表区域。
然而,操作系统内核在启动时已经将旧的分区表信息读入了内存。如果内核不重新读取磁盘,它就不会知道分区已经发生了变化。
这时就会遇到一个问题:你虽然创建了新的分区(比如 /dev/sdb1),但系统里可能看不到这个设备文件,或者你试图格式化它时系统会报错。
partprobe 的作用就是强制内核立即更新其内存中的分区信息,而无需重启整个系统。
与 sfdisk 等工具的关系
现代版本的 sfdisk、parted 在成功完成分区操作后,通常会自动尝试调用 partprobe 或类似的机制来通知内核。但这并不总是 100% 可靠,尤其是在脚本中或者某些特定情况下(例如设备正被繁忙使用时)。
因此,手动运行 partprobe 是一个确保万无一失的好习惯。
语法和常用用法
基本语法:
1 |
partprobe [选项] [设备...] |
常用用法示例:
-
通知内核重新读取所有磁盘的分区表
这是最常用的方式,让 partprobe 自己检测所有需要更新的磁盘。1partprobe
-
通知内核重新读取指定磁盘的分区表
如果你只修改了某一块磁盘(例如 /dev/sdb),可以指定设备名。1partprobe /dev/sdb -
显示详细信息(冗长模式)
使用 -s 选项可以让 partprobe 显示它正在做什么,方便调试。123partprobe -s# 输出示例:/dev/sdb: gpt partitions 1 2 3# 这表示它更新了 /dev/sdb,该磁盘有一个 GPT 分区表,内核现在能识别第 1, 2, 3 号分区。
替代方案和注意事项
-
重启系统:重启电脑是肯定能让内核重新读取所有分区表的方法,但这显然太麻烦了。
-
blockdev 命令:blockdev –rereadpt /dev/sdb 这个命令的作用与 partprobe /dev/sdb 非常相似,也是强制内核重新读取指定设备的分区表。
-
危险情况:如果某个分区正在被使用(例如已经被挂载),内核可能会拒绝重新读取分区表,这是出于安全考虑,防止数据损坏。在这种情况下,你应该先卸载相关分区。
一个典型的工作流程
假设你有一块新磁盘 /dev/sdb,想要分区并格式化:
-
使用 sfdisk 分区:
1echo -e ",512M,83\n,,83" | sfdisk /dev/sdb
-
(关键步骤) 让内核识别新分区:
即使 sfdisk 可能已经尝试过,手动执行一下更保险。1partprobe /dev/sdb -
检查分区是否可见:
12345ls /dev/sdb*# 现在你应该能看到 /dev/sdb1 和 /dev/sdb2 了lsblk# 使用 lsblk 命令也能清楚地看到新创建的分区 -
格式化新分区:
12mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 -
挂载并使用:
1mount /dev/sdb1 /mnt/data
总结
命令 | 作用对象 | 主要功能 |
sfdisk | 磁盘的分区表 | 修改分区表(创建、删除等) |
partprobe | 操作系统内核 | 通知内核分区表已更改,请重新读取并更新内存中的信息 |
简单来说:
-
sfdisk 是“写”磁盘的。
-
partprobe 是“通知”系统的。
所以,在你用 sfdisk 改变了磁盘的“书籍目录”(分区表)后,记得用 partprobe 这个“广播”告诉系统的“图书管理员”(内核):“目录更新了,需要刷新!”。