Arch Linux initrd

Параметры загрузки ядра

root=

Обязательно указать : root=раздел_c_файлами_системы . Примеры:

root=/dev/sda1                                                # /dev node
root=LABEL=CorsairF80                                         # label
root=UUID=ea1c4959-406c-45d0-a144-912f4e86b207                # UUID
root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660            # GPT partition UUID

Определять uuid загрузочного раздела по файлу дистрибутива на нем

ro ; rw

Тип монтирование корня файловой системы только чтение. Перемонтировать в rw:

sudo mount -w -n -o remount /

rootdelay=

Устанавливает задержку (в секундах) перед попыткой монтировать корневую файловую систему root=. Начинайте с rootdelay=5

Необходимо на старом железе при ошибке загрузки:

mount: /mnt/home: special device /dev/sdb1 does not exist

rootflag=

Параметры монтирования раздела, указанного в root=

Для fat используйте:

rootflags=umask=0,check=s,quiet,utf8=true

init=

init=/lib/systemd/systemd - прямое указание (если не находит или несколько)

quiet

Минимум вывода в консоль

net.ifnames=

Чтобы любой ethernet интерфейс имел имя eth0, а wifi - wlan0 : net.ifnames=0 biosdevname=0

break= ; disablehooks= ; earlymodules=

Сборка initrd

  • mkinitcpio -g /boot/linux.img - создаст /boot/linux.img для используемого ядра с конфигом /etc/mkinitcpio.conf
  • mkinitcpio -c /etc/mkinitcpio-custom.conf -g /boot/linux.img -k 3.3.0-ARCH - для ядра 3.3.0-ARCH с конфигом /etc/mkinitcpio-custom.conf

Загрузка с iso

MODULES="iso9660"

Загрузка с ntfs

Актуально только для FRUGAL с сохранением в модуль или файл

MODULES="fuse"
BINARIES="ntfs-3g"

Без этого корневой ntfs раздел будет примонтирован только на чтение , без возможности перемонтировать (если не используется ntfs3)

autodetect - универсальный initrd или только под свое железо

HOOKS="autodetect block"
  • Уменьшает размер Вашего initrd, создавая список модулей по итогу сканирования sysfs. Т.е. на другом компьютере может не работать. Нужно загрузиться с initramfs-*fallback и пересобрать под этот компьютер
  • initramfs-*fallback отличается от initramfs отсутствием хука autodetect. Т.е. включены все модули ядра
  • Хуки, помещенные до «autodetect», будут установлены полностью. Например:
HOOKS="block autodetect"

Спец. ядро, как в PRA, porteus

  • С монолитно вкомпиленными модулями, необходимыми для загрузки
  • initrd получается универсальным (без модулей ядра). Ядра можно менять на аналогичные
MODULES=""
BINARIES="ntfs-3g"
HOOKS="base  autodetect filesystems keyboard fsck rootaufs2 subdir2"

Упрощенный вариант сборки для любого линукса

Собрать LF-initrd (не в Arch) или UIRD - не самая простая задача. Можно собрать только initrd с нужными модулями ядра (стандартным для Вашего линукса способом) для Вашего ядра

  • Ядро должно быть с AUFS (для UIRD , rootaufs2, lf-aufs, manjaro-iso). Узнать что AUFS есть в ядре:
cd /lib/modules/версия_ядра && grep aufs modules.builtin modules.dep
  • Или с overlayfs (для lf-overlayfs, arch-iso)
initrd /путь/initrd_с_модулями_ядра /путь/uird1811.xz

Hooks - модули Arch Linux initrd

mkinitcpio-rootaufs2

  • Создает корневую aufs файловую систему из каталогов и(или) модулей.pfs (squashfs). Т.е. модульный frugal и full c сохраненкой в раздел, каталог или файл
  • Аналог porteus-initrd
  • Работает только с aufs ядрами.

mkinitcpio-rootofs

  • Аналогично mkinitcpio-rootaufs2, только вместо AUFS используется OverlayFS
  • Вместо dir= используется diro=
  • Вместо changes используется changeso

archiso

mkinitcpio-loop-subdir

  • subdir - загрузка ситемы из каталога (т.е. можно иметь несколько систем на одном разделе)
  • loop - загрузка ситемы из файла. Файл может располагаться на fat ntfs. На Linux файловых системах удобнее subdir=
truncate -s 2G /test/ext2.img && losetup /dev/loop0 /test/ext2.img && mkfs.ext2 /test/ext2.img

mkinitcpio-dir

https://aur.archlinux.org/packages/mkinitcpio-dir

Аналогично mkinitcpio-loop-subdir, но без aufs и overlayfs фич

mkinitcpio-overlayfs , mkinitcpio-lf-overlayfs , mkinitcpio-lf-aufs

«Заморозка» состояния системы. Все изменения в tmpfs или в отдельном каталоге на диске (если их скопировать в корень - получим новое состояние системы).

  • https://github.com/felixsinger/mkinitcpio-overlayfs - посредством overlayfs добавляет верхний tmpfs слой к любому корню системы
    • Корень системы может находиться в корне раздела root=
    • или в каталоге (несколько дистрибутивов на одном разделе) rootdir= , который находится на разделе root=
    • Подключает tmpfs пустым параметром ofs
    • ofs=dirname - только вместе с хуком rootdir=. Подключает директорию rootdir-dirname. Файловые системы NTFS, FAT использовать нельзя
    • ofs=/dev/sda1:dirname - Подключает директорию dirname на разделе sda1. Файловые системы NTFS, FAT использовать нельзя
  • mkinitcpio-lf-aufs - аналогично mkinitcpio-lf-overlayfs, но средствами AUFS и с параметром aufs
    • C aufs возможно горячее подключение-отключение модулей.pfs
    • C ofs - нет. Зато он, в отличие от AUFS, присутствует во всех ядрах

Удобно использовать для

  • Монолитного frugal вместе с хуком squashfs= squashfs2=
  • full c хуком rootdir=
  • Для всех этих хуков не забываем указать root=

liveroot ; rootmp-hook - overlayfs [+zram] поверх корня системы

mkinitcpio-squashfs , mkinitcpio-squashfs2

  • Загрузка одного модуля по сети (вместе с хуком net) или локально и монтирование его в качестве корня
  • Т.к. корень получается RO сверху необходимо подключить mkinitcpio-overlayfs или mkinitcpio-lf-overlayfs или mkinitcpio-lf-aufs

В mkinitcpio-squashfs2 вместо wget и find - busybox

mkinitcpio-lf-shutdown

  • При старте системы копирует содержимое initrd в /run/initramfs
  • При выключение делается chroot в этот каталог и запускаеся /run/initramfs/shutdown , который корректно отмонтирует все примонтированное

break=down

  Отладочная остановка в процессе выключения системы для проверки, что все корректно отмонтировалось
Печать/экспорт