Вступление
Для диска с разделами ПК (что вы найдете на большинстве USB-накопителей), загрузчик состоит из крошечной части в самом начале диска (начальный загрузчик этапа 1 в загрузочном секторе диска) и большая часть в другом месте (загрузчик стадии 2, в файле). Данные этапа 1 содержат физическое местоположение этапа 2. Если вы копируете все устройство (то, что вы пробовали dd
), часть этапа 1 находится в том же физическом месте, и флешка работает, но новый флешек должен быть как минимум большой как оригинал. Если вы воссоздаете разделы и копируете файлы, вы пропускаете этап 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