Сайт
Чукина
Владимира
Владимировича

20 апреля 2024 г.

Загрузка ОС, режимы работы, службы

Настройка загрузчика GRUB

Первый сектор диска (MBR, загрузочный сектор) и первый сектор каждого раздела (boot-сектор) содержат загрузочную информацию. При запуске компьютера BIOS загружает в память программу-загрузчик из MBR, которая считывает таблицу разделов диска, определяет активный раздел диска и загружает программу-загрузчик из первого сектора этого раздела. Загрузчик считывает в память ядро операционной системы и начинается процесс загрузки.

Настройки загрузчика GRUB (GRand Unified Bootloader) находятся в файле /boot/grub/grub.conf и содержат набор директив.

ДирективаОписание
default=номер_пунктаномер пункта меню загрузчика, выполняющийся по умолчанию. Пункты меню нумеруются начиная с нуля
timeout=число_секундчисло секунд перед началом автоматической загрузки
splashimage=(hd0,0)/grub/имя_файла.xpm.gzфайл с фоном загрузчика
password незашифрованный_парольнезашифрованный пароль
password --md5 зашифрованный_парользашифрованный пароль длинной 30 символов
title название пункта менюназвание пункта меню загрузчика
lockиспользовать пароль при выборе пункта меню
root (hd0,0)активный раздел диска, где находится образ ядра системы
kernel /образ_ядра_системы ro root=LABEL=/ rhgb quietфайл с образом ядра системы
initrd /образ_загрузки.imgсодержит необходимые модули ядра

Директива password, указанная в начале файла (до первой директивы title) задает пароль для перехода GRUB в режим ввода команд.
Если сразу после директивы title указана директива lock, то при выборе пользователем данного пункта меню появится сообщение с запросом пароля, указанного директивой password в начале конфигурационного файла. Если необходимо установить отдельный пароль к данному пункту меню необходимо вместо директивы lock использовать директиву password.
Для задания фона загрузчика GRUB необходимо указать следующую дериктиву в файле настроек:
splashimage=(hd0,0)/grub/имя_файла.xpm.gz
Здесь предполагается, что каталог /boot/ является точкой монтирования первого раздела первого диска.
В каталоге /boot/grub/ нужно поместить файл с изображением имя_файла.xpm.gz Образцы файлов с фоном можно найти в сети Интернет (см. ссылки ниже) или создать свое собственное изображение. Для этого необходимо с помощью какого-либо графического редактора создать изображение размером 640x480 в формате xpm, то есть имя_файла.xpm. Затем необходимо сжать изображение архиватором gzip с помощью команды:
gzip имя_файла.xpm
В результате, получится файл имя_файла.xpm.gz
Если средства графического редактора не позволяют создавать изображения в формате xpm, то можно преобразовать изображение из исходного формата в формат xpm с помощью команды:
convert имя_файла.png -colors 14 -resize 640x480 имя_файла.xpm
Команда convert входит в пакет imagemagick, наличие которого можно проверить командой:

yum info imagemagick

и при отсутствии установить командой:

yum install imagemagick

Восстановление загрузочной записи в MBR

Для восстановления загрузочной записи необходимо загрузить систему с Live-CD. Затем запустить консоль GRUB командой:

grub

В строке консоли GRUB выполнить команды:
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
Первая команда указывает на boot-раздел, где находится образ ядра системы, в данном примере это первый раздел первого диска. Вторая команда устанавливает GRUB в MBR, в данном примере первого диска. Третья команда осуществляет выход из консоли GRUB.
Перезагрузить систему.

Основные параметры ядра

Параметры ядра указаны в файле /lib/modules/`uname -r`/build/.config . Файл представляет собой список параметров ядра с указанием способа их включения в ядро: встроенные (y) или подключаемый модуль (m). Для того, чтобы пересобрать ядро необходимо сначало отредактировать этот файл либо в текстовом редакторе, либо с помощью команды make menuconfig (текстовое меню) или make config (вопрос-ответ).

Управление драйверами (модулями ядра)

Управление аппаратными устройствами компьютера осуществляет ядро операционной системы Linux. Часть ядра, управляющая конкретным устройством называется драйвером устройства. Выделяют два типа драйверов:

  • 1) Драйверы являются частью программного кода ядра (встроены в ядро). Для добавления нового драйвера необходимо перекомпилировать ядро.
  • 2) Драйверы являются модулями ядра. Модули ядра хранятся в подкаталогах каталога /lib/modules/`uname -r`/ в файлах с расширением *.ko.
На этапе начальной загрузки системы автоматически загружаются модули, указанные в файле /etc/modprobe.conf. Этот файл создается с помощью программы kudzu, которая проверяет все подключенное оборудование, создает базу данных всех устройств в файле /etc/sysconfig/hwconf и указывает список необходимых модулей в файле /etc/modprobe.conf.

Список всех загруженных в ядро модулей можно получить командой:

lsmod

Информацию о конкретном модуле:

modinfo имя_модуля

Загрузить модуль:

insmod имя_модуля

Выгрузить модуль:

rmmod имя_модуля

Для загрузки модуля и всех зависимых модулей:

modprobe имя_модуля

Для удаления модуля и всех неиспользуемых зависимых модулей:

modprobe -r имя_модуля


