Инструменты пользователя

Инструменты сайта


управление_загрузкой_ос._настройка_сети

процесс загрузки linux

Linux* imageНажмите кнопку включения питания на вашем системнике, и спустя несколько секунд вы увидите окно входа в систему.

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

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

1. BIOS

  BIOS отвечает за базовый ввод/вывод данных с устройств/на устройства.
  Делает некоторые проверки целостности устройств. К тому же, за тестирование работоспособности электроники отвечает POST (Power-on self-test, он же «тест на адекватность себя самого», выполняющийся как этап пре-загрузки), который управляется BIOS
  Ищет, загружает и выполняет программу-загрузчик ОС
  Берет загрузчик из флопика, сидюка или жесткого диска. Во время загрузки BIOS'а вы можете нажать на кнопку (обычно это F12 или F2 или Del, зависит от платформы), если вам требуется внести некоторые изменения касательно настройки железа.
  Как только загрузчик был обнаружен и загружен в память, BIOS передает управление ему.
  Короче говоря, BIOS загружает и выполняет загрузочную запись (MBR).

2. MBR

  MBR — это главная загрузочная запись, хранящаяся на жестком диске
  Она размещена в 1-м секторе загрузочного диска, например /dev/hda или /dev/sda
  MBR занимает меньше, чем 512 байтов. Она состоит из трех компонентов: 1) главная загрузочная информация, «живущая» в первых 446 байтах; 2) информация о таблице разделов — в следующих 64 байтах; 3) и последние 2 байта нужны для проверки корректности mbr.
  Она содержит информацию о GRUB'е (или LILO).
  Простыми словами — MBR загружает и выполняет загрузчик GRUB.

3. GRUB

  GRUB — Grand Unified Bootloader.
  Если в вашей системе установлено более, чем одно ядро, у вас есть возможность выбирать, которое из них должен выполняться
  GRUB отображает красивую анимацию plymouth заставку, и, подождав несколько секунд интерактивного воздействия пользователя, если он не нажал ни одной клавиши, он загружает ядро, установленное по умолчанию в файле конфигурации grub.
  GRUB понимает, что такое файловая система (древние загрузчики Linux'а, например, LILO этого не понимают).
  Конфигурационный файл Grub обычно лежит по пути /boot/grub/grub.conf (так же /etc/grub.conf может быть символьной ссылкой на него). Вот пример файла конфигурации для CentOS:
      #boot=/dev/sda
      default=0
      timeout=5
      splashimage=(hd0,0)/boot/grub/splash.xpm.gz
      hiddenmenu
      title CentOS (2.6.18-194.el5PAE)
               root (hd0,0)
               kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
               initrd /boot/initrd-2.6.18-194.el5PAE.img
  В качестве примечания к информации выше, конфигурационный файл содержит путь к ядру и образу initrd
  Если быть кратким, GRUB просто напросто загружает и выполняет образы ядра и initrd.

4. Ядро или Kernel

  Ядро монтирует файловую систему в соответствии с настройкой «root=» в фале grub.conf
  Выполняет программу /sbin/init
  Поскольку init — это первый процесс, запущенный ядром Linux, поэтому она имеет идентификатор процесса (PID) №1. Можете выполнить «ps -ef | grep init» и убедиться в этом.
  initrd — это Initial RAM Disk, он же временный диск в оперативной памяти
  initrd используется самим ядром в качестве временной корневой файловой системы, пока kernel не загрузится в реальную примонтированную файловую систему. Этот временный диск также содержит необходимые для загрузки драйверы, позволяющие получить доступ к разделам дисков и другому оборудованию

5. Init

  Смотрит в файл /etc/inittab для того, чтобы определить уровень выполнения (run level).
  Есть следующие уровни выполнения:
      0 – прервать выполнение
      1 – Однопользовательский режим, так называемый «Single user mode», или иными словами, консоль восстановления
      2 – Многопользовательский режим без поддержки NFS
      3 – Полноценный многопользовательский режим
      4 – не используется
      5 – X11
      6 – перезагрузка
  Init определяет уровень выполнения по умолчанию исходя из /etc/inittab и использует его для загрузки всех необходимых программ.
  Выполните «grep initdefault /etc/inittab» на вашей системе, и вы узнаете, какой уровень по умолчанию у вас используется
  Если у вас не получается жить спокойно, то можете установить стандартный уровень на 0 или 6. :)
  В большинстве случаев вам будет достаточно уровня 3 или 5.

