Как создать загрузочный диск ubuntu
Перейти к содержимому

Как создать загрузочный диск ubuntu

  • автор:

Создание загрузочного диска

В данном контексте загрузочным диском именуется флеш-диск USB, с которого можно запустить и установить Ubuntu . Ёмкость USB-носителя должна быть не менее 2 ГБ. Все данные, имевшиеся на этом носителе, будут стёрты в процессе создания загрузочного диска.

Подразумевается, что вы уже загрузили ISO-образ Ubuntu.

Для того, чтобы создать загрузочный диск из ISO-образа Ubuntu:

  1. Откройте Создание загрузочного диска через строку поиска в Обзоре .
  2. Если образ ISO находится в папке Загрузки и он там только один, то приложение Создание загрузочного диска выберет его автоматически. В противном случае выберите нужный образ ISO.
  3. Если к компьютеру подключён только один флеш-носитель USB, то приложение Создание загрузочного диска выберет его. Если нет, выберите нужный носитель.
  4. Нажмите Создать загрузочный диск .
  5. Нажмите Да для подтверждения. Процесс займёт около 10 минут или меньше.
  6. После появления окна «Установка завершена», нажмите Выйти .

Дополнительная информация

  • Диски и другие устройства хранения информации — Определение параметров диска и управление тем, как место на диске распределено и использовано.
  • Установка и удаление программ — Добавление и удаление приложений, а также другого программного обеспечения. Управление дополнительными репозиториями программного обеспечения.

Подготовка USB образа

Вы ведь захотели попробовать Ubuntu MATE с USB диска или SD карты? Прекрасно! Если вы незнакомы с этим процессом, то вы можете подумать, что для этого будет достаточно простого копирования загруженного образа Ubuntu MATE на ваш носитель данных и после этого им можно воспользоваться. Но на самом деле для запуска операционной системы с носителя вы должны записать его образ специальным способом, чтобы обеспечить загрузку компьютера с него.

Для того чтобы установить или попробовать Ubuntu MATE с диска USB или SD карты, вам необходим носитель объемом не менее 4 Гб и загруженная копия Ubuntu MATE, совместимая с вашей системой.

Инструкции

Подходят для использования USB и карты microSD.

Если вы загрузили файл с расширением .xz , то воспользуйтесь программой 7-Zip для извлечения файла .img сначала.

Windows

  1. Загрузите новейшую версию программы balenaEtcher. Выполните двойной щелчок по загруженному файлу для установки.
  2. Запустите программу balenaEtcher.
  3. Нажмите кнопку Select Image и выберите файл Ubuntu MATE .iso , который вы собираетесь использовать. Экранный снимок Etcher
  4. Нажмите кнопку Select Target и выберите соответствующее устройство USB для записи .iso на него. Экранный снимок Etcher
  5. Наконец, нажмите кнопку Flash! для запуска процесса. Экранный снимок Etcher
  • При этом в процессе будет отображаться индикатор прогресса. Экранный снимок Etcher
  • Программа Etcher сообщит о завершении процесса. Экранный снимок Etcher
  • Пожалуйста, отключите USB накопитель и подключите его к системе, на которую вы собираетесь установить Ubuntu MATE.

macOS

