web-dev-qa-db-ja.com

未割り当てパーティションのないUSBドライブのイメージを作成します

次のような8GB USBドライブがシステムに接続されています。

[root@Host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@Host]# 

したがって、基本的に私のFATパーティションは約70 MB、ext2パーティションは約740MB、残りのスペース(約7 GB)は未割り当てです。 USBハードドライブをddすると、次のようになります。

dd if=/dev/sdb of=myimage.img bs=1M

出力ファイル(myimage.img)は約8GBで、ddの通常の操作です。

質問:私が探しているのは、割り当てられていないスペースなしでUSBハードドライブを直接複製して、結果ファイルが約1 GBになるようにする方法です非圧縮 8 GBではなく==。私が尋ねる理由は、出力ファイル(myimage.img)がシミュレータープログラムによってイメージを起動するために使用されているためです。シミュレータは8 GBのファイルを処理できますが、ディスク領域を無駄にしたくありません。

13
modest

私が正しく理解していれば、ディスクの先頭から最後のパーティションの末尾までのイメージを作成する必要があります。

これを行うddのパラメーターはcount=です。最後のパーティションは103で終わり、カウントは1(104)追加する必要があり、ユニットサイズは8225280バイトです(fdisk -l出力によると)。したがって、次のようにコマンドを変更するだけです。

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

ただし、代わりにfdisk -u -l /dev/sdbを実行することをお勧めします。シリンダーはこの時代にはもうあまり重要ではないので、丸めエラーを回避するためにセクター数を確認することをお勧めします。次に、実行する必要があります:

dd if=/dev/sdb of=myimage.img count=...

ここで、countは、最後のパーティションの最後にfdisk -u -lから取得した数に設定されます。以前は104であったものではなく、プラス1です。ddは512バイトです。これは、fdisk -u -lが出力で使用する単位でもあります。

GPTパーティションのバックアップパーティションテーブルはディスクの最後に保存されますが、GPTを使用していないので問題ありません。

15
chutz

必要なドライブの一部のみを読み取るようにddに指示する必要があるだけです。探しているパラメーターはcountです。

したがって、8,225,280のシリンダーサイズに103を使用しているシリンダーの数を掛けると、847,203,840バイトになります。 1メガバイトのブロックサイズを使用しているので、そのバイトをメガバイト(808)に変換します。

したがって、コマンドはdd if=... of=... bs=1M count=808

2
longneck