6. Уровень выполнения программ (Runlevel)

  Когда Линукс выполняет свою загрузку, вы можете наблюдать загрузку различных служб. К примеру, это могут быть сообщения типа «starting Postfix … OK» (запускается Postfix). Эти службы — и называются программами уровня выполнения, выполняемые из директории, которая соответствует нужному уровню выполнения.
  Исходя из настроек по умолчанию, система будет выполнять файлы в соответствии с нижеприведенными директориями.
      Выполнение уровня 0 – /etc/rc.d/rc0.d/
      Выполнение уровня 1 – /etc/rc.d/rc1.d/
      Выполнение уровня 2 – /etc/rc.d/rc2.d/
      Выполнение уровня 3 – /etc/rc.d/rc3.d/
      Выполнение уровня 4 – /etc/rc.d/rc4.d/
      Выполнение уровня 5 – /etc/rc.d/rc5.d/
      Выполнение уровня 6 – /etc/rc.d/rc6.d/
  Но имейте ввиду, что еще в каталоге /etc могут быть символические ссылки. Например, /etc/rc0.d залинкован на /etc/rc.d/rc0.d.
  В каталогах /etc/rc.d/rc*.d/ вы можете увидеть список программ, имя которых начинается из букв S и K.
  Программы, начинающиеся на S используются для запуска. S, потому что startup.
  Программы, которые начинаются с литеры K используются — правильно — для завершения работы. K, потому что kill.
  Еще есть номера рядом с буквами S и K в именах программ. Эти номера используются для определения порядка запуска этих программ.
  К примеру, S12syslog предназначен для запуска демона syslog, его порядковый номер 12. S80sendmail — для запуска демона sendmail, имеющего порядковый номер 80. Таким образом, программа syslog будет запущена перед sendmail.

Вот и все. Возможно, некоторым из вас это не ново и особого интереса не было при чтении статью, поскольку она более ориентирована на начально-средний уровень знакомства з Линуксом. В таком случае могу лишь сказать, что «повторение — мать учения» (с).

Загрузка из командной строки grub

 grub> set root=(hd0,0)
 grub> linux /boot/kenelname* root=/dev/sda1 параметры ядра 
 grub> initrd /boot/initrd -виртуальная фс для загрузки 
 grub> boot

Управление загрузкой системы update-rc.d foobar defaults

для сервиса foobar будет установлены уровни запуска 2,3,4,5 (по дефолту)

Чтобы убрать сервис из автозапуска, выполняем команду:

# update-rc.d -f foobar remove

Показывать список состояния всех стартовых скриптов при запуске, утилита update-rc.d не умеет. И чтобы увидеть какие сервисы будут автоматически запущены при runlevel 2, приходится выполнять комадны вроде:

# ls -l /etc/rc2.d/S*

Зато в дистрибутивах RedHat этот список можно получить командой chkconfig –list

Так как я предпочитаю дистрибутивы Debian и большинство систем у меня именно на нем, очень удобно использовать утилиту sysv-rc-conf, тем более она имеется в штатных репозитариях. Вообще, она должна работать на любых Unix системах, где управление загрузкой сервисов осуществляется использованием симлинков в «/etc/rc{runlevel}.d/», как заявляют разработчики. К тому же утилита написана на языке Perl.

Устанавливаем утилиту из репозитария:

# aptitude install sysv-rc-conf

Если просто запустить из консоли sysv-rc-conf, то она предстанет перед нами в виде консольного GUI, где можно перемещаться курсором между пунктами, пробелом отмечая чекбоксы – все очень просто.

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

параметры корневой файловой системы

root=устройство Устанавливает корневую файловую систему Например, root=/dev/hda1