Если вы собираетесь записывать и использовать USB накопитель на устройстве Mac, то вам следует стереть и переформатировать накопитель с использованием Дисковой утилиты от Apple, которую вы можете запустить из меню Приложения > Утилиты или воспользовавшись поиском.

  1. После запуска Дисковой утилиты, подключите ваш USB накопитель, после этого он появится в программе.
    • Если он не появился, то выберите Вид > Показать все устройства на панели меню.
  2. Выберите USB накопитель и нажмите Стереть на панели инструментов или в контекстном меню правой кнопки мыши.
  3. Выберите формат MS-DOS (FAT) и GUID Partition Map из соответствующих выпадающих меню.
  4. Проверьте (и перепроверьте во избежании потери данных на неправильно выбранном устройстве или разделе), что вы выбрали правильный накопитель и нажмите Стереть . Экранный снимок Дисковой утилиты
  5. Загрузите и установите программу Etcher, проекта с открытым исходным кодом для записи файлов ISO на SD карты и USB накопители.
  6. Если потребуется, откройте секцию ‘Защита и безопасность’ в Системных настройках и разрешите запуск приложений, загруженных из ‘App Store и установленных разработчиков’. Если это не помогает запустить Etcher, то нажмите ‘Все равно открыть’. Экранный снимок Etcher
  7. Выберите предварительно загруженный файл Ubuntu MATE ISO (который, по умолчанию, расположен в вашей папке Загрузки) используя кнопку Select Image.
  8. Убедитесь что Select Target указывает на правильный накопитель USB, а если нет, то выберите нужное устройство.
  9. Нажмите кнопку Flash! для записи ISO файла на USB накопитель. Etcher запросит ваш пароль, затем будет отображать прогресс и проинформирует вас об успешном завершении процесса.
  10. Если macOS выводит сообщение ‘Вставленный диск не читается на этом компьютере’, то нажмите Eject, но не Initialise. Экранный снимок сообщения Mac о нечитаемом диске
  11. Для использования загрузочного носителя на устройстве Mac, подключите USB накопитель и перезагрузите или включите устройство удерживая кнопку Option / Alt для запуска Startup Manager. Выберите золотой диск с надписью ‘EFI Boot’, после чего должно появиться меню запуска Ubuntu.

Если у вас не получается загрузить ваш Mac с USB накопителя, то попробуйте записать DVD.

GNU/Linux

В GNU/Linux существует несколько программ и утилит для записи ISO на USB накопитель или microSDHC, но мы предпочитаем использовать ddrescue (из пакета gddrescue).

Файл образа может быть напрямую записан на microSDHC или USB накопитель с использованием утилиты dd , но мы предпочитаем использовать ddrescue (из пакета gddrescue).

Для систем, основанных на Debian, например, Ubuntu MATE, выполните:

sudo apt update sudo apt install gddrescue 

Чтобы найти имя подключенного блочного устройства USB или microSDHC используйте команду:

sudo fdisk -l 

For example, in the image below, the USB drive is /dev/sdb (third entry) and the first and only partition is /dev/sdb1 (last entry). Checking the name of your device is a key step, as writing to the wrong device might corrupt or destroy your data.

Экранный снимок команды fdisk в терминале

После того как вы подтвердили выбор правильного блочного устройства, введите команду, заменяя path/to/iso и sdx на пути к iso файлу и блочному устройству USB накопителя или microSDHC.

sudo ddrescue --force -D path/to/iso /dev/sdx 

Ubuntu/Ubuntu MATE

Программа GNOME Disks предустановлена в Ubuntu 16.04 и новее. Она предоставляет простой способ создания загрузочных USB накопителей.

Если программа Диски не установлена в вашей системе, вы можете установить ее через терминал:

sudo apt-get install gnome-disk-utility 
  1. Загрузите выбранный образ Ubuntu MATE, запомните его каталог хранения, затем подключите USB накопитель. Убедитесь, что он виден в Файловом Менеджере/Caja. Учтите, что дальнейший процесс отформатирует USB накопитель и сотрет все существующие на нем данные, поэтому убедитесь в наличии их резервной копии.
  2. Нажмите правой кнопкой мыши на файле ISO, и выберите “Открыть в Disk Image Writer.” Меню правой кнопки мыши для ISO файла
  3. Выберите ваш USB накопитель в меню “Назначение”. Экранный снимок окна восстановления образа диска
  4. Нажмите “Начать восстановление”. При появлении запроса подтверждения записи образа на накопитель нажмите “Восстановить.” Экранный снимок GNOME Disks при подтверждении восстановления
  5. Может появится запрос вашего пароля. Введите его и нажмите “Аутентификация”.
  6. GNOME Disks начнет процесс записи образа с отображением его прогресса и оценки необходимого времени. Экранный снимок GNOME Disks при записи данных

