создать образ USB-накопителя без нераспределенного раздела

13

У меня есть 8 ГБ 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 МБ, раздел ext2 - около 740 МБ, а остальное пространство (~ 7 ГБ) не выделено. Теперь, когда я dd мой жесткий диск USB через:

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

выходной файл (myimage.img) составляет около 8 ГБ, что является нормальной операцией dd.

Вопрос: Что я ищу, так это способ клонирования жесткого диска USB без нераспределенного пространства, так что мой файл результатов будет около 1 ГБ без сжатия, а не 8 ГБ. Причина, по которой я спрашиваю, заключается в том, что выходной файл (myimage.img) используется программой-симулятором для загрузки образа. Симулятор может обрабатывать 8 ГБ файлов, но я не хочу тратить свое дисковое пространство.

скромный
источник
1
Это несколько похоже на проблему с интересным решением: serverfault.com/q/281628/141604
неделя

Ответы:

15

Если я правильно понимаю, вы хотите создать образ от начала диска до конца последнего раздела.

Параметр для 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. Размер блока по умолчанию для dd512 байт, который также является единицей, которая fdisk -u -lбудет использоваться в выходных данных.

Резервная таблица разделов раздела GPT хранится в конце диска, но, поскольку вы не используете GPT, все будет в порядке.

chutz
источник
2

Вам просто нужно указать dd читать только ту часть диска, которая вам интересна. Параметр, который вы ищете, это count.

Итак, возьмите размер вашего цилиндра 8,225,280 и умножьте на количество используемых цилиндров 103, и вы получите 847,203,840 байт. Поскольку вы используете размер блока в один мегабайт, преобразуйте эти байты в мегабайты, что составляет 808.

Итак, ваша команда dd if=... of=... bs=1M count=808

длинная шея
источник