によって作成されたrawファイルの最初にプライマリ(メイン)GUIDパーティションテーブルがあり、最後にセカンダリ(バックアップ)テーブルがあるはずdd
です。ファイルを切り捨てると、セカンダリファイルが破壊されます。修正する方法があります。
最後に空き領域がある切り捨てられていないファイルから始めましょう。を実行しますgdisk -l myfile.raw
。論理セクタサイズに注意してください(512B
おそらく)。最大の最後のセクターを見つけます(おそらく最後のパーティションのセクターですが、パーティションエントリは順序が正しくない可能性があるため、最大のセクターを注意深く探してください)。セクターにはから番号が付けられている0
ため、すべてのパーティションを保存するには(セクターサイズ)*(最大終了セクター + 1)バイトが必要です。
また、新しいセカンダリGPTを保存するには、最後に少なくとも33の空きセクターの空き領域が必要です。ウィキペディアのこの写真をご覧ください。
全体で(セクタサイズ)*(最大終了セクタ + 34)バイトのファイルが必要です。ファイルをこれ以上のサイズに切り捨てます。
truncate -s <new_size> myfile.raw
次に呼び出す
gdisk myfile.raw
(特に)取得します。
警告!ディスクサイズはメインヘッダーが示すよりも小さいです!
注意:バックアップGPTヘッダーは無効ですが、メインヘッダーは有効です。メインヘッダーからバックアップヘッダーを再生成します。
を押してw
、Enter正しいパーティションテーブルを書き込みます。セカンダリGPTが移動されようとしているため、警告が表示されます。ファイルの最後に十分な空き領域があるため、心配する必要はありません。要求されたら確認します。
で終了しますq
、Enter。gdisk
再度実行します-警告はありません。GPTは修正されました。
gparted
画像で使用する必要がある場合、いくつかのヒントがあります。
このコマンドはsudo gparted myfile.raw
、ファイルを期待myfile.raw1
、myfile.raw2
などが存在し、内部のパーティションに対応しますmyfile.raw
。以下のように、それは特別なファイルであった場合/dev/sdb
、その後udev
の世話をするだろう/dev/sdb1
、/dev/sdb2
...それは通常のファイルの場合ではありません。ファイルgparted
がない場合、多くの機能が失敗しmyfile.rawN
ます。
そのようなファイルを作成するには、以下を使用しますkpartx
(またはpartx
+ losetup
タンデム):
sudo kpartx -av myfile.raw
その出力(loopXpY
作成されたデバイス)を確認し、すべてのパーティションへのシンボリックリンクを作成します。最初の可能性があります:
ln -s /dev/mapper/loop0p1 myfile.raw1
今すぐgparted
実行して、それらのパーティションを操作する必要があります。ただし、落とし穴があります。パーティションが変更された(たとえば、移動/サイズ変更された)場合、作成されたマッピングkpartx
は更新されません。通常gparted
、呼び出すpartprobe
か何かを更新し/dev/sd*
ます。これはこのケースでは機能しません。マッピングを破棄して再作成する必要があります。パーティションの移動/サイズ変更ではgparted
、1つのタスクを実行し、プログラムを閉じ、マッピングを修正し、gparted
2番目のタスクで実行します。
マッピングを破棄するには、を呼び出しsudo kpartx -dv myfile.raw
ます。孤立したシンボリックリンクを最後に削除します。