ループデバイスからパーティションデバイスを削除するにはどうすればいいですか?

ループデバイスからパーティションデバイスを削除するにはどうすればいいですか?

ディスク イメージをループ デバイス経由でマウントします (losetup -f image.img)。これにはパーティション テーブルが含まれており、カーネルにそれを強制的に読み取らせます: partprobe /dev/loop1。

/dev/loop1p1 をマウントし、修正したい部分を修正し、ファイルシステムをアンマウントします。ループバック デバイスからファイルを削除します (losetup -d /dev/loop1)。しかし、/dev/loop1p1 は消えません。

lodevice を再作成したり、fdisk 経由でパーティション テーブルを追加および削除したりしてみましたが、すべての試みは失敗しました。

パーティション テーブルが変更されました。

ioctl() を呼び出してパーティション テーブルを再読み取りします。

警告: パーティション テーブルの再読み取りがエラー 22 で失敗しました: 引数が無効です。カーネルは古いテーブルをまだ使用しています。新しいテーブルは、次回の再起動時、または partprobe(8) または kpartx(8) を実行してディスクを同期した後に使用されます。

パーティションはまったく使用されていないのですが、解放できません。再起動せずに削除する方法はありますか?

dmesg にはいくつかのレコードが表示されます:

[4649002.505727] loop1: rw=0、want=211812300、limit=62914560 [4649002.505753] デバイス loop1p1、論理ブロック 52952562 でバッファ I/O エラーが発生しています [4649002.505870] デバイスの末尾を超えてアクセスしようとしています

そして彼らは私のナギオスをうるさく言っています。

答え1

再起動するとカーネルが修正されるはずです。次回からは、losetupと をpartprobe手動で実行する代わりに、以下を使用しますkpartx

kpartx -v -a image.img

そしてそれを破壊するために:

kpartx -d image.img

関連情報