无需重新启动即可重新读取分区表?

无需重新启动即可重新读取分区表?

有时,在调整磁盘大小或者对磁盘分区进行其他操作时,cfdi​​sk 会显示:

Wrote partition table, but re-read table failed. Reboot to update table.

(其他分区工具也会发生这种情况,所以我认为这是 Linux 的问题,而不是 cfdisk 的问题。)为什么会这样,为什么只会发生有时,我该如何避免这种情况?

注意:请假设我实际编辑的分区均未被打开、安装或以其他方式使用。


更新:

cfdisk 用于ioctl(fd, BLKRRPART, NULL)告诉 Linux 重新读取分区表。到目前为止推荐的其他两个工具(hdparm -z DEVICEsfdisk -R DEVICE)的作用完全相同。partprobe DEVICE另一方面,命令似乎使用名为 BLKPG 的新 ioctl,这可能更好;我不知道。(如果 BLKPG 失败,它也会回退到 BLKRRPART。)

BLKPG 似乎是一个“此分区已更改;这是新的大小”操作,它看起来像是partprobe在传递的设备上的所有分区上单独调用它,因此如果各个分区未使用,它应该可以工作。但是,我还没有机会尝试它。

答案1

我认为最可靠/最好的答案是

partprobe /dev/sdX

答案2

重新读取分区表信息并不总是有效,但可以尝试

hdparm -z /dev/sda

或者

sfdisk -R /dev/sda

如果它有效,/proc/partitions 中的值将会改变。

答案3

我(最初的提问者)几天前遇到过这种情况,当时其他答案(包括partprobe /dev/sdX,目前被接受且得票最高的答案)都不起作用。什么做过然而,工作是这样的:

blockdev --rereadpt /dev/sdX

(我不知道为什么这个有效而其他的无效,但我很高兴它有效,因为它让我免于在繁忙的服务器上重新启动。)

答案4

注意:请假设我实际编辑的分区均未被打开、安装或以其他方式使用。

基于该假设,分区表成功重新扫描,问题就不会出现。如果你收到该错误,那是因为分区表目前正在使用中,因此无法重新扫描,否则会造成不一致。

相关内容