створити образ USB-накопичувача без нерозподіленого розділу


13

У мене до моєї системи приєднано 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 Гб, але я не хочу витрачати свій диск на дисках.


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=...

де підрахунок буде встановлений на число, яке ви отримали fdisk -u -lв кінці останнього розділу плюс один , замість того, що раніше було 104. За замовчуванням розмір блоку dd- 512 байт, що також є одиницею, яка fdisk -u -lбуде використовуватись у висновку.

Таблиця резервного розділу розділів GPT зберігається в кінці диска, але оскільки ви не використовуєте GPT, ви будете в порядку.


2

Вам просто потрібно сказати dd, щоб прочитати лише ту частину диска, який вас цікавить. Параметр, який ви шукаєте, такий count.

Отже, візьміть свій розмір циліндрів 8,225,280 і помножте кратну кількість циліндрів у використанні на 103, і ​​ви отримаєте 847,203,840 байт. Оскільки ви використовуєте розмір блоку в один мегабайт, конвертуйте ці байти в мегабайти, який становить 808.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.