有时,在调整磁盘大小或者对磁盘分区进行其他操作时,cfdisk 会显示:
Wrote partition table, but re-read table failed. Reboot to update table.
(其他分区工具也会发生这种情况,所以我认为这是 Linux 的问题,而不是 cfdisk 的问题。)为什么会这样,为什么只会发生有时,我该如何避免这种情况?
注意:请假设我实际编辑的分区均未被打开、安装或以其他方式使用。
更新:
cfdisk 用于ioctl(fd, BLKRRPART, NULL)
告诉 Linux 重新读取分区表。到目前为止推荐的其他两个工具(hdparm -z
DEVICE
,sfdisk -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
注意:请假设我实际编辑的分区均未被打开、安装或以其他方式使用。
基于该假设,分区表能成功重新扫描,问题就不会出现。如果你收到该错误,那是因为分区表是目前正在使用中,因此无法重新扫描,否则会造成不一致。