生の QEMU イメージのサイズを変更すると、fdisk は「ディスク同期」で中断されます。

生の QEMU イメージのサイズを変更すると、fdisk は「ディスク同期」で中断されます。

私は生のQEMUイメージのパーティションのサイズを変更するためにfdiskを使用しています。新しいパーティションテーブルに書き込むと、「ディスクの同期中」で停止します。

イメージファイルの編集にはrootが必要ないため、root以外のユーザーとしてfdiskを実行しています。

「ディスク同期」がこのように中断される原因は何ですか?

答え1

「ディスク同期中」メッセージを印刷した後、fdiskはsync(2)システムコールを呼び出して、ファイルメタデータとデータに対するバッファリングされたすべての変更をデフォルトのファイルシステムに書き込むことができます。この作業にはしばらく時間がかかると予想されますが、永遠に中断してはいけません。その場合は、/proc/FDISK_PID/stackでカーネルのどの関数がハングしているかを確認できます。

問題は、イメージファイル(実際のデバイスではない)を処理するときにfdiskがsync()を呼び出す理由です。 IMHO、必要ありません。

答え2

考えられる解決策:
私も同じ問題を抱えており、解決策はsfdisk代わりに使用することでしたfdisk。 fdiskがsfdiskでできることをすべてできることがわかります。

たとえば、次のようにしないでください。

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

私はそうしました:

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

突然同期の問題は発生しませんでした。

関連情報