我正在使用 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
突然就没有同步问题了。