パーティションサイズが3.1GBのArmbianカスタムイメージを作成し、使用が終了しました。現在、GPT(GUIDパーティションテーブル)を使用して起動可能な64 GB SDカードに書き込まれます。
問題は、Ubuntuを使用してカードのイメージを作成しようとしたときに63 GBのサイズのイメージファイルを取得しますが、60 GBの空き容量のあるイメージファイルを望まないことです。
truncate
コマンドを使用して画像ファイルを短縮し、 を使用して画像を生成する別の方法を探しましたが、うまくいきませdd count=
ん。これにより、dd
インストール時に「空き容量」とPMBRの両方を含むイメージファイルが作成され、truncate
作業中のイメージファイルが削除されます。
それでは、(私が何か間違っていない場合)、ブート情報を含む3GBのSDカードイメージをどのように生成しますか?
答え1
truncate
素晴らしいツールです。パーティションテーブルに定義されているすべてのパーティションが含まれるように、イメージを縮小する必要があります。つまり、最後に最も近いパーティションの終了セクタが(必ずしも最も高い番号のパーティションである必要はありません)、画像のセクタが必要ですN
(番号付けは最初から始まるため)。N+1
+1
0
ただ使ってみるgdisk -l image
とわかりますN
。
カードは512バイトセクタを使用する可能性が高く、パーティションテーブルは512バイトセクタとして解釈されると有効です(比較:この仮定が成立しない場合は、何が起こるかを確認してください。)。したがって、(N+1)*512
バイトが必要です(またはそれ以上の場合、それ以上は致命的ではありません)。truncate
だから。
最初にカードからこのバイト数を直接読み取ると、同じ結果が表示されます。簡単なアプローチ(POSIXではありませんが、これ)はいhead -c number-of-bytes-here /dev/sdx > image
。
次に、セカンダリ(バックアップ)GPTとして33の追加の論理セクタが必要です。truncate
もう一度使用して33*512
ファイル(truncate -s +16896 image
)にバイトを追加してください。最初のものを使用して画像を目的の最終サイズに縮小することができますがtruncate
(または詳細を読むhead
)、2つのステップでこれを行うと、追加の33セクタにゼロが含まれ、一時的にRubbishを妨げる可能性があります。
最初の切り捨て(または画像の一部を生成する)では、元のセカンダリGPTが削除されます。それを使っgdisk image
て問題を解決しましょう。それはあなたdisk size is smaller than the main header indicates
とinvalid backup GPT header, but valid main header; regenerating backup header from main header
。 2番目のおかげで、truncate
GPTをバックアップするためのスペースがありました。必要なのは「w
ディスクへのテーブルの書き込みと終了」だけです。このツールは、バックアップGPTを含むGPTを再構築します。