mkinitcpio (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
mkinitcpio
. Дата последней синхронизации: 12 августа 2025. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Booster
Отладка загрузки
dracut
Модули ядра
mkinitcpio/Minimal initramfs
systemd (Русский)
Unified kernel image
mkinitcpio
— это bash-скрипт, используемый для создания
начального загрузочного диска
системы. Из man-страницы
mkinitcpio(8)
:
Начальный ram-диск по сути представляет собой очень маленькую среду (раннее пользовательское пространство, early userspace), которая загружает различные модули ядра и настраивает необходимые вещи перед передачей управления процессу
init
. Это позволяет, например, использовать зашифрованную корневую файловую систему или разместить её на программном RAID-массиве.
mkinitcpio
легко расширяется с помощью настраиваемых хуков, имеет автоопределение во время работы системы и многие другие функции.
Традиционно ядро отвечает за обнаружение всего оборудования и выполняет задачи на ранних этапах
процесса загрузки
до монтирования корневой файловой системы. Однако по мере развития технологий эти задачи становятся всё более сложными.
В настоящее время корневая файловая система может быть на широком диапазоне аппаратных средств от SCSI до SATA и USB дисков, управляемых различными контроллерами от разных производителей. Кроме того корневая файловая система может быть зашифрована или сжата, находиться в RAID массиве или группе логических томов. Простой способ справиться с этой сложностью является передача управления в пользовательском пространстве: начальный загрузочный диск.
Смотрите также:
/dev/brain0 » Blog Archive » Early Userspace in Arch Linux
.
mkinitcpio
разрабатывается разработчиками Arch Linux при участии сообщества. Смотрите
публичный Git-репозиторий mkinitcpio
.
Важно отметить, что существует два различных подхода к выполнению задач на этапе работы начального загрузочного диска:
На основе Busybox
Запускается init-скрипт, который, в свою очередь, сканирует файловую систему ram-диска в поисках скриптов для выполнения (в данном контексте называемых «runtime hooks»). Плюсы: лёгкий, небольшой размер, меньше зависимостей.
На основе systemd
systemd запускается уже в начале работы начального загрузочного диска. Выполняемые задачи определяются с помощью обычных юнитов systemd. Смотрите
процесс запуска systemd
. Плюсы: тесная интеграция с остальной частью экосистемы systemd, что приводит к более последовательному и оптимизированному процессу запуска. Более эффективная параллелизация определённых задач загрузки, что в некоторых случаях может привести к сокращению общего времени запуска. Более полный набор функций, например
systemd-cryptsetup-generator
с
/etc/crypttab.initramfs
или
автомонтирование GPT-разделов
. Минусы: Больше зависимостей и больший размер: как правило, приводит к увеличению размера initramfs из-за включения исполняемых файлов systemd и его зависимостей. Это может немного увеличить время загрузки.
Используемый подход выбирается путём добавления или удаления
systemd
в массиве
HOOKS
в файле
/etc/mkinitcpio.conf
. Подробнее в разделе
#Доступные хуки
.
Установка
Установите
пакет
mkinitcpio
, который является зависимостью пакета
linux
, поэтому большинство пользователей уже установили его.
Продвинутые пользователи могут захотеть установить последнюю версию mkinitcpio из Git с пакетом
mkinitcpio-git
AUR
.
Создание загрузочного образа
Автоматическая генерация
Каждый раз, когда ядро устанавливается или обновляется,
pacman-хук
генерирует файл предустановки (
.preset
) и сохраняет его в
/etc/mkinitcpio.d/
. Например, для официального пакета
linux
создаётся файл
linux.preset
. Предустановка — это просто список информации, необходимой для создания начальных образов RAM-диска, вместо того, чтобы вручную указывать различные параметры и расположение выходных файлов.
По умолчанию mkinitcpio генерирует два образа после установки или обновления ядра:
default
, создаваемый в соответствии с директивами, указанными в
настройках
, и
fallback
, который создается с точно таким же конфигурационным файлом за исключением хука
autodetect
, что позволяет включить в него все модули.
После создания файла предустановки pacman-хук запускает скрипт
mkinitcpio
, который генерирует два образа, используя информацию, указанную в этом файле.
Примечание
.preset
файлы используются для автоматической пересборки initramfs после обновления ядра. Будьте внимательны при их редактировании.
Ручная генерация
Чтобы запустить скрипт вручную, обратитесь к
mkinitcpio(8)
для чтения инструкций. В частности, чтобы (повторно) сгенерировать образ initramfs, используя предустановку, предоставленную пакетом ядра, используйте параметр
-p
/
--preset
с именем нужной предустановки. Например, для ядра
linux
используйте такую команду:
# mkinitcpio -p linux
Чтобы (повторно) сгенерировать образы initramfs, используя все существующие предустановки, используйте параметр
-P
/
--allpresets
. Обычно это используется для перегенерации всех образов initramfs после изменения глобальных
настроек
:
# mkinitcpio -P
Можно создать любое количество образов initramfs с различными конфигурациями. Путь к нужному образу должен быть прописан в настройках
загрузчика
.
Варианты создания initcpio
Пользователи могут вручную создать образ с помощью альтернативного конфигурационного файла. Например, следующее будет генерировать initramfs образ в соответствии с
/etc/mkinitcpio-custom.conf
и сохранит его в
/boot/linux-custom.img
.
# mkinitcpio --config /etc/mkinitcpio-custom.conf --generate /boot/initramfs-custom.img
Если необходимо создать образ с ядром отличным от загруженного, добавьте параметр с версией ядра. Доступные версии ядер можно посмотреть в
/usr/lib/modules
, синтаксис соответствует выводу
uname -r
для каждого ядра.
# mkinitcpio --generate /boot/initramfs-custom2.img --kernel 5.7.12-arch1-1
Unified kernel images
mkinitcpio
может генерировать
unified kernel image
(UKI) самостоятельно или через
systemd-ukify
. Если
systemd-ukify
не установлен или явно отключен опцией
--no-ukify
, mkinitcpio соберёт UKI сам, но тогда дополнительные возможности, которые предоставляет
ukify
, будут недоступны.
Подробнее в статье
Unified kernel image
.
Настройка
/etc/mkinitcpio.conf
— основной файл настроек
mkinitcpio
. Поддерживаются drop-in файлы, например
/etc/mkinitcpio.conf.d/myhooks.conf
(но они игнорируются при запуске с опцией
-c
и/или использовании предустановки, содержащей
ALL_config
). Кроме того, в каталоге
/etc/mkinitcpio.d
располагаются файлы предустановок (например
/etc/mkinitcpio.d/linux.preset
).
Можно изменять семь переменных в файле настроек (подробнее в документации
mkinitcpio.conf(5) § VARIABLES
):
MODULES
Модули ядра, которые будут загружены до выполнения хуков.
BINARIES
Дополнительные исполняемые файлы, которые необходимо включить в initramfs.
FILES
Дополнительные файлы, которые необходимо включить в initramfs.
HOOKS
Хуки — скрипты, выполняемые в initramfs.
COMPRESSION
Тип используемого сжатия initramfs.
COMPRESSION_OPTIONS
Дополнительные опции, передаваемые программе, указанной в переменной
COMPRESSION
. Использование этого параметра не рекомендуется.
mkinitcpio
будет обрабатывать особые требования к инструментам сжатия (например
--check=crc32
для xz), и неправильное использование может привести к невозможности запуска системы.
MODULES_DECOMPRESS
Разжимать ли загружаемые модули ядра и файлы прошивок перед их записью в initramfs или сохранять их в исходном сжатом виде.
Примечание
Некоторые хуки, которые могут быть нужны для вашей системы, вроде
lvm2
,
mdadm_udev
и
encrypt
,
НЕ
включены по умолчанию. Смотрите раздел
#HOOKS
, чтобы узнать, как их включить и настроить.
Файлы предустановок, созданные через
mkinitcpio
до версии 36, устанавливают переменную
ALL_config
, что предотвращает загрузку drop-in файлов. Чтобы они загружались, закомментируйте строку
ALL_config="/etc/mkinitcpio.conf"
в старых файлах предустановок.
MODULES
Указывает, какие модули ядра должны быть загружены перед выполнением всех остальных действий.
Для модулей с суффиксом
?
не будет выводиться ошибка, если они не будут найдены. Это может быть полезно для пользовательских ядер.
Примечание
При использовании сторонних (out-of-tree) файловых систем, которые нужно монтировать в early userspace (например, если такая файловая система используется для корневого раздела), соответствующие модули (например,
reiser4
)
должны
быть добавлены в массив
MODULES
.
При использовании хука
encrypt
или
sd-encrypt
модули клавиатуры и/или файловых систем, необходимые для разблокировки устройства LUKS во время загрузки системы, нужно добавить в массив
MODULES
, когда целевая система отличается от той, которая использовалась для запуска
mkinitcpio
. Например, если вы используете keyfile в файловой системе ext2, но во время запуска mkinitcpio файловая система ext2 не смонтирована, добавьте
ext2
. Подробнее смотрите
dm-crypt/System configuration#cryptkey
.
Если клавиатура подключена через USB3-хаб и вы хотите использовать её для разблокировки LUKS устройства, добавьте
usbhid xhci_hcd
.
При использовании дисплеев, подключенных к док-станции, вам может потребоваться добавить модуль для вашей видеокарты, чтобы сделать вывод initrd видимым (например
i915
для большинства карт Intel).
BINARIES и FILES
Указывают, какие файлы необходимо добавить в initramfs.
BINARIES
и
FILES
будут добавлены перед запуском хуков и могут использоваться для переопределения файлов, используемых или предоставляемых хуками.
BINARIES
— бинарные файлы из
PATH
, все необходимые для их работы библиотеки будут добавлены автоматически.
FILES
добавляет файлы как есть. Например:
FILES=(/etc/modprobe.d/modprobe.conf)
BINARIES=(kexec)
И
BINARIES
, и
FILES
являются
bash
-массивами, в них можно добавить несколько файлов с пробелом в качестве разделителя.
HOOKS
Массив
HOOKS
наиболее важный в файле настроек. Хуки — это небольшие скрипты, которые описывают, что будет добавлено к образу, а также дополнительные действия, выполняемые при загрузке системы. Хуки указываются по имени и выполняются в порядке, заданном в массиве
HOOKS
.
Значение по умолчанию для
HOOKS
должно быть достаточным для большинства простых установок с одним диском. Для корневых устройств, которые являются многоуровневыми или многоблочными устройствами, такими как
LVM
,
mdadm
или
dm-crypt
, смотрите cоответствующие страницы вики для дальнейшей необходимой конфигурации.
Build hooks
Build hooks — хуки сборки. Располагаются в
/usr/lib/initcpio/install/
; пользовательские хуки можно добавить в
/etc/initcpio/install/
.
mkinitcpio
выполняет source этих файлов в bash во время сборки initramfs. Должны содержать две функции:
build
и
help
. Функция
build
перечисляет модули, файлы и исполняемые файлы, которые добавляются в образ. Функции, которые могут использовать хуки сборки, описаны в
mkinitcpio(8)
. Функция
help
выводит описание действий хука.
Для получения списка всех доступных хуков:
$ mkinitcpio -L
Используйте опцию
-H
/
--hookhelp
для вывода информации о конкретном хуке:
$ mkinitcpio -H udev
Runtime hooks
Runtime hooks — хуки времени выполнения. Располагаются в
/usr/lib/initcpio/hooks/
, пользовательские хуки можно добавить в
/etc/initcpio/hooks/
. Для любого runtime-хука всегда должен быть build-хук, имеющий такое же имя и вызывающий функцию
add_runscript
, которая добавит runtime-хук в образ. Во время early userspace выполняется source этих файлов командным интерпретатором ash из busybox. Они запускаются по порядку записи в
HOOKS
, за исключением хуков очистки. Runtime-хуки могут содержать несколько функций:
run_earlyhook
: Функции с таким именем будут запускаться один раз после монтирования API файловых систем и обработки командной строки ядра. Как правило, здесь запускаются дополнительные демоны, такие как udev, необходимые для раннего процесса загрузки.
run_hook
: Функции с таким именем запускаются вскоре после ранних хуков. Эта функция используется чаще всего, и здесь должны выполняться операции, такие как сборка многоуровневых блочных устройств.
run_latehook
: Функции c этим именем запускаются после того, как была примонтирована корневая файловая система. Это следует использовать ограниченно для дальнейшей настройки корневой ФС или для монтирования других файловых систем, таких как
/usr
.
run_cleanuphook
: Функции с этим именем запускаются как можно позже и в порядке обратном порядку их перечисления в массиве
HOOKS
из файла настроек. Эти хуки должны использоваться для любой очистки в последнюю минуту, например, для закрытия всех демонов, запущенных ранними хуками.
Примечание
Runtime-хуки используются только в busybox init. Хук
systemd
запускает инициализацию на основе systemd, который вместо runtime-хуков использует юниты systemd.
Post hooks
Post hooks — исполняемые файлы, которые выполняются после завершения создания образа initramfs. Располагаются в
/usr/lib/initcpio/post/
, пользовательские хуки можно добавить в
/etc/initcpio/post/
. Их можно использовать для дополнительных задач вроде подписи созданного образа.
Каждый исполняемый файл запускается с тремя аргументами в таком порядке:
использованное
ядро
(иногда может быть пустым);
созданный
образ initramfs
;
(опционально) созданный
unified kernel image
.
Также устанавливаются переменные окружения
KERNELVERSION
, содержащая полную версию ядра, и
KERNELDESTINATION
, содержащая путь, в котором должно находиться ядро, чтобы оно могло быть загружено.
Доступные хуки
Таблица стандартных хуков и как они влияют на создание и выполнение образа. Обратите внимание, что эта таблица не является полной, так как пакеты могут предоставлять свои хуки.
busybox init
systemd init
Build hook
Runtime hook
(только busybox init)
base
опционален
Устанавливает все начальные каталоги, базовые утилиты и библиотеки. Всегда ставьте этот хук первым, за исключением случаев, когда вы действительно знаете, что делаете, если не используется хук
systemd
.
Опционален при использовании хука
systemd
, поскольку он лишь предоставляет busybox recovery shell.
Примечание
Командная оболочка восстановления недоступна, так как аккаунт root в initramfs
заблокирован
. Смотрите
archlinux/mkinitcpio/mkinitcpio#205
.
–
udev
systemd
Добавляет в образ udevd, udevadm и небольшое подмножество правил udev.
Запускает демон udev и обрабатывает uevents из ядра, создавая файлы устройств. Поскольку он упрощает процесс загрузки, не требуя от пользователя явного указания необходимых модулей, его использование рекомендуется.
usr
Добавляет поддержку отдельного раздела
/usr
. Подробнее:
#/usr на отдельном разделе
Монтирует раздел
/usr
после монтирования корневой файловой системы.
resume
Добавляет модули ядра
lzo
и
lz4
, позволяющие загрузить образ памяти, созданный при уходе в спящий режим, если этот образ сжат алгоритмом, не используемым по умолчанию. Добавляет исполняемый файл
systemd-hibernate-resume(8)
для поддержки загрузки образа памяти, указанного в UEFI-переменной
HibernateLocation
.
Пытается возобновить систему после спящего режима. Подробнее в разделе
Ждущий и спящий режимы#Гибернация
.
btrfs
–
Устанавливает необходимые модули для использования файловой системы
Btrfs
, расположенной на нескольких устройствах. Для использования хука нужно установить
btrfs-progs
. Этот хук не требуется, если Btrfs расположена на одном устройстве, так как для этого достаточно хука
filesystems
.
Запускает
btrfs device scan
для сборки корневой файловой системы Btrfs, расположенной на нескольких устройствах, когда хуки
udev
и
systemd
отсутствуют. Для использования хука нужно установить
btrfs-progs
.
autodetect
Уменьшает размер initramfs, пытаясь определить, какие модули вам нужны, сканируя sysfs. Проверьте список модулей, которые он добавил. Он должен запускаться раньше других подсистем. Все обработчики, выполняемые до него, будут включать все модули.
–
microcode
Перед основным образом initramfs добавляет несжатый образ, содержащий файлы с обновлениями
микрокода
для процессоров Intel и AMD. Использует файлы микрокода из каталогов
/usr/lib/firmware/amd-ucode/
и
/usr/lib/firmware/intel-ucode/
, если они доступны, иначе извлекает
/boot/amd-ucode.img
и
/boot/intel-ucode.img
.
Если перед этим хуком находится хук
autodetect
, будут добавлены файлы микрокода только для того процессора, на котором была запущена генерация образа.
Этот хук заменяет устаревший флаг
--microcode
и опцию
microcode
в файлах предустановок. Он также позволяет убрать из настроек загрузчика второй параметр
initrd
, указывающий на отдельный образ с микрокодом, поскольку микрокод теперь находится в одном файле с основным образом initramfs.
–
modconf
Добавляет конфигурационные файлы modprobe из
/etc/modprobe.d/
и
/usr/lib/modprobe.d/
–
kms
Добавляет модули видеокарт для
раннего запуска KMS
. Также добавляет модули, необходимые для экранов конфиденциальности (privacy screens), встроенных в ЖК-панели некоторых ноутбуков.
–
keyboard
Добавляет модули, необходимые для работы клавиатур. Используйте этот хук, если необходимо использовать USB-клавиатуру на ранней стадии загрузки (для ввода пароля от зашифрованных данных или для работы в командной оболочке). В качестве побочного эффекта также могут быть добавлены модули для некоторых устройств ввода без клавиатуры, но на это не следует полагаться.
Примечание
Для систем, которые загружаются с различными конфигурациями оборудования (например, ноутбуки с внешней клавиатурой или внутренней клавиатурой или
headless-системы
), этот хук необходимо поместить перед
autodetect
, чтобы иметь возможность использовать клавиатуру во время загрузки, например, чтобы разблокировать зашифрованное устройство при использовании хука
encrypt
.
–
keymap
sd-vconsole
Добавляет в initramfs раскладки, указанные в
/etc/vconsole.conf
. При использовании
шифрования системы
добавляйте его перед хуком
encrypt
.
Загружает раскладки, указанные в
/etc/vconsole.conf
.
consolefont
Добавляет в образ
консольный шрифт
, указанный в
/etc/vconsole.conf
.
Загружает шрифт, указанный в
/etc/vconsole.conf
.
block
Добавляет в образ модули блочных устройств. Если перед этим хуком находится хук
autodetect
, будут добавлены только модули, используемые в системе. Исключения — модули
ahci
,
sd_mod
,
usb_storage
,
uas
,
mmc_block
,
nvme
,
virtio_scsi
и
virtio_blk
, которые добавляются всегда.
–
net
не реализован
Добавляет модули, необходимые для сетевых устройств. Для использования хука нужно установить
mkinitcpio-nfs-utils
. Подробнее:
#При использовании net
Занимается обработкой корневой файловой системы, расположенной на NFS.
dmraid
?
Поддержка корневой файловой системы на fakeRAID массивах. Необходимо установить пакет
dmraid
. Обратите внимание, что рекомендуется использовать
mdadm
с хуком
mdadm_udev
с fakeRAID, если ваш контроллер поддерживает это. Подробнее:
#При использовании RAID
Находит и монтирует fakeRAID блочные устройства, используя
dmraid
.
mdadm_udev
Обеспечивает поддержку сборки RAID-массивов с помощью udev. Для использования хука нужно установить
mdadm
. Подробнее:
RAID#Configure mkinitcpio
–
encrypt
sd-encrypt
Добавляет в образ модуль ядра
dm_crypt
и инструмент
cryptsetup
. Для использования хука нужно установить
cryptsetup
.
Примечание
Обратите внимание на замечания для хука
keyboard
выше для разблокировки зашифрованного устройства во время загрузки, а также примечания о файловых системах в
#MODULES
, если вы используете файл для разблокировки.
Определяет и подключает зашифрованный корневой раздел. Смотрите
#Настройка во время выполнения
для дальнейшей настройки.
Для
sd-encrypt
смотрите
dm-crypt/System configuration#Using systemd-cryptsetup-generator
.
lvm2
Добавляет в образ модуль ядра device mapper и инструмент
lvm
. Для использования хука нужно установить
lvm2
. Необходим, если корневая файловая система находится на
LVM
.
–
filesystems
Добавляет в образ модули необходимых файловых систем. Этот хук
обязателен
, если вы не указываете модули файловых систем в
MODULES
.
–
fsck
Добавляет исполняемый файл fsck и необходимые обработчики файловых систем для проверки корневой файловой системы (и
/usr
, если он на отдельном разделе) перед монтированием. Если стоит после хука
autodetect
, то будут добавлены только обработчики для вашей корневой файловой системы. Использование этого хука настоятельно рекомендуется и
обязательно
с отдельным
/usr
разделом. При включении этого хука крайне рекомендуется также включить все необходимые модули для обеспечения работы вашей клавиатуры в early userspace.
Использование этого хука требует, чтобы rw передавался в
командной строке ядра
(
обсуждение
). Смотрите
fsck (Русский)#Проверка при загрузке
для подробностей.
–
acpi_override
Добавляет в ранний несжатый образ файлы ACPI Machine Language (
.aml
) из каталогов
/usr/initcpio/acpi_override/
и
/etc/initcpio/acpi_override/
, чтобы ядро могло переопределить таблицы ACPI (например
DSDT
) на раннем этапе загрузки.
[1]
–
COMPRESSION
Ядро поддерживает несколько форматов для сжатия initramfs:
gzip
,
bzip2
, lzma (
xz
),
xz
, lzo (
lzop
),
lz4
и
zstd
. По умолчанию mkinitcpio использует zstd для ядра 5.9 и более новых версий или gzip для старых версий.
Стандартный
mkinitcpio.conf
имеет различные закомментированные варианты
COMPRESSION
. Раскомментируйте один из них, чтобы выбрать необходимый формат сжатия, и убедитесь, что соответствующий инструмент сжатия установлен в системе. Чтобы создать несжатый образ, укажите
COMPRESSION=
cat
в конфигурации или используйте
-z cat
в командной строке.
Совет
Инструменты сжатия lz4 и xz используют многопоточность по умолчанию, а сжатие zstd запускается в многопоточном режиме (с опцией
-T0
, которая запускает столько же потоков, сколько ядер в процессоре).
Со степенью сжатия около 2.5 на образе в режиме высокого сжатия (
-9
) lz4 обеспечивает самую быструю скорость распаковки. Немного лучшее сжатие даёт lzo, который при этом всё ещё довольно быстро распаковывается. zstd предлагает универсальное решение с многопоточным сжатием и широким диапазоном уровней сжатия с помощью своих опций — смотрите
zstd(1) § Operation modifiers
. xz достигает наименьшего размера с коэффициентом уменьшения около 5 в предустановке высокой степени сжатия (
-9
) за счёт гораздо более низкой скорости распаковки.
COMPRESSION_OPTIONS
Это дополнительные флаги, передаваемые программе, указанной в переменной
COMPRESSION
, например:
COMPRESSION_OPTIONS=(-9)
Эту опцию можно не трогать:
mkinitcpio
сам позаботится о том, чтобы любой поддерживаемый метод сжатия имел необходимые флаги для создания рабочего образа.
Важно
Неправильное использование этого параметра может привести к
незагружаемой системе
, если ядро не сможет распаковать полученный архив.
При использовании сжатия zstd можно сэкономить место для пользовательских ядер (особенно при использовании
двойной загрузки
с монтированием системного раздела EFI в
/boot
) с помощью опции
--long
. Однако системы с небольшим объёмом оперативной памяти могут не осилить распаковку образа initramfs при использовании этой опции. Опция
-v
также может быть полезна для просмотра подробностей во время генерации образа initramfs. Например:
COMPRESSION="zstd"
COMPRESSION_OPTIONS=(-v -5 --long)
Самое сильное, но самое медленное сжатие можно получить при использовании xz с опцией
-9e
и распаковки файлов модулей и прошивок перед их записью в initramfs:
COMPRESSION="xz"
COMPRESSION_OPTIONS=(-9e)
MODULES_DECOMPRESS="yes"
MODULES_DECOMPRESS
Переменная
MODULES_DECOMPRESS
контролирует, будут ли файлы модулей ядра и прошивок разжаты перед их записью в образ initramfs. Значение по умолчанию —
no
.
Arch сжимает модули официальных
ядер
и файлы прошивок в
linux-firmware
с помощью zstd с уровнем сжатия 19. При использовании более высокого уровня сжатия для initramfs установка
MODULES_DECOMPRESS="yes"
позволит ещё сильнее уменьшить размер initramfs. Это достигается за счёт увеличения использования памяти и процессора на ранних этапах загрузки, что негативно сказывается на системах с небольшим объёмом памяти или слабым процессором, поскольку во время загрузки системы ядро будет тратить больше времени на распаковку образа initramfs целиком вместо того, чтобы по отдельности распаковывать только нужные файлы модулей и прошивок.
Совет
Чтобы избежать повторного сжатия уже сжатых файлов, перед завершением генерации initramfs все файлы с расширениями
.bz2
,
.gz
,
.lz4
,
.lzma
,
.lzo
,
.xz
и
.zst
перемещаются в ранний несжатый образ.
Настройка во время выполнения
Настройки среды выполнения могут быть переданы в
init
и некоторые хуки через параметры ядра, которые обычно задаются в загрузчике. Приведённые ниже параметры могут быть добавлены в командную строку ядра для изменения поведения по умолчанию. Подробности смотрите в статьях
Параметры ядра
и
Процесс загрузки Arch
.
init из хука base
root=
Это самый важный параметр, указываемый в командной строке ядра, поскольку он определяет, какое устройство будет смонтировано как корневая ФС.
mkinitcpio
поддерживает большой набор форматов; примеры есть в разделе
Постоянные имена для блочных устройств#Параметры ядра
.
Примечание
Следующие параметры загрузки изменяют поведение
init
по умолчанию в среде initramfs. Подробнее смотрите
/usr/lib/initcpio/init
. Они не будут работать при использовании хука
systemd
, так как он заменит
init
из хука
base
.
break
Если указан
break
или
break=premount
,
init
приостановит процесс загрузки (после загрузки хуков, но перед монтированием корневой ФС) и запустит интерактивную оболочку, которую можно использовать для устранения неполадок. Эту оболочку можно запустить после монтирования корневой ФС, указав
break=postmount
. После выхода из оболочки продолжится обычная загрузка.
disablehooks=
Отключает runtime-хуки, перечисленные через запятую:
disablehooks=хук1[,хук2,...]
. Например:
disablehooks=resume
earlymodules=
Изменяет порядок загрузки модулей, загружая указанные здесь модули раньше остальных:
earlymodules=модуль1[,модуль2,...]
. (Это может использоваться, например, для обеспечения правильного порядка нескольких сетевых интерфейсов.)
Смотрите
Устранение часто встречающихся неполадок#Проблемы загрузки
и
mkinitcpio(8)
для более подробной информации.
При использовании RAID
Смотрите
RAID#Configure mkinitcpio
.
При использовании net
Примечание
NFSv4 ещё не поддерживается
FS#28287
.
Требуемые пакеты
Хук
net
требует пакет
mkinitcpio-nfs-utils
.
Параметры ядра
Полную и актуальную информацию можно найти в официальной
документации ядра
.
ip=
Этот параметр сообщает ядру, как настраивать IP-адреса устройств и таблицу маршрутизации. Может принимать до девяти аргументов, разделённых двоеточиями:
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>
.
Если этот параметр не указан, все поля считаются пустыми и используются значения по умолчанию, описанные в
документации ядра
. В целом это подразумевает, что ядро пытается настроить всё с помощью автоконфигурации.
Можно указать
<autoconf>
в одиночку как значение параметра
ip
(без всех двоеточий перед ним). Значение
ip=off
или
ip=none
отключает автоконфигурацию. Чаще всего используется
ip=dhcp
.
Разъяснение параметров:
<client-ip>   IP адрес клиента. Если пустой, то автоматически назначается
               протоколом RARP/BOOTP/DHCP. Какой протокол используется
               зависит от параметра <autoconf>. Если его значение не пустое,
               то autocnf работает корректно.

 <server-ip>   IP адрес NFS сервера. Если используется RARP для определения
               адреса клиента и этот параметр не пуст, то принимаются ответы
               только от указанного сервера.
               Для использования разных RARP и NFS серверов,
               укажите ваш RARP сервер здесь (или оставьте пустым), и
               укажите ваш NFS сервер в параметре `nfsroot'
               (см. выше). Если тут пусто, будет использован сервер, ответивший
               на RARP/BOOTP/DHCP запрос.

 <gw-ip>       IP адрес шлюза если сервер в другой подсети. Если тут пусто,
               предполагается, что сервер находится в одной подсети, если значение
               не получено по BOOTP/DHCP.

 <netmask>     Маска подсети для локального интерфейса. Если тут пусто,
               используется маска по умолчанию в зависимости от класса IP,
               если конечно не переопределена значением из BOOTP/DHCP ответа.

 <hostname>    Имя машины клиента. Если пусто, используется IP адрес в виде ASCII
               строки, или значение полученное по BOOTP/DHCP.

 <device>      Имя сетевого устройства. Если тут пусто, все устройства будут использованы
               для RARP/BOOTP/DHCP запросов, и все настройки будут получены из первого
               пришедшего ответа. Если вы имеете только одно сетевое устройство, можно спокойно
               оставить поле пустым.

 <autoconf>	Какой метод использовать для автонастройки: 'rarp', 'bootp', или 'dhcp'.
               Если значение 'both', 'all' или пусто, все протоколы будут использованы.
               'off', 'static' или 'none' означают запрет автонастройки.

 <dns0-ip>     IP-адрес основного DNS-сервера. Определяется автоматически при включенном autoconf.
               Значение доступно в /proc/net/pnp с префиксом "nameserver ".

 <dns1-ip>     IP-адрес запасного DNS-сервера, аналогично <dns0-ip>.

 <ntp0-ip>     IP-адрес NTP-сервера. Определяется автоматически при включенном autoconf.
               Значение доступно в /proc/net/ipconfig/ntp_servers, ядром не используется.
Полное объяснение параметров можно почитать в
документации ядра
(на английском).
Примеры:
ip=127.0.0.1:::::lo:none  --> Разрешить lo интерфейс.
 ip=192.168.1.1:::::eth2:none --> Статический eth2 интерфейс.
 ip=:::::eth0:dhcp --> Разрешить dhcp протокол для настройки интерфейса eth0.
Примечание
Используйте имена устройств ядра (например,
eth0
) для параметра
<device>
; постоянные имена (например,
enp2s0
) не будут работать. Подробнее смотрите
Настройка сети#Сетевые интерфейсы
.
BOOTIF=
Если у вас несколько сетевых карт, в этом параметре можно указать MAC-адрес интерфейса, с которого вы загружаетесь. Это часто бывает полезно, так как нумерация интерфейсов может измениться, или в сочетании с опцией pxelinux IPAPPEND 2 или IPAPPEND 3. Если не указан, будет использоваться
eth0
.
Пример
BOOTIF=01-A1-B2-C3-D4-E5-F6  # Обратите внимание на ведущий "01-" и верхний регистр.
nfsroot=
Если параметр
nfsroot
НЕ передан, будет использовано значение по умолчанию
/tftpboot/%s
.
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
Описание параметров:
<server-ip>   IP адрес NFS сервера. Если параметр отсутствует
               адрес по умолчанию определяется по переменной
               `ip' (см. ниже). Одно из применений этого параметра -
               использование разных серверов для
               RARP и NFS. Обычно можете оставить этот параметр пустым.

 <root-dir>    Путь к директории, которая будет корневой на клиенте. Если тут
               написано "%s", то оно будет заменено на ASCII представление IP
               клиента.

 <nfs-options> Стандартные опции NFS. Все опции разделены запятыми.
               Если опция отсутствует будут использованы следующие значения по умолчанию:
                       port            = как скажет portmap демон на сервере
                       rsize           = 1024
                       wsize           = 1024
                       timeo           = 7
                       retrans         = 3
                       acregmin        = 3
                       acregmax        = 60
                       acdirmin        = 30
                       acdirmax        = 60
                       flags           = hard, nointr, noposix, cto, ac
Полное описание параметров можно почитать в
mkinitcpio -H net
(на английском).
При использовании LVM
Если ваш корень находится на
LVM
, смотрите
Install Arch Linux on LVM#Adding mkinitcpio hooks
.
При зашифрованном корневом разделе
Если у вас
зашифрованный корень
, смотрите
dm-crypt/System configuration#mkinitcpio
для информации о том, какие хуки нужно добавлять.
/usr на отдельном разделе
Если у вас
/usr
на отдельном разделе, вы должны соблюдать следующие требования:
Добавьте хук
fsck
, а в файле
/etc/fstab
укажите для
passno
значение
2
, чтобы запускалась проверка этого раздела при загрузке системы. Без этого хука
/usr
проверяться не будет.
Если не используется хук systemd, добавьте хук
usr
, который будет монтировать раздел
/usr
после монтирования корневой ФС.
Советы и рекомендации
Отключение создания fallback-образа initramfs
Создание fallback-образов можно отключить:
Измените строку
PRESETS=('default' 'fallback')
на
PRESETS=('default')
в соответствующих файлах
.preset
в каталоге
/etc/mkinitcpio.d/
.
Удалите fallback-образ initramfs из каталога
/boot/
.
Обновите настройки вашего
загрузчика
.
Важно
Отключение генерации fallback-образа initramfs лишит вас дополнительного способа загрузить систему в случае проблем со стандартным образом initramfs. Перед отключением убедитесь, что у вас под рукой есть загрузочный
установочный носитель
, который можно будет использовать для восстановления системы.
Решение проблем
Распаковка образа
Если вам интересно посмотреть, что находится внутри образа initramfs, вы можете распаковать его.
Образ initramfs является архивом SVR4 CPIO, созданным с помощью команд
find
и
bsdcpio
и опционально сжатым с форматом сжатия, понятным ядру. Подробнее о сжатии смотрите в разделе
#COMPRESSION
.
mkinitcpio
включает в себя инструмент
lsinitcpio(1)
, позволяющий посмотреть и/или извлечь содержимое образов initramfs.
Просмотр списка файлов в образе:
# lsinitcpio /boot/initramfs-linux.img
Извлечение всех файлов в текущий каталог:
# lsinitcpio -x /boot/initramfs-linux.img
Более удобный обзор самых важных частей образа:
# lsinitcpio -a /boot/initramfs-linux.img
Изменение и упаковка образа
После распаковки архива описанным выше способом вы можете изменить файлы и упаковать всё обратно.
Вызовите функцию
build_image
из скрипта
/usr/bin/mkinitcpio
с параметрами
build_image
выходной-файл
сжатие
Это можно сделать путём создания нового скрипта с содержимым функции
build_image
и его вызова с описанными выше параметрами.
Он упакует содержимое текущего каталога в
выходной-файл
.
Важно
Перед перезаписью файла
/boot/initramfs-linux.img
стоит переименовать старый файл, чтобы была возможность отменить изменения. Будьте готовы к тому, что какая-нибудь ошибка помешает загрузке системы. В таком случае вам понадобится загрузиться с другой системы или Live CD, чтобы восстановить оригинал, запустить
mkinitcpio
для перезаписи ваших изменений или вручную исправить ошибки.
«/dev must be mounted», хотя он и так примонтирован
mkinitcpio
считает
/dev
примонтированным при наличии
/dev/fd/
. Если всё выглядит хорошо, его можно «создать» вручную:
# ln -s /proc/self/fd /dev/
(Очевидно,
/proc
тоже должен быть примонтирован.
mkinitcpio
всё равно это требует и тоже это проверяет.)
Possibly missing firmware for module XXXX
В процессе сборки initramfs после обновления ядра вы можете заметить предупреждения:
==> WARNING: Possibly missing firmware for module: '
название_модуля
'
Если эти предупреждения появляются во время генерации default-образа, это может означать, что действительно требуется установка дополнительных файлов прошивок. Для часто встречающихся устройств достаточно
установить
пакет
linux-firmware
. Другие пакеты, предоставляющие файлы прошивок, приведены в таблице ниже; также можно попробовать поискать их в
официальных репозиториях
или в
AUR
.
Если же предупреждения появляются только во время генерации fallback-образа, есть три варианта:
Просто проигнорировать предупреждения, если вы уверены, что они не касаются нужного вам оборудования.
Если вы хотите, чтобы предупреждения исчезли, можно установить недостающие файлы прошивок. Большинство необязательных прошивок предоставляются мета-пакетом
mkinitcpio-firmware
AUR
. Также можно отдельно установить только нужные пакеты:
Модуль
Пакет
aic94xx
aic94xx-firmware
AUR
ast
ast-firmware
AUR
bfa
linux-firmware-qlogic
bnx2x
linux-firmware-broadcom
liquidio
linux-firmware-liquidio
mlxsw_spectrum
linux-firmware-mellanox
nfp
linux-firmware-nfp
qat_420xx
linux-firmware-intel
qed
linux-firmware-qlogic
qla1280
linux-firmware-qlogic
qla2xxx
linux-firmware-qlogic
wd719x
wd719x-firmware
AUR
xhci_pci
xhci_pci_renesas
upd72020x-fw
AUR
Если вы хотите избавиться от предупреждений, но не хотите захламлять систему неиспользуемыми файлами прошивок, можно
отключить создание fallback-образа initramfs
.
На месте недоступных файлов прошивок можно создать файлы-пустышки, чтобы подавить предупреждения:
# echo "Device not available" > /usr/lib/firmware/qat_420xx.bin
# echo "Device not available" > /usr/lib/firmware/qat_420xx_mmp.bin
No PS/2 controller found
На некоторых материнских платах (в основном старых, но также и некоторых новых) контроллер i8042 не определяется автоматически. Это бывает редко, но некоторые люди всё же могут оказаться с неработающей клавиатурой. Вы можете заранее обнаружить эту ситуацию. Если у вас есть порт PS/2 и вы получаете сообщение
i8042: PNP: No PS/2 controller found. Probing ports directly
, добавьте
atkbd
в массив
MODULES
.
[2]
Стандартная процедура восстановления
При неправильно сформированном начальном RAM-диске систему скорее всего не получится загрузить. В таком случае выполните описанную ниже процедуру восстановления системы:
Загрузка выполняется на одной машине и терпит неудачу на другой
Хук
autodetect
фильтрует ненужные
модули ядра
в основном образе initramfs путём сканирования
/sys
и модулей, загруженных на момент запуска хука. Если вы переносите каталог
/boot
на другую машину и загрузка терпит неудачу на стадии early userspace, это может происходить из-за того, что новое оборудование не определилось из-за отсутствующих модулей ядра. Обратите внимание, что для USB 2.0 и 3.0 нужны разные модули ядра.
Чтобы исправить это, сначала попробуйте выбрать fallback-образ в вашем
загрузчике
, поскольку его содержимое не фильтруется хуком
autodetect
. После загрузки выполните
mkinitcpio
на новой машине, чтобы пересобрать основной образ с корректными модулями. Если fallback-образ не решил проблему, попробуйте загрузиться в Arch Linux live CD/USB, выполнить chroot в установленную систему и выполнить
mkinitcpio
на новой машине. В крайнем случае, попробуйте
вручную
добавить модули в initramfs.
Cannot open access to console, the root account is locked
Хук
systemd
блокирует учётную запись root
. Для включения можно установить
initcpio-hook-shadowcopy
AUR
, добавить хук
shadowcopy
после хука
systemd
в файле
/etc/mkinitcpio.conf
и пересобрать образы командой
mkinitcpio -P
. Подробнее в
репозитории на GitHub
.
Смотрите также
Документация ядра Linux:
initramfs, "What is rootfs?"
Документация ядра Linux:
initrd
Статья на Википедии:
initrd