Есть еще несколько других программ, которые можно использовать для загрузки Linux, однако они не получили широкого распространения.
Параметры ядра
Обзор параметров строки загрузки
Программы-загрузчики, описание которых приведено выше, способны также, помимо загрузки самого ядра, передавать ему необходимые параметры загрузки.
В параметрах загрузки недопустимо использовать пробелы, кроме как между отдельными аргументами. Список значений для одного аргумента должен разделяться запятыми между значениями. К примеру:
ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1
Посмотреть параметры командной строки, заданные при загрузке, можно набрав /proc/cmdline.
Утилита rdev
Есть несколько параметров загрузки ядра Linux, хранящих свои значения по умолчанию в его образе. Эти параметры задаются при компиляции ядра, и для того, чтобы не перекомпилировать каждый раз ядро, используется утилита rdev.
Утилита rdev может изменять следующие параметры:
• rdev – устройство, с которого производится загрузка;
• swapdev – устройство, содержащее раздел подкачки (swap);
• ramsize – параметры RAM-диска;
• vidmode – видеорежим по умолчанию;
• rootflags – установка режима монтирования корневого устройства ("только для чтения" или "чтение/запись").
Более подробную информацию по rdev можно найти в соответствующей справочной документации.
Разбор параметров ядром Linux
Большая часть параметров загрузки имеет вид:
Имя[=значение_1][,значение_2]…[,значение_11]
где имя – уникальное ключевое слово, идентифицирующее часть ядра, которому передаются связанные значения, но не более одиннадцати параметров. Большая часть разбора параметров загрузки происходит в linux/init/main.c. Сначала ядро проверяет, не являются ли параметры одним из специальных параметров root=, ro, rw или debug. Затем ядро просматривает список функций установки (находящийся в массиве bootsetups) в поиске совпадения заданной строки параметра с функцией установки конкретного устройства или части ядра. Если мы передаем ядру строку foo=3,4,5,6, bar, то ядро будет искать, присутствует ли foo в массиве bootsetups. Если присутствует, то ядро вызовет функцию установки, связанную с foo (foo setup ()) и передаст ей целочисленные значения 3, 4, 5 и 6, указанные в командной строке ядра, и также строковый параметр bar.
Если строка не подходит ни для одной функции установки, то этот случай считается установкой переменной окружения. Примером может служить указание переменных окружения term=vtioo или boot_image=vmiinuz.bak в качестве параметров загрузки. Как правило, переменные окружения проверяются скриптами инициализации для разрешения или запрещения большого диапазона параметров.
Любые оставшиеся параметры, не выбранные ядром и не интерпретированные в качестве переменных окружения, будут переданы в дальнейшую обработку, которую обычно выполняет программа init. Чаще всего процессу init в качестве параметра передается слово single, которое сообщает init о необходимости загрузить компьютер в однопользовательском режиме. Список параметров программы init можно найти в соответствующей справочной документации.
Общие неаппаратные параметры загрузки
В этом разделе рассматриваются параметры загрузки, не связанные с каким-либо оборудованием или периферией, а с параметрами ядра, такими как управление памятью, RAM-диском, корневой системой и т. п.
Опции корневой файловой системы
Параметр root
Этот параметр сообщает ядру, какое устройство будет использовано в качестве корневой файловой системы во время загрузки. По умолчанию эта установка имеет значение корневого устройства системы, на котором было скомпилировано ядро. Например, на одном компьютере корневая файловая система находится на /dev/hda2, а на другом – на /dev/hda6. Если скомпилировать ядро на втором компьютере, перенести его на первый и не указать в параметре root=/dev/hda2, то ядро будет думать, что оно загружается с /dev/hda6. А такого устройства на этом компьютере нет! Допустимыми корневыми устройствами могут быть следующие:
• /dev/hdaN, /dev/hdbN, /dev/hdcN, /dev/hddN, которые являются разделами N на IDE-диске;
• /dev/sdaN, /dev/sdbN, /dev/sdcN, /dev/sddN, /dev/sdeN, которые являются разделами N на SCSI-диске;
• /dev/fd0, /dev/fdl – привод флоппи-диска с номером N;
• /dev/nfs, не являющееся флагом, заставляющим ядро получить корневую файловую систему по сети.
Это один из немногих параметров загрузки ядра, которые хранятся в его образе и могут быть изменены утилитой rdev.
Параметры ro и rw
Параметр го сообщает ядру о необходимости монтирования корневой файловой системы в режиме «только для чтения». Парный ему параметр rw указывает ядру монтировать корневую файловую систему в режиме «чтение/ запись». Сразу после загрузки ядра и запуска процесса init система должна осуществить проверку подмонтированных файловых систем на отсутствие ошибок. Однако, если корневая файловая система смонтирована в режиме «чтение/запись» надежно проверить целостность файловой системы невозможно. Существует два способа решения проблемы:
• Смонтировать изначально корневую файловую систему в режиме "только для чтения".
• Смонтировать изначально корневую файловую систему в режиме "чтение/запись", а перед проверкой перемонтировать ее в режим "только для чтения".
Это одни из немногих параметров загрузки ядра, которые хранят значение в образе ядра и могут быть изменены утилитой rdev.
Опции управления RAM-диском
Все следующие опции сообщают ядру, как управлять устройством RAM-диска, обычно используемым для загрузки машины.
Параметр ramdisk_start
Чтобы разрешить образу ядра находиться на флоппи-диске со сжатым образом RAM-диска, необходимо добавить команду ramdisk_start=<cMei4eHMe>.
Параметр load_ramdisk
Этот параметр сообщает ядру, нужно загружать образ RAM-диска или нет. При ioad_ramdisk=l ядро будет загружать RAM-диск. По умолчанию значение параметра равно нулю, т. е. ядро не должно в этом случае загружать RAM-диск.
Параметр prompt_ramdisk
Этот параметр сообщает ядру о необходимости вывести пользователю приглашение вставить флоппи-диск с образом RAM-диска. В однодисковой конфигурации образ RAM-диска находится на той же дискете, с которой только что закончилась загрузка ядра, поэтому приглашение не нужно. В этом случае нужно использовать команду prompt_ramdisk=0. В двухдисковой конфигурации может потребоваться заменить диски, поэтому нужно указать команду prompt_ramdisk=1. По умолчанию значение равно единице.
Параметр ramdisk_size
Поскольку RAM-диск размещается в оперативной памяти, необходимо каким-то способом указать занимаемый им объем оперативной памяти. По умолчанию это 4096 Кбайт.
Параметр noinitrd (начальный RAM-диск)
В ядрах, начиная с версии 2jc, корневой файловой системой изначально может быть RAM-диск. Эта возможность обычно используется для загрузки модулей, необходимых для монтирования реальной корневой файловой системы (например, загрузка модулей драйвера SCSI, хранящихся в образе RAM-диска, а затем монтирование реальной файловой системы на SCSI-диске).
Параметр noinitrd определяет, что будет происходить с данными initrd после загрузки ядра.