Вот способ создания живого USB-накопителя Debian с постоянством. Это позволит установить недостающие пакеты, которые с этого момента будут доступны при каждой активной загрузке с использованием постоянства. Поскольку мы воссоздаем содержимое файловой системы живого ISO-образа в файловой системе с возможностью чтения и записи, мы можем изменить конфигурации загрузчика, чтобы включить сохранение и установить раскладку клавиатуры при загрузке.
Описанные здесь шаги были протестированы для работы с растяжкой и бустером Debian для создания живого образа растяжения Debian.
Есть много шагов, но кажется, что этот метод все еще довольно эффективен.
Отказ от ответственности: вы потеряете данные на целевом USB-накопителе, и если вы ошибетесь с приведенными ниже командами, вы, возможно, пожалеете. Я не несу ответственности за ваши действия.
Чувствую себя счастливчиком
Если вам сегодня особенно повезло, вы можете попробовать скрипт bash, который автоматизирует этот процесс. В качестве первого параметра укажите путь к ISO-образу, а в качестве второго - имя устройства блочного USB-накопителя. Обратите внимание, что этот сценарий безумно опасен, и что вы не должны выполнять его без предварительного чтения и понимания.
TL; DR
Получите ISO-образ Debian live, затем сделайте следующее:
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Подробно и с некоторыми пояснениями
Вам нужно будет выполнить большинство следующих команд с повышенными привилегиями, т. Е. Использовать их sudo
в большинстве систем GNU / Linux.
Скачать
Загрузите ISO-образ Debian Live с помощью любого оконного менеджера:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Мы будем ссылаться на загруженный образ ISO просто как «live.iso».
Определить целевой диск
Найдите устройство, которое используется вашим USB-накопителем lsblk
. Мы назовем это /dev/sdX
.
Отсоединение
Размонтируйте существующие разделы на вашем диске, используя umount /dev/sdX*
Создать разделы
Нам нужен загрузочный раздел EFI для компьютеров UEFI для загрузки с USB-накопителя. Затем нам нужен достаточно большой раздел для хранения оригинального содержимого образа файловой системы ISO. Этот раздел должен иметь установленный legacy_boot
флаг. Затем мы добавляем постоянный раздел, занимая все оставшееся пространство USB-накопителя. Вы можете сделать это с помощью любого инструмента разметки, поддерживающего GPT (обратите внимание на legacy_boot
флаг). Вот пример использования parted
:
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
Это создает таблицу разделов GPT и таблицу разделов защитного MBR.
Создать файловые системы
Мы хотим получить FAT для EFI и живого раздела, и мы хотим ext4
для постоянного раздела, и нам нужна метка, persistence
чтобы работала постоянная функция.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Монтирование ресурсов
Нам нужно будет смонтировать исходный ISO и целевой раздел во временных точках монтирования.
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
Установите живую систему
Скопируйте содержимое файловой системы ISO в LIVE-раздел.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Подготовьте файловую систему постоянства с необходимым файлом конфигурации. Функция сохранения не будет работать без этого файла.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub для поддержки UEFI
Установите grub2 для поддержки загрузки UEFI (для этого требуется grub-efi-amd64-bin
пакет в Debian). Мы заставляем , grub-install
чтобы не использовать систему UEFI безопасных загрузок, который , видимо , не работает с --removable
опцией.
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux для поддержки устаревших BIOS
Установите gptmbr.bin
загрузчик syslinux на диск (загрузите syslinux или установите пакет syslinux-common
). Затем установите syslinux в рабочий раздел.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Isolinux исправление
Повторно используйте конфигурацию isolinux исходного живого ISO для работы с syslinux.
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
Параметры ядра
Теперь, когда мы скопировали действующие системные файлы в реальную файловую систему для чтения и записи, мы можем манипулировать конфигурацией grub и syslinux.
Добавьте параметр ядра постоянства в menu.cfg
и grub.cfg
. В обоих файлах добавьте ключевое слово persistence
в конце соответствующей первой строки с boot=live
ним.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Установите параметр ядра раскладки клавиатуры. В обоих файлах добавьте ключевые слова в конце соответствующей первой строки с boot=live
ним.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Grub splash
Исправьте изображение заставки grub (необязательно; мы переместили его в другой каталог).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Размонтирование и очистка
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Почему это должно работать как для UEFI, так и для BIOS
При запуске в режиме UEFI ПК будет сканировать разделы FAT, которые мы определили в таблице разделов GPT. Первый раздел FAT содержит загрузчик загрузчика UEFI, который обнаружен потому, что он находится в пути, указанном UEFI для съемных дисков ( --removable
переключатель grub-install
сделал это). Для этого не требуется загрузочная запись UEFI, нам нужно только заставить компьютер попытаться загрузиться с USB-накопителя. Этот grub сконфигурирован так, чтобы брать его оттуда (загрузить grub.cfg, показать меню и т. Д.).
При запуске в режиме BIOS и выборе загрузки с USB-накопителя ПК выполнит gptmbr.bin
код загрузчика, который мы записали на защитную MBR USB-накопителя. Этот загрузчик ищет раздел GPT, помеченный legacy_boot
флагом и цепью syslinux из этого раздела. Syslinux затем вступает во владение (загрузить menu.cfg, показать меню и т. Д.).
Зашифрованная стойкость
Вместо использования обычного ext4 на постоянном разделе можно сначала зашифровать постоянный раздел с помощью LUKS (используя cryptsetup
), а затем отформатировать его с помощью ext4 (используя соответствующую метку). Однако, как сказано в документации , действующая система должна включать cryptsetup
пакет. В противном случае зашифрованный раздел не может быть дешифрован действующей системой. Это означает, что сначала нужно создать собственный живой ISO. Это, однако, выходит за рамки этого ответа.
история
--no-uefi-secure-boot
Вариант был ранее не частью вызова grub-install
. Палка работала нормально для меня, но это прекратилось с Debian Buster, хотя безопасная загрузка все еще отключена на моей машине.