У меня есть 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 ГБ файлов, но я не хочу тратить свое дисковое пространство.
Ответы:
Если я правильно понимаю, вы хотите создать образ от начала диска до конца последнего раздела.
Параметр для
dd
этого делает этоcount=
. Ваш последний раздел заканчивается на 103, и количество должно быть на 1 лишнее (104), а размер вашего блока составляет 8225280 байт (в зависимости отfdisk -l
выходных данных). Таким образом, вы можете просто изменить свою команду следующим образом:Я бы, однако, предложил вам
fdisk -u -l /dev/sdb
вместо этого бежать . Цилиндры больше не актуальны в этом возрасте, поэтому вам лучше, если вы увидите количество секторов, чтобы избежать ошибок округления. Тогда вам придется бежать:где 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
источник