Вступ
Для накопичувача з розділами для ПК (що саме ви знайдете на більшості USB-накопичувачів) завантажувач складається з крихітної частини на самому початку диска (завантажувач першого етапу, у завантажувальному секторі накопичувача) та більша частина в іншому місці (завантажувач другого етапу, у файлі). Дані першого етапу містять фізичне розташування на етапі 2. Якщо ви скопіюєте весь пристрій (те, що ви намагалися dd
), частина першого етапу знаходиться в тому ж фізичному місці, і палиця працює, але нова палиця повинна бути не менше ніж великий, як оригінал. Якщо ви відтворили розділи та скопіювали файли, ви пропустите етап 1, оскільки це не файл.
Я думаю (але я не перевіряв), що етап 2 знаходиться в першому (FAT32) розділі. Якщо так, ви можете скопіювати цей розділ оптом і скопіювати завантажувальний сектор, а потім відредагуйте таблицю розділів так, щоб другий розділ займав саме те місце, що залишилося, і скопіюйте файли на другий розділ. Ви також можете зберегти необроблене зображення завантажувального сектору та першого розділу у файлі на жорсткому диску (але ви також можете їх клонувати з USB-накопичувача).
Виготовлення клона різного розміру
Нижче я назву пристрій, що містить оригінальну паличку, /dev/sdb
і пристрій, що містить клон /dev/sdc
; замінити назви за потребою. Створіть точки кріплення, якщо це необхідно. Я припускаю, що розділ FAT32 (на початку диска) пронумеровано 1, а розділ ext3 - номер 2; замініть різні цифри, якщо потрібно.
Перша частина, якщо клонування з палички:
head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1
Перша частина, якщо клонування з файлів зображень:
cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1
Заклик до partprobe
потрібен, щоб ядро перезавантажувало таблицю розділів з диска (це в завантажувальному секторі, і перша команда в будь-якому вище сценарії змінює завантажувальний сектор). Якщо ви пропустите це, ви або отримаєте помилки, або ядро мовчки запише сміття на палицю.
Щоб створити файли зображень:
head -c 512 </dev/sdb >boot_sector.img
cat /dev/sdb1 >first_partition.img
Тепер після того, як ви отримаєте завантажувальний сектор та перший розділ, вам потрібно знову відредагувати таблицю розділів, щоб змінити розмір другого розділу. Ви можете зробити це автоматично, подавши правильний вхід на fdisk
. Попередження, це надзвичайно схильне до помилок, і я цього не перевіряв. Якщо ви не відчуваєте себе цілком комфортно з цією частиною, робіть це вручну.
sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2 # delete partition 2
n p 2 # new primary partition 2...
_ _ # ... using all available space
w q # write and quit
EOF
Нарешті знову перезавантажте таблицю розділів, створіть файлову систему ext3 та скопіюйте туди файли.
partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2
Спрощений спосіб зробити більший клон
Якщо ви віддаєте перевагу, ви можете зберігати зображення цілої палички. Ви зможете використовувати це зображення безпосередньо на будь-якій паличці, яка є принаймні такою великою: просто скопіюйте це зображення на нову паличку cat <whole.img >/dev/sdc
, а потім запустіть partprobe /dev/sdc
(або від'єднайте паличку та вставте її назад), щоб перечитати таблицю розділів.
Потім, якщо вам подобається, ви можете збільшити клон. У цьому порядку:
- Збільшити розділ. На жаль, я не знаю, як це зробити простим способом.
parted
можна зробити це за допомогою move
команди (не resize
, яка змінює розмір файлової системи), але вам потрібно з'ясувати правильні аргументи - перейти на сектори ( unit s
), щоб уникнути помилок округлення.
- Збільшити файлову систему. Ця частина проста: просто запустіть,
resize2fs /dev/sdc2
щоб файлова система використовувала весь розмір розділу.
Якщо ви починаєте з більшої палички, ніж потрібно, ви можете її зменшити, виконавши вказані вище дії у зворотному порядку (спочатку стисніть файлову систему resize2fs
, а потім зменшіть розділ parted
).
Крім того, ви можете спочатку скопіювати палицю у файл зображення, а потім попрацювати над цим файлом зображення. Для доступу до розділів використовуйте циклічний пристрій , спеціально пов’язавши частину файлу з диском . Ось ескіз кроків, якщо ви хочете зменшити зображення (попередження, неперевірене, обережно продовжуйте та ще раз перевірте математику).
fdisk -lu whole.img # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $ # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k