cfdiskディスクイメージを回復する方法は?

cfdiskディスクイメージを回復する方法は?

私は巨大で複雑なアプリケーションを開発しています。ディスクを接続してボタンを押すと、ディスクを分割してフォーマットしてマウントし、いくつかのファイルをコピーします。

このアプリケーションをテストするために、ディスクイメージのマウントを繰り返して同じプロセスを実行するテストシステムがあります。アプリケーションロジックを変更したことを除いて、テストシステムは機能しません。プログラムを与えると本物ディスク、すべて大丈夫です。ただし、ループデバイスを提供すると失敗します。

特に、アプリケーションはディスクを分割してフォーマットしてからパーティションをマウントできないと文句を言います。正確な命令は

mount /dev/vda /mnt --rw -o offset=111149056,sizelimit=314572800

(ここでは/dev/vda単にシンボリックリンクです/dev/loop0。直接引用しても違いはありませんloop0。)

コマンドを手動で実行すると、次の結果が表示されます。

root# mount /dev/vda /mnt --rw -o offset=111149056,sizelimit=314572800
FUSE exfat 1.0.1
ERROR: exFAT file system is not found.
root# echo $?
1

このコマンドは引き続き実行できますが、機能しません。理由もなく、ただ理由もありません。

怖い部分は次のとおりです。実行しcfdisk /dev/vdaてから変更を適用せずにすぐに終了した場合今インストールされました!

何ですか地獄cfdiskディスクが突然動作し始めますか?このプログラムを呼び出す必要をなくすにはどうすればよいですか?

(私はそれを呼び出そうとしましたが、無駄になりました。sfdisk -R /dev/vda単に「間違った引数」のようなものについて文句を言いました。)

電話をかけたり、他のことをするためにアプリを編むこともできますが、cfdisk -Ps /dev/vda実際にはしたくありません。知りたいなぜこれらは必要です。アプリケーションを変更するまで、すべてがうまくいきました。

ベストアンサー1

暗闇の中で突くのですが、実行cfdisk時にカーネルパーティションテーブルを更新することもできますか?

あなたのアプリケーションロジックはループデバイスと互換性がありますか?

  1. ディスクイメージファイルをフォーマットし、必要なパーティションを作成します。

  2. -Pカーネルパーティションテーブルを更新するオプションでループバックデバイスを設定します。

    losetup -P /dev/loop0 <image file>

  3. マウントパーティション:mount /dev/loop0p1 /mnt

これにより、オフセットを心配する必要がなくなり、mountコマンドが物理ディスクで使用されるコマンドに近づきます。 2 と 3 の間に異なるステップを追加してシンボリックリンクを作成することもできます。

おすすめ記事