Клонирование загрузочной флешки на флешку другого размера


11

ОБОРУДОВАНИЕ: 2 флэш-накопителя USB на 8 ГБ
DISTRO: Mint 9 Xfce persistent Live Cd

Один USB-накопитель имеет два раздела:
1) FAT32, 700 МБ, раздел Mint 9,
2) ext3, casper-rwраздел 7,3 ГБ.

ЦЕЛЬ:
Я хочу сделать копию этого флэш-накопителя USB, потому что я не хочу снова проходить время установки и настройки с нуля.

ОПЫТ:
1) Я обнаружил, что ddэто не работает для этой работы, потому что, если один из моих флэш-накопителей имеет размер даже 1 МБ, который иногда таков, то копия будет повреждена.

2) Я обнаружил, что использование gpartedи предварительное форматирование второго диска, такого как первый, и последующее rsyncиндивидуальное разбиение каждого раздела не работает, поскольку по некоторым причинам некоторые файлы не копируются, а диск остается незагружаемым.

Я хочу сохранить свою рабочую флешку, просто сделать ее копии и настроить стики для своих друзей. Таким образом, если я подниму другую палку, моя базовая палка всегда будет сидеть и ждать.


какой загрузчик вы используете (syslinux?). Пожалуйста, рассмотрите возможность удаления этой напыщенной речи из вашего поста, она не добавляет никакого значения вашему вопросу.
Мат

Я использовал установщик Mint Live USB, так что все было автоматически. Я надеюсь, что процесс клонирования позволит избежать работы с загрузчиками и скопировать мою текущую конфигурацию загрузчика
Джошуа Робисон

Ответы:


5

Вступление

Для диска с разделами ПК (что вы найдете на большинстве 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(или отсоедините флешку и вставьте ее обратно), чтобы перечитать таблицу разделов.

Затем, если хотите, вы можете увеличить клон. В этом порядке:

  1. Увеличить раздел. К сожалению, я не знаю, как это сделать простым способом. partedМожно сделать это с помощью moveкоманды (нет resize, которая изменяет размер файловой системы), но вам нужно выяснить правильные аргументы - переключитесь на секторы ( unit s), чтобы избежать ошибок округления.
  2. Увеличить файловую систему. Эта часть проста: просто запустите, 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

хмм. Разве я не могу просто использовать head, чтобы просто скопировать первые 300 МБ или около того второго раздела в файл img? Разве это не отрезает все пустые места / пустые блоки в конце файла?
Джошуа Робисон

1
@ Джошуа: Нет, потому что нет никакой причины, почему все данные файла были бы в первых 300 МБ, и даже если бы это было так, вы не можете просто принять участие в такой файловой системе. Вам необходимо создать правильную файловую систему нужного размера. Вы также должны иметь раздел правильного размера; размер раздела хранится в загрузочном секторе. Если вы предпочитаете начинать с изображения минимального размера и увеличивать его при желании, я добавил способ сделать это в своем ответе.
Жиль "ТАК ... перестать быть злым"

хмм. Я пытался копировать файлы раньше, но по какой-то причине все не копировалось. Я попытался rsync тоже с sudo. и я думаю, что попробовал su root и сделал это тоже .... Это просто не работает для меня. Я уверен, что диски не были установлены ... в любом случае. Я решил сжать диск в gparted, затем создать из него img-файлы и затем восстановить их на меньший диск. Предварительное сжатие в gparted было единственным простым решением, которое я смог найти. Спасибо за вашу помощь, хотя.
Джошуа Робисон

Ваш ответ, вероятно, правильный и, скорее всего, будет делать то, что я спрашиваю. Это слишком сложно для меня. Таким образом, я пошел с gparted до сжатия метод.
Джошуа Робисон

в этой строке есть опечатка head -c 512 </dev/sdb >/bev/sdc?
Антонио

3

~ $: sudo apt-get установить gddrescue ddrescue

~ $: ddrescue / dev / sda / dev / sdb -v

;

Синтаксис: утилита / источник / диск / место назначения / диск --verbose

Комментарий: показывает прогресс и проверку ошибок, чтобы вы знали, приемлемо ли это или где-то зависает. Вы также можете добавить b = блоки любого размера, которые вы хотите. «gddrescue» - это версия «ddrescue» на основе графического интерфейса, но я использую только ddrescue, как написано выше, так как он работает без проблем.


2
Обратите внимание, что правильный формат ddrescue -v /dev/sda /dev/sdb(параметры располагаются перед именами устройств / файлов). Спасибо за указание на этот инструмент! Гораздо проще, чем использовать dd!
xmnboy

0

Я недавно клонировал свою зашифрованную постоянную память Kali с 16 ГБ на 64 ГБ 3,0 USB. Моя главная операционная система - Windows 10 Pro. Я не пытался клонировать с помощью какого-либо дистрибутива Linux, я уверен, что ответы выше - то, что вам нужно, но для любых пользователей Windows; Я использовал AOMEI помощник по разделу диска. Супер прост в использовании, использовал его для разбиения моего SSD под Ubuntu, но я отвлекся.

Я должен был убедиться, что USB, к которому я клонировал, уже был отформатирован для прямой загрузки. Подключил оба USB и просто щелкнул правой кнопкой мыши на диске 8 ГБ; щелкнув, copyзатем выбрал диск на 64 ГБ, он спросит вас о таких вещах, как «Вы уверены, что это правильный диск, все будет стерто», весь этот джаз. Просто прочитайте его и убедитесь, что все в порядке, вам действительно не нужно много делать.

Просто подождите, пока процесс закончится, и все готово. Протестировал, сказал USB и все заработало!

Я нашел это, по крайней мере, для меня, самым простым способом - клонировать живые дистрибутивы с USB на USB.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.