Создать образ USB-накопителя без нераспределенного раздела
У меня есть 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 ГБ файлов, но я не хочу тратить свое дисковое пространство.
2 ответа
Если я правильно понимаю, вы хотите создать образ от начала диска до конца последнего раздела.
Параметр для 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. Размер блока по умолчанию для dd
составляет 512 байт, что также является единицей, которая fdisk -u -l
будет использовать в выводе.
Таблица резервных разделов раздела GPT хранится в конце диска, но, поскольку вы не используете GPT, все будет в порядке.
Вам просто нужно сказать dd читать только ту часть диска, которая вам интересна. Параметр, который вы ищете count
,
Итак, возьмите размер вашего цилиндра 8,225,280 и умножьте на количество используемых цилиндров 103, и вы получите 847,203,840 байт. Поскольку вы используете размер блока в один мегабайт, преобразуйте эти байты в мегабайты, что составляет 808.
Итак, ваша команда dd if=... of=... bs=1M count=808