Как установить несколько дистрибутивов Linux на USB-накопитель?
Предположим:
Инструменты:
archive/bios/memdisk
Обзор:
Шаг 1
Подготовьте инструменты и определите, какие операционные системы нужно установить на USB, какой размер разделов и будет ли использоваться раздел подкачки.
Общий объем USB-накопителя составляет 32 ГБ.
Разделы, которые мы настроим.
Раздел NTFS 16 ГБ для совместимости с Microsoft.
32-битный сервер Ubuntu14 4 ГБ ext4 с разделом подкачки 1 ГБ
64-битный сервер Ubuntu16 8 ГБ ext4 с разделом подкачки 4 ГБ
ПРИМЕЧАНИЕ.:Если вы не используете ждущий или спящий режим ни на одной из ОС, они могут совместно использовать один раздел подкачки или даже использовать файл подкачки в каждом из разделов ОС.
Схема раздела:
ПРИМЕЧАНИЕ.:BIOS и MBR будут видеть только 4 основных раздела. Используйте расширенный раздел вместо одного основного раздела, чтобы обойти это ограничение.
Шаг 2
Подготовьте USB-накопитель.
Создайте новую виртуальную машину с именем «test». Для этой виртуальной машины не требуется и не требуется жесткий диск. Это должно сделать USB-накопитель /dev/sda
. Это упростит задачу в дальнейшем.
Подключите ISO-образ Parted Magic к виртуальной машине и загрузитесь с ISO-образа.
Подключите USB-накопитель и «передайте на виртуальную машину»
Убедитесь, что USB виден в виртуальной машине, и запишите номер устройства.
Запустите Редактор разделов со значка на рабочем столе.
USB-накопитель в моей настройке —:/dev/sda
Обнуление таблицы разделов. Это удалит ВСЮ информацию на этом устройстве. Сначала скопируйте любые данные, которые хотите сохранить.
dd if=/dev/zero of=/dev/sda bs=512 count=4
Обновить список дисков в GParted (ctrl+R)
устройство --> создать таблицу разделов «msdos»
Создать разделы:
ПРИМЕЧАНИЕ.:Я создал раздел NTFS последним, чтобы «использовать» оставшееся пространство.
Применить изменения. Должно выглядеть что-то близкое к этому. Обратите внимание, что объем моего USB-накопителя составляет 1 ТБ, поэтому мой раздел NTFS намного больше.
Шаг 3
Подготовьте ОС, которые будут восстановлены на USB-накопитель.
Создана новая виртуальная машина и установлена ОС. В этом примере сервер Ubuntu14 32-битный. Я сделал установочный диск виртуальной машины меньше размера раздела на USB. 4ГБ. Во время установки я использовал MBR, а не LVM, и позволил установке создать раздел подкачки.
Создана новая виртуальная машина и установлена другая ОС. В этом примере сервер Ubuntu16 64-битный. Я сделал установочный диск виртуальной машины меньше размера раздела на USB. 8 ГБ. Во время установки я использовал MBR, а не LVM, и позволил установке создать раздел подкачки.
Внесите любые изменения, обновления и установки для каждой ОС.
Завершение работы новых виртуальных машин
Запустить клонирование новых ВМ.
Подключите pmagic_2013_08_01.iso
к каждой новой виртуальной машине и загрузитесь с ISO-образа.
Просмотрите разделы на каждой виртуальной машине. Обратите внимание на расположение установленной ОС. Оба должны быть /dev/sda1
.(Если не выполнить настройку позже)
Теперь клонируйте каждую ОС с помощью clonezilla со значка на рабочем столе. Я размещу свои клонированные изображения на своем рабочем столе через ssh, поэтому настройте сеть перед запуском clonezilla.
Параметры Clonezilla:
Шаг 4
Восстановите образы ОС на USB-накопитель.
Вернитесь к «тестовой» ВМ, к которой не подключен виртуальный диск, и загрузитесь с pmagic_2013_08_01.iso
.
Передайте USB-накопитель на «тестовую» виртуальную машину.
Запустите редактор разделов с помощью значка на рабочем столе. Мы вернулись сюда. См. Скриншот.
Сопоставьте ОС с разделами USB с разделами образа.
Ubuntu14:
Ubuntu16:
ПРИМЕЧАНИЕ:Эта версия clonezilla по умолчанию восстанавливает образ в тот же раздел, из которого он был создан. с /dev/sda1
по /dev/sda1
. Не то, что мы хотим,так что этот хак восстановит образы на разделах USB.
Взлом clonezilla для восстановления образа в другой раздел, из которого он был клонирован:
Переименуйте все файлы в каталоге изображений с новым идентификатором раздела.
/home/jc/clonezilla_images/ubuntu14/sda1* to /home/jc/clonezilla_images/ubuntu14/sda3*
Modify the content of file /home/jc/clonezilla_images/ubuntu14/parts. Replace 'sda1' with 'sda3'
То же самое для Ubuntu16, скорректируйте числа sda2.
ПРИМЕЧАНИЕ.:Я начал с устройства sda как на виртуальной машине, так и на USB. Если у вас используется другое устройство, например, /dev/sdb, необходимо изменить дополнительные файлы. Просто проще начать с обоих на одном устройстве. /dev/sda.
Восстановление изображений на USB-накопитель с помощью clonezilla
Параметры Clonezilla:
Перезапустите clonezilla и повторите для всех изображений.
Мой USB отключался от виртуальной машины между восстановлениями, поэтому мне пришлось снова пройти через USB-накопитель.
Шаг 5
Установите GRUB на USB-накопитель
Загрузчик Grub будет установлен на первые 512 байт USB-накопителя. Этот загрузчик будет указывать на файл grub.cfg. Разместим наш на разделе Ubuntu16. Это может быть везде, где grub может прочитать.
Для этого мы будем использовать нашу основную ОС.
Для этого можно использовать работающую ОС на виртуальной машине.
Следует использовать текущую ОС Linux с grub2.
Подключите USB.
Мой USB-накопитель в настоящее время подключен как устройство /dev/sdf
. Ваш будет отличаться.
Смонтируйте раздел, в котором будет жить grub.cfg
.
ПРИМЕЧАНИЕ.:Каждая восстановленная ОС будет иметь файл grub.cfg, поскольку она была загружаемой ОС на виртуальной машине. Убедитесь, что вы указываете и изменяете файл grub.cfg, на который указывает загрузчик USB.
Ubuntu16 доб.4
sudo mount /dev/sdf2 /media/usb_u16
установить загрузчик grub на USB-устройство
sudo grub-install --recheck --boot-directory=/media/usb_u16/boot /dev/sdf
Это поместит указатель файла конфигурации в загрузочный каталог раздела Ubuntu16. Обычное место для Ubuntu. Ваш может быть где угодно.
Установка завершена. Об ошибках не сообщается.
Создайте файл grub.cfg
для работы в качестве шаблона.
sudo grub-mkconfig --output=/media/usb_u16/boot/grub/grub.cfg
Здесь важно то, что grub-mkconfig
проверит USB-накопитель и создаст загрузочные записи для ОС, которые мы установили на USB-накопитель. Мы не хотим, чтобы он также проверял все установленные диски на хост-компьютере и создавал для них записи.
Теперь размонтируйте все и проверьте загрузку с USB.
Если все работает, вы сможете загрузить ОС USB. Если не вернуться...
Шаг 6 Настройте файл grub.cfg на USB-накопителе
При загрузке с этого USB-накопителя вы увидите ОС на хост-компьютере, даже если USB-накопитель загружается на другом ПК. Давайте исправим это.
Давайте соберем больше информации.
Каждому разделу присвоен номер UUID. Получите UUID для нашего USB-накопителя.
blkid
/dev/sdf2: UUID="078ecc53-f73c-4cc7-9d45-f78aa534b7c5" TYPE="ext4" PARTUUID="00005785-02"
/dev/sdf3: UUID="a4654333-ee62-4dac-8c09-79a034e3125d" TYPE="ext4" PARTUUID="00005785-03"
/dev/sdf4: LABEL="data" UUID="667308CA28B6BB86" TYPE="ntfs" PARTUUID="00005785-04"
/dev/sdf5: UUID="8646e3f8-4f5c-40d4-a409-c4d65bf98d21" TYPE="swap" PARTUUID="00005785-05"
/dev/sdf6: UUID="61b8680c-22c9-4efc-98a1-2aaaa4a7f304" TYPE="swap" PARTUUID="00005785-06"
Ваш будет отличаться.
2 UUID раздела подкачки сохраняются на потом. Вы добавите их в файл /etc/fstab
для автоматического монтирования при загрузке.
UUID 2 разделов ОС:
/dev/sdf2: UUID="078ecc53-f73c-4cc7-9d45-f78aa534b7c5" -- Ubuntu16
/dev/sdf3: UUID="a4654333-ee62-4dac-8c09-79a034e3125d" -- Ubuntu14
Скопируйте 2 файла memdisk
и super_grub2_disk_hybrid_2.02s9.iso
в каталог конфигурации grub и образ splash.jpg
, если он у вас есть.
Ubuntu16 доб.4
sudo mount /dev/sdf2 /media/usb_u16
sudo cp./memdisk /media/usb_u16/boot
sudo cp./super_grub2_disk_hybrid_2.02s9.iso /media/usb_u16/boot
sudo cp./splash.jpg /media/usb_u16/boot
Создать резервную копию созданногоgrub.cfg
sudo mv /media/usb_u16/boot/grub/grub.cfg /media/usb_u16/boot/grub/grub.cfg.orginal
Создайте свой собственныйgrub.cfg
sudo vi /media/usb_u16/boot/grub/grub.cfg
Короче говоря, нам нужно скопировать из grub.cfg.orginal только самый минимум. Материал установки grub insmod..., элемент отображения gfxmode=... и загрузочные записи. Загрузочные записи можно найти, выполнив поиск номеров UUID сверху. Скопируйте все, включая элементы подменю -или только основной элемент.
memdisk
и super_grub2_disk_hybrid_2.02s9.iso
позволяют нам загружаться с любой ОС на хост-компьютере, даже если загрузочные записи не существуют.
Есть много причин, по которым это неправильный способ, но он работает.
Изменить Пример grub.cfg для этого USB-накопителя.
Сделайте резервную копию пользовательского grub.cfg
файла, потому что кто-то попытается перезаписать его.
sudo cp /media/usb_u16/boot/grub/grub.cfg /media/usb_u16/boot/grub/grub.cfg.custom
Шаг 7
Настройка установленных ОС
/etc/fstab
/etc/fstab
Проверь!
Не совсем элегантно, но работает:
in='
{
"cases": {
"home": "~",
"eolas": "/home/eolas/",
"jdan": "/home/jdan/",
"kl": "/.kl/"
}
}
'
case="$(echo "$in" |
perl -pe 's/"cases". \{/case "\$1" in/;
s/: /) eval cd /;
s/,/;;/;
s/[{}]//g')"
eval "
function da() {
$case
esac
}
"
Если у вас есть файл JSON, вам автоматически следует подумать об использовании jq для его разбора.
Вы захотите прочитать этот файл в ассоциативный массив:
declare -A __dirmap
while IFS=$'\t' read -r name dir; do
[[ $dir == "~" ]] && __dirmap[$name]=$HOME || __dirmap[$name]=$dir
done < <(
jq -r '.cases | to_entries[] | [.key,.value] | @tsv' file.json
)
Тогда функция может быть
function da() {
if [[ -v __dirmap[$1] ]]; then
cd "${__dirmap[$1]}"
else
echo "No mapping for $1" >&2
fi
}