LINUX.ORG.RU

Монтировать жесткий диск после загрузки initrd

 , ,


0

1

Здравствуйте.

Шарю в линуксе на довольно поверхностном уровне, но из спортивного интереса захотелось попробовать сделать свой мини дистрибутив с блэкджеком и системд. Имеется рамдиск с busybox и iso (запускаю его через виртуалбокс) с grubом. После недолгой эйфории (оно запустилось и это классно – подумал я) я решил монтировать жёсткий диск (виртуальный, естественно) и не понял, как это сделать. Ничего типа /dev/sda не имеется и я абсолютно без понятия, откуда это достать. В связи с чем, прошу помощи у вас.

Заранее спасибо. И извиняюсь, если этот вопрос покажется вам дилетантским.

Обычно девайс ноды в /dev создаёт процесс udevd по событиям от ядра. Он же загружает модули с драйверами для появляющихся устройств. Но ядро умеет и само создавать девайс ноды на devtmpfs. Надо её смонтировать и загрузить модули с драйверами устройств вручную.

mount -t devtmpfs devtmpfs /dev
mount -t sysfs sysfs /sys
find /sys/devices -name modalias -print0 |xargs -0 cat |sort |uniq |xargs -L1 modprobe

Последнюю строчку можно выполнить несколько раз, поскольку устройства образуют дерево по подключению.

В дистрибутивах с systemd однако в initramfs делают инфраструктуру с помощью dracut, и там есть и systemd и udevd и пляски с ручной загрузкой модулей не нужны.

iliyap ★★★★★ ()
Ответ на: комментарий от iliyap

С devfs оно и без udev нормально работает, ТС не догоняет логики, как и откуда должны браться диски

Если в кратце, ядру всегда нужна корневая файловая система, если ядро не смогло её подмонтировать в процессе загрузки, то Kernel Panic, для создания некой гибкости, чтобы не пересобирать ядро по любому чиху добавили механизм initrd/intitramfs (по сути одно и тоже), чтобы начать загрузку, загрузчик, в твоём случае grub, читает с диска ядро и initrd образ, ложит из по некоторому адрему в памяти, рядом кладёт опции для загрузки ядра и передает ему управление, дальше ядро, создаёт «виртуальный» корень, и запихивает туда содержимое initrd архивчика, и использует его для начальной инициализации, модтягивает там модуля, рейд массив там собирает, расшифровавает чтонить и пр хрень

Корень же нормальной твоей файловой систему монтируется в /sysroot, дальше chroot и /sbin/init, это запустит систему инициализации, в твоём случае System D, хотя можешь и заменить на чтонить, busybox сам по себе предоставляет функционал систему инициализации, ну и всё, дальше уже головняки прееходят на систему инициализации, она начинает монтировать остальные разделы, запускать сервисы и пр хрень

ах да, главное то и не написал, насчёт дисков и пр девайсов, есть 3 виртуальных файловых системы, devtmpfs, sysfs и procfs, они используеются как нетрудно догадаться в /dev - отображение «файлов» устройств, /sys - отображение дерева устройств и пр плюхи драйверов устройств в виде файлов ну и /proc там инфа по процессам в виде файликов, и как правило большинство тулов предполагают, что они уже нормально смонтированны, и они смогут дёрнуть инфу о систему из этих источников, по итогу в /dev’е у тебя будут видны доступные девайсы, для их «инициализиции» или донастройки или раздачи прав доступа нужен уже udev, ну и дальше больше

sparks ★★ ()
Последнее исправление: sparks (всего исправлений: 1)