buat gambar drive USB tanpa partisi yang tidak terisi

13

Saya memiliki drive USB 8GB yang terpasang pada sistem saya yang terlihat seperti ini:

[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]# 

Jadi pada dasarnya partisi FAT saya sekitar 70 MB, partisi ext2 sekitar 740MB dan sisa ruang (~ 7 GB) tidak terisi. Sekarang ketika saya menemukan hard drive USB saya melalui:

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

file output (myimage.img) adalah sekitar 8GB yang merupakan operasi normal dd.

Pertanyaan: Apa yang saya cari adalah cara untuk langsung mengkloning hard drive USB saya tanpa ruang yang tidak terisi sehingga file hasil saya sekitar 1 GB terkompresi bukannya 8 GB. Alasan saya bertanya adalah karena file output (myimage.img) sedang digunakan oleh program simulator untuk mem-boot gambar. Simulator dapat menangani file 8 GB tetapi saya tidak ingin membuang ruang disk saya.

sederhana
sumber
1
Ini adalah masalah yang agak mirip dengan solusi menarik: serverfault.com/q/281628/141604
minggu

Jawaban:

15

Jika saya mengerti dengan benar, Anda ingin membuat gambar dari awal disk hingga akhir partisi terakhir.

Parameter untuk ddini adalah count=. Partisi terakhir Anda berakhir pada 103, dan jumlah akan perlu 1 ekstra (104) dan ukuran unit Anda adalah 8225280 byte (sesuai dengan fdisk -loutput). Jadi Anda bisa memodifikasi perintah Anda dengan cara ini:

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

Namun, saya sarankan Anda lari fdisk -u -l /dev/sdbsaja. Silinder tidak benar-benar relevan di usia ini lagi, jadi Anda lebih baik jika Anda melihat jumlah sektor untuk menghindari kesalahan pembulatan. Maka Anda harus menjalankan:

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

di mana hitungan akan ditetapkan ke angka yang Anda dapatkan dari fdisk -u -lpada akhir partisi terakhir ditambah satu , bukan apa yang dulu 104. Ukuran blok default untuk ddadalah 512 byte, yang juga merupakan unit yang fdisk -u -lakan digunakan dalam output.

Tabel partisi cadangan partisi GPT disimpan di akhir disk, tetapi karena Anda tidak menggunakan GPT, Anda akan baik-baik saja.

chutz
sumber
2

Anda hanya perlu memberi tahu dd untuk hanya membaca bagian dari drive yang Anda minati. Parameter yang Anda cari adalah count.

Jadi, ambil ukuran silinder Anda 8.225.280 dan kalikan jumlah silinder yang digunakan 103 dan Anda dapatkan 847.203.840 byte. Karena Anda menggunakan ukuran blok satu megabita, konversikan byte itu menjadi megabita yang 808.

Jadi perintahmu adalah dd if=... of=... bs=1M count=808

leher panjang
sumber