После окончания извлеките (или выключите) диск перед его отключением от компьютера.

© 2014-2023 Ubuntu MATE Team

Официальная редакция семейства Ubuntu. Ubuntu является торговой маркой Canonical Ltd.

Создаем свой загрузочный диск Linux

В статье описывается, как создать собственный загрузочный диск Linux (оптический диск или флешку), добавить в него только нужные программы и убрать все лишнее. Полученный образ в экспериментах занял менее 25 Мб. Он позволяет быстро загружаться, работать в текстовом режиме, создавать, редактировать, удалять файлы на разных файловых системах, имеет поддержку русского языка. За основу взят Debian.

Для того, чтобы создать загрузочный диск, необходимо создать его образ, iso-файл, который затем можно записать на оптический диск или флешку. В общем случае порядок загрузки выглядит следующим образом:

Порядок загрузки Linux

Подготовка

Для начала необходимо создать пустой каталог livecd, в котором будет проводиться дальнейшая работа. В нем необходимо создать подкаталог iso, в котором будет формироваться образ диска. Используемые в статье названия файлов и каталогов не являются обязательными. Если какое-то название является обязательным, об этом будет указано.

Добавление загрузчика UEFI

Для добавления загрузчика UEFI понадобятся файлы, которые могут отсутствовать на компьютере. Чтобы их получить, необходимо установить ряд пакетов:

apt install grub-efi-amd64-bin dosfstools mtools

Далее в каталоге livecd необходимо создать вспомогательные файлы:

set timeout=1 menuentry 'Live CD' < linux /linux >
search --file --set=root /grub.cfg if [ -e ($root)/grub.cfg ]; then set prefix=($root) configure $prefix/grub.cfg else echo can't find grub.cfg fi

Загрузчик добавляется командой:

cp grub.cfg iso/grub.cfg mkdir -p EFI/BOOT grub-mkimage --prefix '' --config "grub-inst.cfg" -O x86_64-efi -o 'EFI/BOOT/bootx64.efi' acpi appleldr boot configfile efi_gop efi_uga elf fat fixvideo font gettext gfxmenu gfxterm gfxterm_background gfxterm_menu iso9660 linux memdisk minicmd normal part_gpt part_msdos search sleep usb video video_bochs video_cirrus video_fb videotest mkdosfs -F12 -n "EFI" -C iso/efiboot.img 2048 mcopy -s -i iso/efiboot.img EFI :: rm -r EFI

В результате в каталоге iso появятся два файла: grub.cfg и efiboot.img.

Добавление загрузчика BIOS

На древних компьютерах UEFI отсутствует. Вместо этого там используется BIOS. Чтобы создаваемый диск мог загружаться на таких компьютерах тоже, необходимо добавить загрузчик BIOS. Для получения файлов необходимо установить ряд пакетов:

apt install isolinux syslinux-common

Далее в каталоге livecd необходимо создать вспомогательный файл (отступ не обязателен):

UI menu.c32 PROMPT 0 TIMEOUT 1 MENU TITLE Boot Menu LABEL default MENU LABEL Live CD linux linux initrd init.ram 

После этого нужно выполнить команды:

cp syslinux.cfg iso cp /usr/lib/ISOLINUX/isolinux.bin iso cp /usr/lib/syslinux/modules/bios/ iso

В результате в каталоге iso появится еще ряд файлов.

Создание образа и диска

Образ (файл livecd.iso) создается командой:

xorriso -as mkisofs -r -o livecd.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -J -l -joliet-long -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot -isohybrid-gpt-basdat iso

Далее эта команда будет называться (1). Образ записывается на оптический диск командой:

wodim livecd.iso

Образ записывается на флешку командой (будем считать, флешка является устройством /dev/sdz):

dd if=livecd.iso of=/dev/sdz

Указывать нужно саму флешку, а не раздел на ней, то есть /dev/sdz , но не /dev/sdz1 .

Удалить linux с флешки и отформатировать ее обратно можно командой:

