调整原始 QEMU 映像大小时,fdisk 挂在“正在同步磁盘”上

调整原始 QEMU 映像大小时,fdisk 挂在“正在同步磁盘”上

我正在使用 fdisk 调整原始 QEMU 映像上的分区大小。当我写入新的分区表时,它挂在“正在同步磁盘”处。

请注意,我以非 root 身份运行 fdisk,因为我不需要 root 来编辑映像文件。

什么会导致“正在同步磁盘”这样挂起?

答案1

打印“正在同步磁盘”消息后,fdisk 调用sync(2) 系统调用,这会导致对文件元数据和数据的所有缓冲修改写入底层文件系统。预计此操作可能需要一些时间,但不应永远挂起。如果是这样,您可能会看到它挂在 /proc/FDISK_PID/stack 中的内核中的哪个函数中。

问题是为什么 fdisk 在处理图像文件(不是真实设备)时调用sync()。恕我直言,不需要它。

答案2

可能的解决方法:
我遇到了同样的问题,解决方法是使用sfdisk而不是fdisk.您会发现使用 sfdisk 可以做 fdisk 能做的任何事情。

例如,不要这样做:

  fdisk $image <<FDISK
p
d
$partition
n
p
$partition
$start
p
w
FDISK

我做了:

echo ",+," | sfdisk -N2 $image

突然就没有同步问题了。

相关内容