web-dev-qa-db-ja.com

2GBパーティションの32GBUSBフラッシュドライブを2GBイメージファイルに縮小/サイズ変更するにはどうすればよいですか?

RaspberryPi用に作成した32GBUSBフラッシュドライブを2Gimgファイルに縮小/サイズ変更する方法、または直接ddする方法に関する情報を探していました。パーティションのサイズを変更しました。Win32FATが64Mで、Linuxパーティションが2048Mb(2G)で、必要なのは約2GのddIMGファイルだけです。

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
2
DARKGuy

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のようなもの)は、この種の仕事に適したツールではないと確信しています。

チェックのために実際のドライブにダンプせずにこれが機能することをどのように確認できますか?

学ぶので、いつか「私は自分が何をしているのか知っている」と言うことができます。試行錯誤は学習プロセスの一部です。チェックのためにイメージを実際のドライブにダンプするのは良い試みだと思います。

2