К моей системе подключен USB-накопитель емкостью 8 ГБ, который выглядит следующим образом:
[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 ГБ) нераспределено. Теперь, когда я вставил свой жесткий диск USB через:
dd if=/dev/sdb of=myimage.img bs=1M
выходной файл (myimage.img) составляет около 8 ГБ, что является нормальной работой dd.
Вопрос: я ищу способ напрямую клонировать мой жесткий диск USB без нераспределенного пространства, чтобы мой файл результатов имел размер около 1 ГБ несжатый вместо 8 гб. Причина, по которой я спрашиваю, заключается в том, что выходной файл (myimage.img) используется программой-симулятором для загрузки образа. Симулятор может обрабатывать файлы размером 8 ГБ, но я не хочу тратить свое дисковое пространство.
Если я правильно понял, вы хотите создать образ от начала диска до конца последнего раздела.
Параметр для 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