wipefs -a /dev/sdz mkfs.exfat /dev/sdz

Проверка работоспособности созданного образа

Проверить созданный образ можно как на настоящем компьютере, так и с помощью виртуальной машины. Например, в VMware можно создать новую виртуальную машину без жесткого диска, но с CD-приводом, в качестве образа указать файл livecd.iso. Переключение между UEFI и BIOS осуществляется в настройках этой виртуальной машины в разделе Options – Advanced – Firmware type.

Переключение между UEFI и BIOS в VMware

При загрузке в режиме UEFI отобразится меню загрузчика:

Загрузчик GRUB

Загрузчик попытается загрузить Linux, но поскольку он еще не добавлен, отобразится сообщение об ошибке «file /linux not found».

При загрузке в режиме BIOS отобразится меню загрузчика:

Загрузчик Syslinux

Поскольку Linux еще не добавлен, это меню уйдет в бесконечный цикл.

Добавление ядра Linux

Ядро Linux обычно хранится в каталоге /boot и представляет собой файл с названием «vmlinuz-XXX», где XXX — версия ядра. Добавить текущее ядро в создаваемый образ можно командой:

cp $(ls -t /boot/vmlinuz-$(uname -r) | head -n 1) iso/linux

После этого в каталоге iso появится файл linux. Далее необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска».