Для доступа к драйверам служат файлы устройств (/dev/hda, /dev/eth0 и т.д.). Таким образом, общую схему взаимодействия пользователей с аппаратными устройствами можно представить в виде:

Устройство <- Ядро <- Файл устройства <- Программа пользователя

Управление режимами работы ОС

При загрузке операционной системы запускается процесс init, который читает данные из файла /etc/inittab и запускает указанные в нем процессы. Формат файла /etc/inittab следующий.
Первая строка файла имеет вид:
id:уровень_исполнения_по_умолчанию:initdefault:
Остальные строки файла:
идентификатор:уровни_исполнения:действие:запускаемый_процесс

Предусмотрены семь уровней выполнения:

УровеньОписание
0выключение системы
1однопользовательский режим (уровень S)
2многопользовательский режим без поддержки сети
3многопользовательский режим
4не используется
5графический режим
6перезагрузка

Возможные действия над процессами:

ДействиеОписание
respawnпри завершении процесс будет перезапущен
waitпроцесс будет запущен при переключении на любой из указанных уровней и процесс загрузки остальных процессов продолжится только после завершения данного процесса
onceпроцесс будет запущен только один раз
bootпроцесс будет запущен во время начальной загрузки независимо от указанных уровней исполнения
bootwaitпроцесс будет запущен во время начальной загрузки и процесс загрузки продолжится только когда завершится данный процесс
offне выполняется никаких действий
ondemandзапускается при переходе на уровни A, B, C
initdefaultуровень выполнения по умолчанию
sysinitпроцесс запускается во время загрузки до процессов boot и bootwait
powerwaitпроцесс будет запущен при исчезновении электропитания
powerfailпроцесс будет запущен при исчезновении электропитания
powerokwaitпроцесс будет запущен при появлении электропитания
powerfailnowпроцесс будет запущен при низком заряде батарей источника бесперебойного питания
ctrlaltdelпроцесс будет запущен при нажатии комбинации клавиш <Ctrl+Alt+Del>
kbrequestпроцесс будет запущен при нажатии "специальной" комбинации клавиш

Независимо от выбранного уровня выполнения сначало запускаются процессы отмеченнные как sysinit, затем boot и bootwait.
По-этому первым запускается сценарий /etc/rc.sysinit, который выполняется только один раз при загрузке системы.
А затем, запускается процесс /etc/rc, который запускает все процессы в соответствии с выбранным уровнем выполнения. При переходе на заданный уровень исполнения выполняются все скрипты из специального каталога, соответствующего данному уровню исполнения:
КаталогОписание
/etc/rc0.d/выключение системы
/etc/rc1.d/однопользовательский режим
/etc/rc2.d/многопользовательский режим без поддержки сети
/etc/rc3.d/многопользовательский режим
/etc/rc4.d/не используется
/etc/rc5.d/графический режим
/etc/rc6.d/перезагрузка системы

В этих каталогах находятся ссылки на скрипты сервисов из каталога /etc/init.d/. Имена ссылок имеют вид:

Sxxимя_скрипта
Kxxимя_скрипта

Здесь S означает запустить (start) сервис, а K означает остановить (stop) сервис. Символы xx - это двузначный порядковый номер скрипта. Запускаются и останавливаютя сервисы от малых номеров к большим.

После загрузки всех сервисов процесс init продолжает запуск оставшихся процессов.

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

telinit уровень_исполнения

Управление службами (сервисами)

В каталоге /etc/init.d/ расположены скрипты запуска и остановки сервисов. Стандартный вид такого скрипта следующий:
#!/bin/sh
#
# chkconfig: 345 85 15
# description: Start and stop myservice
# processname: myservice

start() {
        daemon /путь_к_файлу/myservice
	touch /var/lock/subsys/myservice
}

stop() {
	killproc myservice
	rm -f /var/lock/subsys/myservice
	rm -f /var/run/myservice.pid
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	stop
	start
	;;
  *)
	echo $"Usage: myservice {start|stop|restart}"
	exit 1
esac

exit 0
Сервисы могут быть запущены "вручную" командой:

/etc/init.d/имя_сервиса start

Также могут быть остановлены командой:

/etc/init.d/имя_сервиса stop

И перезапущены командой:

/etc/init.d/имя_сервиса restart


Получить информацию о том, на каких уровнях выполнения автоматически запускается данный сервис можно воспользоваться командой:

chkconfig --list имя_сервиса

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

chkconfig --level 345 имя_сервиса on

Для запрещения автоматического запуска сервиса используется команда:

chkconfig --level 345 имя_сервиса off

При добавлении автоматического запуска сервиса создаются ссылки в соответствующих каталогах (например, /etc/rc3.d/, /etc/rc4.d/, /etc/rc5.d/) на скрипт запуска сервиса из каталога /etc/init.d/. При отключенни автоматического запуска эти ссылки удаляются.

Ссылки по теме

GNU GRUB Manual 0.97
Инсталляция и конфигурация загрузчика GRUB
Образцы фоновых рисунков для загрузчика GRUB
Образцы фоновых рисунков для загрузчика GRUB
Образцы фоновых рисунков для загрузчика GRUB
Православное радио "Воскресенье"   Валаамский монастырь   Медиа-сервер "Россия Православная"   Интернет-магазин "ЛинуксЦентр"   Яндекс цитирования   Valid CSS!   Valid XHTML 1.0 Strict!   Unicode Encoded Badge