В качестве устройства допустимыми являются /dev/hdaN .. /dev/hddN - для IDE-дисков /dev/sdaN .. /dev/sdeN - для SCSI-дисков /dev/xdaN .. /dev/xdbN - для XT-совместимых дисков /dev/fdN - дисковод для дискет. N=0 - диск А, N=1 - диск B /dev/nfs - не является устройством, но указывает ядру, что нужно произвести загрузку по NFS

ro Монтирование корневой файловой системы в режиме «только чтение» Используется по умолчанию

rw Монтирование корневой файловой системы в режиме «чтение/запись» При использовании этого параметра нельзя запускать программы типа fsck. Перед запуском fsck нужно перемонтировать корневую файлу систему в режиме ro

Управление RAMDISK'ом

ramdisk_start=<смещение> Разрешает ядру находиться на гибком диске вместе со сжатым образом ramdisk'а. Ядро не может быть включено в сжатый образ файловой системы ramdisk'а, так как оно должно быть записано начиная с нулевого сектора, чтобы BIOS могло загрузить загрузочный сектор и ядро могло бы продолжить загрузку.

Если вы используете несжатый образ ramdisk'а, то ядро может быть частью образа файловой системы. Такая дискета может быть загружена с помощью LILO.

Если вы для загрузки используете две дискеты (первая содержит ядро - boot, на второй находится образ файловой системы - root), образ файловой системы должен начинаться на нулевом секторе и смещение = 0.

load_ramdisk= Этот аргумент заставляет ядро использовать ramdisk load_ramdisk=1 сообщает ядру, что нужно загрузить дискету в ramdisk. Значение по умолчанию - 0 - не использовать ramdisk

prompt_ramdisk= Сообщает ядру, что нужно запросить дискету, которая содержит образ файловой системы (promt_ramdisk=1)

ramdisk_size= Устанавливает размер ramdisk'а в Кб.

ramdisk= Определяет размер (в Кб) устройства ramdisk. Например, для загрузочной дискеты 1.44Мб нужно указать ramdisk=1440. Этот аргумент поддерживается ядрами, начиная с версии 1.3.47. Управление памятью

mem= Определяет объем памяти, установленной в компьютере. Пример mem=16384K или mem=16M Иногда нужно указать объем ОЗУ, отличный от того, который имеется на самом деле Например, у вас 810-ый чипсет с интегрированной видеоплатой, тогда вам нужно указать объем ОЗУ на 1Мб меньше (а иногда даже на 2Мб). Это связано с аппаратной особенностью чипсета. Об этом вы можете узнать более подробно на сайте Intel. Другие параметры ядра

debug Сообщения ядра (важные и не очень) передаются через функцию printk(). Если сообщение очень важно, его копия будет передана на консоль, а также klogd() для его регистрации на жестком диске. Сообщения передаются на консоль, потому что иногда невозможно запротоколировать сообщение на жестком диске (например, отказ диска) Предел того, что будет отображаться на консоли, задается переменной console_loglevel. По умолчанию на консоли отображается все, что выше уровня DEBUG (7). Список уровней можно найти в файле kernel.h

init= По умолчанию ядро пытается запустить программу /sbin/init, которая продолжит загрузку согласно стартовым сценариям (rc). Если программа init повреждена, вы можете использовать init=/bin/sh - в оболочке вы сможете заменить поврежденную программу.

no-hlt Процессоры 386 (и выше) имеют инструкцию hlt, которая сообщает процессору не производить никаких действий. При этом обычно процессор переводится в режим пониженного потребления питания и ожидает прерывания от устройства. Некоторые чипы 486DX-100 имеют проблемы с этой инструкцией. Параметр no-hlt позволяет использовать Linux на бракованных процессорах.

no387 Отключает использование математического сопроцессора.

no-scroll Отключает функцию прокрутки экрана во время загрузки

reboot= Возможные значения: cold и warm, т.е. «холодная» или «горячая» перезагрузки Поддерживается ядрами версии 2.0 и выше

single Однопользовательский режим для администратирования системы, например в случае отказа.

еще параметры

управление_загрузкой_ос._настройка_сети.txt · Последнее изменение: 2013/06/03 18:46 (внешнее изменение)

DokuWiki Appliance - Powered by TurnKey Linux