Чтобы не зависеть от версии ядра, указанной здесь командой « cp $(ls -t … » ядро не просто копируется, а переименовывается в linux без указания версии. Именно это имя файла указано вторым элементом в файлах grub.cfg и syslinux.cfg в строке « linux linux ». Если в каталоге /boot имеется несколько ядер, можно использовать любое, главное, запомнить его версию. Далее в статье будет рассматриваться использование текущего ядра.

После добавления ядра загрузчики UEFI и BIOS перестанут ругаться на его отсутствие и запустят его выполнение. В свою очередь ядро успешно запустится и, в условиях отсутствия файловой системы, выдаст сообщение об ошибке «Kernel Panic. Unable to mount root fs».

Добавление файловой системы

В данной статье в качестве корневой файловой системы рассматривается использование временной файловой системы, которая размещается в оперативной памяти (initramfs). Для ее создания необходимо создать в каталоге livecd подкаталог initramfs, в нем пустой файл с названием init. Файл с таким названием почему-то обязательно должен быть и находиться в корне файловой системы, иначе ядро проигнорирует такую initramfs. Далее необходимо выполнить команды:

cd initramfs find . | cpio -o -H newc --owner=root.root | gzip -9 > ../iso/init.ram cd ..

В результате в подкаталоге iso появится файл init.ram. Его необходимо указать в файле grub.cfg, добавив перед закрывающей фигурной скобкой строку « initrd /init.ram ».

set timeout=1 menuentry 'Live CD' < linux /linux initrd /init.ram >

В конец файла syslinux.cfg нужно добавить строку « initrd init.ram» .

UI menu.c32 PROMPT 0 TIMEOUT 1 MENU TITLE Boot Menu LABEL default MENU LABEL LiveCD linux linux initrd init.ram

После этого необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска». Теперь при загрузке Linux будет сообщать об ошибке «Kernel Panic. No working init found». В данном случае это сообщение означает, что ядро успешно запустилось и даже признало файловую систему initramfs, нашло в нем файл init и попыталось его запустить, но не получилось, потому что этой пустой файл.

Минимальный работающий init

В каталоге initramfs нужно создать следующую структуру файлов:

├─lib (каталог с двумя файлами) │ ├─ ld-linux-x86-64.so.2 (из /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2) │ └─ libc.so.6 (из /lib/x86_64-linux-gnu/libc.so.6) ├─lib64 (символическая ссылка на lib) └─init (из /bin/dash)

В initramfs должен получиться один подкаталог lib с двумя файлами в нем, одна символическая ссылка lib64 и один файл init. В скобках указано, какие файлы нужно взять из текущего работающего компьютера. Файлы должны быть исполняемыми. Далее необходимо пересобрать образ командами:

cd initramfs find . | cpio -o -H newc --owner=root.root | gzip -9 > ../iso/init.ram cd .. xorriso -as mkisofs -r -o livecd.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -J -l -joliet-long -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot -isohybrid-gpt-basdat iso

Далее эти команды будут называться командой (2).

Если все сделать правильно, получится минимальный работающий образ с командной строкой. В моем случае его размер составил чуть более 12 Мб. В командной строке не работают никакие команды, они будут добавлены позже. Если по-прежнему отображается сообщение об ошибке «No working init found», необходимо проверить:

  1. Названия файлов, каталога и символической ссылки.
  2. Права доступа: в каталог можно зайти, файлы должны быть исполняемыми.
  3. Файлы предназначены для одной архитектуры x86_64. На некоторых компьютерах могут одновременно быть установлены 32 и 64 битные версии программ и библиотек. Узнать архитектуру файла можно командой objdump -p . В начале вывода должна быть строка типа «формат файла elf64-x86-64».

Если завершить работу командной строки командой exit , ядро выдаст ошибку «Kernel Panic. Attempted to kill init». Командная строка была первым и единственным процессом (PID=1) и после его завершения ядро не знает, что делать дальше.

Наполнение initfamfs простыми программами

Простой программой здесь называется программа, состоящая из одного исполняемого файла, например dash, mkdir, mount. В противоположность сложные программы содержат большое количество обязательных дополнительных файлов, например: текстовые, аудио и видеоредакторы, браузеры и т.п.

По сложившейся традиции программы размещаются в каталоге bin. В каталоге initramfs нужно создать подкаталог bin и скопировать туда файл ls из одноименного каталога работающей системы.

Многие программы в своей работе используют вспомогательные so-файлы (программные библиотеки), без которых они не запустятся. Узнать, какие so-файлы нужны программе, можно с помощью уже упоминавшейся команды objdump -p .

Вывод команды « objdump -p ls »:

… Динамический раздел: NEEDED libselinux.so.1 NEEDED libc.so.6 …

Файл libc.so.6 в initfamfs уже есть, а вот файл libselinux.so.1 нужно найти на работающем компьютере и скопировать в каталог initramfs/lib к другим so-файлам. Список каталогов, в которых нужно искать требуемый so-файл, можно взять из файлов /etc/ld.so.conf и /etc/ ld.so.conf.d/*. Библиотека libselinux.so.1 в свою очередь также зависит от других библиотек. С помощью команды objdump -p libselinux.so.1 можно узнать, что кроме уже имеющихся файлов libc.so.6 и ld-linux-x86-64.so.2 дополнительно требуется libpcre2-8.so.0. На работающей системе этот файл представляет собой символическую ссылку на файл libpcre2-8.so.0.11.0. При копировании в initramfs можно оставить имеющуюся структуру, т.е. скопировать libpcre2-8.so.0 как символическую ссылку и далее скопировать файл libpcre2-8.so.0.11.0. Можно поступить по-другому и скопировать файл libpcre2-8.so.0.11.0, переименовав его в libpcre2-8.so.0. Команда objdump -p libpcre2-8.so.0 показывает, что каких-либо других so-файлов, отсутствующих в initramfs, больше не требуется. В результате должна получиться следующая структура каталога initramfs:

├─bin │ └─ ls ├─lib │ ├─ ld-linux-x86-64.so.2 │ ├─ libc.so.6 │ ├─ libpcre2-8.so.0 │ └─ libselinux.so.1 ├─lib64 (=> lib) └─init

В скобках указана символьная ссылка.

При копировании so-файлов нужно не забывать проверять их архитектуру, если на компьютере есть файлы разных архитектур.

С помощью команды (2) из раздела «Минимальный работающий init» можно пересоздать образ, запустить и убедиться, что команда ls работает.

Автоматизация наполнения initfamfs простыми программами

В предыдущем разделе показано, что добавление простых программ требует рекурсивного поиска и копирования дополнительных so-файлов. Эту задачу можно автоматизировать, написав свой скрипт, либо используя программу copyso. При ее использовании достаточно указать требуемые для копирования программы, после чего выполнить еще несколько команд, чтобы сформировать оставшуюся часть структуры каталогов. В каталоге livecd необходимо заново создать пустой подкаталог initramfs и выполнить следующие команды:

copyso -p dash ls ln mkdir cat mount initramfs ln -s lib initramfs/lib64 ln -s x86_64-linux-gnu/ld-linux-x86-64.so.2 initramfs/lib64/ld-linux-x86-64.so.2 ln -s usr/bin/dash initramfs/init

Первая команда копирует программы dash, ls, ln, mkdir, cat, mount. Остальные нужны, чтобы правильно сформировать структуру каталогов.

Получившаяся структура каталогов

├─lib │ ├─x86_64-linux-gnu │ │ ├─ ld-linux-x86-64.so.2 │ │ ├─ libblkid.so.1 (=> libblkid.so.1.1.0) │ │ ├─ libblkid.so.1.1.0 │ │ ├─ libc.so.6 │ │ ├─ libmount.so.1 (=> libmount.so.1.1.0) │ │ ├─ libmount.so.1.1.0 │ │ ├─ libpcre2-8.so.0 (=> libpcre2-8.so.0.11.0) │ │ ├─ libpcre2-8.so.0.11.0 │ │ └─ libselinux.so.1 │ └─ ld-linux-x86-64.so.2 (=> x86_64-linux-gnu/ld-linux-x86-64.so.2) ├─ lib64 (=> lib) ├─usr │ └─bin │ ├─ cat │ ├─ dash │ ├─ ln │ ├─ ls │ ├─ mkdir │ └─ mount └─ init (=> usr/bin/dash)

В скобках указаны символьные ссылки.

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

Добавление программ посложнее

Универсальный способ копирования сложных программ в initramfs предложить сложно. В самый неожиданный момент времени такая программа может обратиться к какому-нибудь файлу, который нигде не указан, но подразумевается автором программы и даже создается при штатной установке. Описываемый в статье способ подразумевает копирование существующих программ, а не их полноценную установку. Однако можно предложить способ, основанный на особенностях deb-пакетов в операционной системе Debian. В каталоге /var/lib/dpkg/info есть list-файлы для каждого установленного пакета. В этих list-файлах содержится перечень файлов, созданных при установке пакета. Не все из них являются обязательными, но, как сказано выше, с каждым нужно разбираться индивидуально либо копировать все, что есть. Для копирования всего пакета можно использовать следующий скрипт:

DEBS="e2fsprogs mc" copy_deb() < for F in $(cat /var/lib/dpkg/info/$1.list); do if [ -d $F ]; then mkdir -p initramfs$F elif [ -f $F ]; then copyso $copy_params /$F initramfs fi done >for DEB in $DEBS; do copy_deb $DEB done rm -rf initramfs/usr/share/

В первой строке перечисляются нужные пакеты (в примере их два), дальнейшие команды копируют файлы. Последняя команда удаляет файлы, которые скорее всего не понадобятся.

Если добавить таким образом Midnight Commander (команда mc ), можно убедиться, что он запустится (условно). Скорее всего, таким вы его еще не видели.

Добавление модулей ядра

Модули ядра это файлы с расширением «ko», которые расположены в подкаталогах каталога /lib/modules//. Есть модули для работы с жесткими дисками, с разными файловыми системами, с устройствами USB и т.д. Составление перечня модулей, необходимых для каждого конкретного устройства, в данной статье не рассматривается. Предполагается, читатель знает, какие именно модули ему нужны.

Доя добавления нужных модулей в initramfs нужно скопировать их в формируемую файловую структуру с сохранением пути. Например, модуль для работы с жесткими дисками /lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko нужно скопировать в initramfs/lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko, создав недостающие каталоги (на момент написания статьи использовалось ядро версии 6.0.0-6-amd64).

Как и so-файлы, ko-файлы могут требовать для своей работы наличия других ko-файлов. Эти зависимости указаны в файле /lib/modules//modules.dep. В частности, sd_mod.ko зависит от scsi_mod.ko, scsi_common.ko, crc64.ko и других. Их также необходимо скопировать с сохранением пути и учетом того, что они, в свою очередь, могут зависеть от других модулей и так далее рекурсивно.

Эту задачу, как и предыдущую, можно автоматизировать, написав свой скрипт, либо используя программу copyko. При ее использовании для добавления модулей ядра необходимо выполнить команды:

copyko ahci sd_mod initramfs/lib/modules/$(uname -r) cp /lib/modules/$(uname -r)/modules.builtin* initramfs/lib/modules/$(uname -r) depmod -b initramfs

Первая команда копирует модули ahci и sd_mod в initramfs. Вторая копирует информацию о модулях (функционале ядра), которые уже встроены в ядро. Последняя команда создает информацию о зависимостях модулей друг от друга. Стоит отметить, что речь идет только о дисках SATA. При работе в VMware, если жесткий диск представлен как SCSI, дополнительно необходим модуль mptspi. При работе с другими дисками, например NVMe, нужны свои модули. Также понадобится программа modprobe:

copyso -p modprobe initramfs

После обновления образа командой (2) можно загрузиться с него и проверить, что появился доступ к жесткому диску компьютера. Для этого в командной строке созданного образа необходимо выполнить команды:

mount -nt devtmpfs none /dev modprobe ahci modprobe sd_mod

При использовании других типов дисков, отличных от SATA, необходимо загрузить соответствующие им модули. После выполнения указанных команд в каталоге /dev/ появятся устройства типа sda, sda1, sda2, обозначающие найденные жесткие диски и разделы на них. Для автоматической загрузки всех имеющихся модулей можно использовать команду:

for m in $(find /lib/modules -name '*.ko'); do modprobe $(basename -s .ko $m); done

Использующиеся здесь программы find и basename нужно заранее добавить в образ. Чтобы эта команда выполнялась автоматически, нужно создать загрузочный скрипт:

#!/usr/bin/dash mount -nt devtmpfs none /dev for m in $(find /lib/modules -name '*.ko'); do modprobe $(basename -s .ko $m); done /usr/bin/dash

Этот скрипт нужно сохранить в файл initramfs/init вместо созданной ранее символической ссылки, и сделать его исполняемым.

Помимо указанных двух модулей скорее всего понадобится множество других. Для автоматизации их добавления можно предложить скрипт:

Скрипт добавления популярных модулей

KERVER=$(uname -r) MODS="sr_mod sd_mod ahci mptspi" # Для оптических и жестких дисков: MODS="$MODS sg evdev ata_generic ata_piix libsas uas mptsas" for m in $(find /lib/modules/$KERVER/kernel/drivers/ata/ -name 'sata*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done # Для SSD дисков: for m in $(find /lib/modules/$KERVER/kernel/drivers/nvme/ -name '*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done # Файловые системы: MODS="$MODS squashfs overlay ext4 vfat exfat fuse udf isofs loop hfsplus libcrc32c crc32c-intel crc32c_generic" # Языковые кодировки файловых систем: for m in $(find /lib/modules/$KERVER/kernel/fs/nls/ -name '*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done # USB: MODS="$MODS ehci-pci ohci-pci uhci-hcd xhci-pci usbhid i2c-hid psmouse hid-generic" # EFI: MODS="$MODS efivarfs" copyko $MODS initramfs/lib/modules/$KERVER cp -uf /lib/modules/$KERVER/modules.builtin* initramfs/lib/modules/$KERVER depmod -b initramfs 

Если при загрузке отображаются такие сообщения:

Run /init as init process Failed to execute init (error -13) Run /sbin/init as init process Run /etc/init as init process Run /bin/init as init process Run /bin/sh as init process
  • Файл init действительно лежит в корне формируемой файловой системы и он исполняемый (chmod +x init);
  • Если это бинарный файл, то для него есть необходимые so-файлы;
  • Если это скрипт, то для него есть интерпретатор, указанный в первой строке и размещенный именно по указанному пути (напр. #!/usr/bin/dash);
  • Для интерпретатора есть необходимые so-файлы.

Настройка консоли

Далее приводится несколько рекомендаций, как настроить консоль образа, сделать ее более удобной. Для этого требуется программа настройки консоли:

apt install console-setup

Чтобы в Midnight Commander заработали клавиши со стрелками, необходимо добавить в образ нужный файл командами:

mkdir -p initramfs/lib/terminfo cp -r /lib/terminfo/l initramfs/lib/terminfo

Чтобы Midnight Commander стал цветным, необходимо добавить цвета в образ:

cp -r /usr/share/mc/ initramfs/usr/share/mc

Чтобы Midnight Commander не выдавал сообщение «Pipe failed» при попытке редактирования файлов:

mkdir initramfs/bin ln -s /usr/bin/dash initramfs/bin/sh

Чтобы отображался текст на русском языке, нужно добавить русский шрифт:

cp $(find /etc/console-setup -name '*.psf.gz' | head -n 1) initramfs/etc/font.psf.gz gunzip initramfs/etc/font.psf.gz

а в скрипт «init» добавить команду загрузки шрифта:

setfont /etc/font.psf

Чтобы можно было вводить с клавиатуры текст на русском языке, нужно добавить русскую раскладку клавиатуры:

cp $(find /etc/console-setup -name '*.kmap.gz' | head -n 1) initramfs/etc/keys.kmap.gz gunzip initramfs/etc/keys.kmap.gz

а в скрипт «init» добавить команду загрузки этой раскладки:

loadkeys /etc/keys.kmap

Чтобы в командной строке работали клавиши со стрелками, нужно вместо dash использовать bash.

Чтобы отображались имена файлов на русском языке, нужно добавить в образ локаль:

mkdir -p initramfs/usr/lib/locale cp /usr/lib/locale/locale-archive initramfs/usr/lib/locale

а в скрипт «init» добавить команду загрузки локали:

export LANG=ru_RU.UTF-8

Итого

На основе представленной информации создан небольшой набор скриптов (2 шт.) для создания загрузочного диска. Для работы с ними необходимо:

1. Установить требуемые deb пакеты

apt install grub-efi-amd64-bin dosfstools mtools isolinux syslinux-common console-setup

2. Установить программы copyso и copyko.

4. Запустить скрипт 1.mkinitramfs.sh. В результате создастся подкаталог initramfs.

5. Изменить содержимое initramfs по своему желанию.

6. Запустить скрипт 2.mkiso.sh. В результате создастся файл-образ livecd.iso.

7. Записать образ на флешку или диск.

Чтобы вернуть initramfs в исходное состояние, необходимо заново запустить 1.mkinitramfs.sh.

Надеюсь, эта статья будет полезной тем, кто изучает основы Linux.

Как создать загрузочную флешку с типом образа диска UDF в Ubuntu 20.4

Здравствуйте, попал в безвыходную ситуацию. 3 месяца назад поставил Ubuntu, и понял, что мне не подходит данная операционная система. Уже скачал образ диска с официального сайта Microsoft, но при попытке записи образа на флешку через стандартное приложение «Создать загрузочный диск» образ просто не добавляется в программу. То есть я выбираю образ Win10_21H2_Russian_x64.iso, но он не отображается в программе. Позже я понял, что дело в какой-то кодировке UDF, которая криво стоит на Ubuntu. Также в файле README в образе написано следующее:

This disc contains a «UDF» file system and requires an operating system that supports the ISO-13346 «UDF» file system specification.

Прошу, знающие люди, помогите. Я уже половину интернета обыскал.

mattewpushy
27.12.21 15:15:07 MSK

  • Ответить на это сообщение
  • Ссылка

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *