RaspberryPi用に作成した32GBUSBフラッシュドライブを2Gimgファイルに縮小/サイズ変更する方法、または直接dd
する方法に関する情報を探していました。パーティションのサイズを変更しました。Win32FATが64Mで、Linuxパーティションが2048Mb(2G)で、必要なのは約2Gのdd
IMGファイルだけです。
Gzip圧縮方式があることは知っていますが、圧縮を解除すると32GBのimgファイルが解凍され、スペースが足りなくなることがあります。 2Gだけを使用した32Gファイルを使用せずに、ファイルを2GBUSBフラッシュドライブに追加できるようにしたいだけです。それを得る?
また、SSDを使用していて、画像ファイルを/dev/zero
-するのはちょっと有害だと読んだので、もっと簡単な方法があるといいのですが。 LinuxとWindowsを自由に使えるので、提案を聞いてうれしいです。
更新:残念ながら、間違えてUSBフラッシュドライブを別のドライブに交換しましたが、/dev/loop0
にマウントしてfdisk -l
を実行したimgファイル全体があります。出力は次のとおりです。
Disk flashrom32g.img: 29.8 GiB, 32010928128 bytes, 62521344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaebebc78
Device Boot Start End Sectors Size Id Type
flashrom32g.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
flashrom32g.img2 137216 4331519 4194304 2G 83 Linux
USBキーの関連部分は、正確に4331520
バイトの512
セクター(0
から4331519
までの番号)を使用するため、コマンドは次のようになります。
dd if=/dev/your_usb_key of=/path/to/image.dd bs=512 count=4331520
編集(コメントに対処するため):
4331519の場合、なぜ4331520ですか?理由だけで+1?
セクターに1
から番号が付けられ、最後のセクターが4331519
番目である場合、それらの合計は4331519
になります。しかし、私が言ったように、それらは0
から番号が付けられているので、count=4331520
です。
このような計算に不安を感じますが、自動的に計算する方法はありませんか?
率直に言ってわかりません。私はあなたがそのようなトリックをする必要があるならあなたはあなたがしていることをよりよく理解するべきだと思う傾向があります。そして、あなたが理解していれば、あなたは数学をすることができ、あなたは落とし穴を知っています、そしてあなたはあなた自身の計算なしで不安を感じます。
dDのようなものですが、空の/パーティション化されていないスペースを取り除きますか?
パーティション化されていないスペースをall削除したくありません。セクター0
にパーティションテーブルを持つMBRがあります。セクター1..8191
にはブートローダーコードが含まれている可能性があります。
GPTがあった場合、ディスクの最後にバックアップパーティションテーブルがあり、パーティション化されていないスペースにもあります。
さらに、パーティション間にスペースがある場合、dd
のようなツールは、後者のパーティションをイメージの先頭に向かって効果的にシフトし、パーティションテーブル(イメージ内)が効果的にシフトするため、スキップできませんでした。調整する必要があります。この場合の別の戦略は、出力イメージをスパースファイルとして書き込むときに、この中間パーティションスペースをオンザフライでゼロに置き換えることです。
もう1つの落とし穴: この質問 と私の答えを読んでから、この混乱からパーティション化されていないスペースをうまく取り除くためにツールがどれほど洗練されている必要があるかを考えてください。
一般に、MBR(またはMBR +ブートローダー)とすべての単一パーティションの個別のイメージをいつでも作成できます。あなたの場合、それは次のようになります:
dd if=/dev/your_usb_key of=/path/to/image_MBR_bootloader.dd bs=512 count=8192
dd if=/dev/your_usb_key1 of=/path/to/partition1.dd
dd if=/dev/your_usb_key2 of=/path/to/partition2.dd
空のスペース(つまり、df
で示されるスペース)を削除する場合は、ファイルシステムを理解し、ディスクセクターではなく、ファイルレベルで機能するツールを使用する必要があります。 dd
(またはdd
のようなもの)は、この種の仕事に適したツールではないと確信しています。
チェックのために実際のドライブにダンプせずにこれが機能することをどのように確認できますか?
学ぶので、いつか「私は自分が何をしているのか知っている」と言うことができます。試行錯誤は学習プロセスの一部です。チェックのためにイメージを実際のドライブにダンプするのは良い試みだと思います。