Этапы загрузки системы. Этапы загрузки: досистемная загрузка ОС Linux Загрузка операционной системы linux

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

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

Я предлагаю вам познакомиться со следующими уровнями типичной загрузки 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 – не используется
  • 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, потому что s tartup.
  • Программы, которые начинаются с литеры K используются - правильно - для завершения работы. K, потому что k ill.
  • Еще есть номера рядом с буквами S и K в именах программ. Эти номера используются для определения порядка запуска этих программ.
  • К примеру, S12syslog предназначен для запуска демона syslog, его порядковый номер 12. S80sendmail - для запуска демона sendmail, имеющего порядковый номер 80. Таким образом, программа syslog будет запущена перед sendmail.

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

Дополнения, исправления, уточнения

В комментариях неоднократно было апеллировано к тексту статьи, поэтому, думаю, стоит учесть некоторые важные комментарии хабрасообщества. (спасибо artemlight , 3al , Tishka17 , HhyperH , Next_Alex , Ilya_Shmelykh , Aux , soomrack , Xpeh)
  • artemlight: : «Ну скажем прямо - так грузятся далеко не все дистры». С ним согласилось большинство, отмечая и bsd-style init, u-boot, и хоть initrd в статье пропущен, стоить заметить, что он нужен ядру не во всех дистрибутивах. Также отмечено, что в slackware поддержка rc.d осуществляется только в качестве совместимости, а встраиваемые системы грузятся иначе. На декстопах иногда бывает EFI, а кроме того Linux популярен в мире embedded и там ещё куча разных платформ. Линукс в телефоне вообще иначе грузится.
  • soomrack , ссылая на википедию: Еще хочется сделать замечание по поводу MBR, первого сектора и пр. Все несколько усложнилось за последние годы. Сейчас уместней говорить о EFI.

    «GUID Partition Table (GPT) является стандартным форматом размещения таблиц разделов на физическом жестком диске. Он является частью Extensible Firmware Interface (EFI) (Расширяемый Микропрограммный Интерфейс) - стандарта, предложенного Intel на смену отжившего BIOS, одного из последних реликтов первозданной IBM PC. EFI использует GPT там, где BIOS использует Главную загрузочную запись (MBR)....»

  • Так же просили вспомнить о LILO. LILO, ми тебя помним! Привет!
  • Xpeh доплняет , что «BIOS (и не упомянутый тут (U)EFI) прежде всего занимается инициализацией устройств (в том числе загрузку собственных биосов PCI-устройств), про это ничего не написано. Хотя эта роль постепенно сокращается, так как всё больше железа инициализирует себя само и/или поддерживает горячее подключение и потому всё равно инициализируется ОС, но, например, инициализацию оперативной памяти он делает всегда. „
  • VolCh уточняет загрузку для ОС Debian-Ubuntu:
    Для Debian/Ubuntu:
    - каталога /etc/rc.d/ нет;
    - каталоги /etc/rc?.d/ настоящие каталоги, а не ссылки;
    - в этих каталогах хранятся ссылки на скрипты в каталоге /etc/init.d/

    Вручную лучше в /etc/rc?.d/ ничего не править, а использовать команду update-rc.d, которая позволяет создавать ссылки, удалять их, запрещать (фактически переименовывать c S* на K*) и разрешать (c K* на S*) запуск.

Linux - сложная операционная система, и процедура ее включения/выключения не сводится к простому нажатию кнопки питания. Следовательно, чтобы система работала корректно, выполняйте операции запуска и останова по всем правилам.

Хотя процесс начальной загрузки системы всегда был достаточно сложным, все же он был несколько проще в те дни, когда изготовители определяли буквально все аспек­ты аппаратного и программного обеспечения. Теперь, когда Linux управляет аппарат­ным обеспечением персональных компьютеров (ПК), процедура загрузки должна вы­полняться по правилам ПК. При этом приходится иметь дело с множеством возможных конфигураций.

Под начальной загрузкой Linux понимается запуск системы при включении питания . Поскольку обычные средства операционной системы на данном этапе еще недоступны, система должна в буквальном смысле “обслужить себя самостоятельно”. В ходе этого процесса ядро системы загружается в память и активизируется. Затем выполняется ряд инициализационных задач, после чего система готова к обслуживанию пользователей.

Начальная загрузка - это период особой уязвимости системы. Ошибки в конфигу­рационных файлах, сбои в работе или отсутствие нужного оборудования, повреждения файловых систем могут помешать компьютеру нормально начать работу. Настройка ре­жимов загрузки часто является одной из первых задач, которую приходится решать ад­министратору в новой системе. К несчастью, эта задача - одна из наиболее сложных, и для ее решения необходимо хорошо знать Linux.

Когда включается питание, запускается на выполнение загрузочный код, хранящий­ся в ПЗУ. Он должен запустить ядро. Ядро опрашивает состояние аппаратных устройств, а затем запускает демон init , идентификатор которого всегда равен 1.

Прежде чем на экране появится регистрационное приглашение, должен произой­ти целый ряд событий. Файловые системы должны быть проверены и смонтированы, а системные демоны - запущены. Соответствующие процедуры реализуются с помо­щью сценариев интерпретатора команд, которые последовательно запускаются демоном init. Эти сценарии часто называют rc-файлами, поскольку они имеют префикс “ rc ”. Он расшифровывается как “run command” (команда запуска) и является пережитком, оставшимся в наследство от операционной системы CTSS, существовавшей примерно в 1965 году. Конкретная структура сценариев и способ их выполнения зависят от системы.

Автоматическая и ручная загрузка

Linux-системы могут загружаться автоматически либо вручную. В первом случае система запускается самостоятельно, без какого-либо вмешательства извне. Во втором случае также все происходит автоматически до определенного момента, а перед вы­полнением основных инициализирующих сценариев управление передается оператору (человеку, сидящему за терминалом). В этот момент система входит в так называемый “однопользовательский режим”. Большинство системных процессов еще не начало вы­полняться, и вход других пользователей в систему невозможен.

В повседневной работе почти всегда применяется автоматическая загрузка. Типичная процедура загрузки на современном компьютере выглядит так: пользователь включа­ет питание и ждет (ждет, ждет, ждет...), пока система не перейдет в диалоговый режим. Системный администратор, однако, обязан не только понимать, как проходит автома­тическая загрузка, но и знать, как загрузить систему вручную. К последнему средству приходится прибегать при возникновении проблем, делающих невозможной автомати­ческую загрузку. Это может быть вызвано, например, повреждением файловой системы или ошибками в конфигурации сетевой платы.

Этапы загрузки

Типичная процедура начальной загрузки системы Linux состоит из шести этапов:

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

    Инициализация ядра

    Ядро Linux представляет собой программу, и первым этапом начальной загрузки является запись этой программы в память для последующего выполнения. Файл ядра обычно называется /vmlinuz или /boot/vmlinuz .

    В Linux загрузка ядра осуществляется в два этапа. Сначала в память компьютера с диска считывается (с помощью кода, записанного в ПЗУ) небольшая программа началь­ной загрузки, которая затем выполняет собственно загрузку ядра.

    Ядро выполняет тесты, позволяющие определить, сколько памяти имеется в распо­ряжении системы. Часть внутренних структур ядра имеет фиксированный размер, по­этому ядро резервирует определенный объем физической памяти для самого себя. Эта память недоступна пользовательским процессам. Ядро выдает на консоль сообщение об общем объеме физической памяти и объеме памяти, доступной пользователю.

    Конфигурирование аппаратных средств

    Одна из первых задач ядра - выявление компонентов аппаратного обеспечения. Создавая ядро для конкретной системы, можно указать, какие устройства оно должно проверять. При активизации ядро пытается найти и проинициализировать все устрой­ства, о которых ему было сообщено. Ядро выводит на консоль краткую информацию о каждом обнаруженном устройстве. Современные дистрибутивы включают ядро, которое способно работать в большинстве аппаратных конфигураций компьютеров, требуя при этом минимальной настройки или же вообще обходясь без нее.

    Информация об устройствах, задаваемая при конфигурировании ядра, зачастую ока­зывается неполной. В подобной ситуации ядро пытается получить необходимые сведе­ния, опрашивая устройства, подключенные к системной шине, и собирая нужную ин­формацию у соответствующих драйверов. Драйверы отсутствующих или не отвечающих на контрольный сигнал устройств отключаются. Если позднее устройство будет подклю­чено к системе, можно будет динамически загрузить или активизировать его драйвер.

    Процессы ядра

    После завершения этапа базовой инициализации ядро создает в области памяти, вы­деленной для пользовательских программ, несколько “самовыполняющихся” процессов. Это происходит “в обход” стандартного системного вызова fork .

    Количество и характер таких процессов зависят от операционной системы. В Linux это демон init (всегда имеет идентификатор 1; процесс с идентификатором 0 отсутст­вует) и различные обработчики памяти и сигналов ядра, в том числе те, которые пред­ставлены в табл. 1. Все эти процессы имеют идентификаторы с низкими номерами, а их имена в списках ps заключены в квадратные скобки (например, ). Иногда имена процессов могут содержать в конце символ косой черты и цифру, как, например, . Число указывает процессор, на котором выполняется данный процесс. Эта информация может быть полезна при настройке многопроцессорной системы.

    Таблица 1. Некоторые наиболее часто встречающиеся процессы ядра Linux

    Из этих процессов только init является полноценным пользовательским процессом; остальные фактически представляют собой части ядра, которые были сделаны процес­сами из концептуальных соображений.

    После создания перечисленных процессов ядро больше не принимает участия в про­цедуре начальной загрузки системы. К этому моменту, однако, еще не создан ни один из процессов, управляющих базовыми операциями (например, регистрацией пользователей в системе), и большинство демонов не запущено. Обо всем этом позаботится (в некото­рых случаях косвенно) демон init .

    Действия оператора (только при ручной загрузке)

    Если систему нужно запустить в однопользовательском режиме, оператор уста­навливает в командной строке специальный флаг (слово “ single ”), а ядро передает эту информацию демону init . Последний, в свою очередь, передает управление команде sulogin - специальной версии команды login , - которая выдает приглашение ввести пароль пользователя root . Если он введен правильно, запускается интерпретатор команд с правами суперпользователя. Можно не задавать пароль, а просто нажать < Ctrl+D >, после чего загрузка продолжится в многопользовательском режиме.

    В однопользовательском режиме команды выполняются почти так же, как и в пол­ностью загруженной системе. Однако в SUSE, Debian и Ubuntu обычно монтируется только корневой раздел. Чтобы можно было использовать программы, находящиеся вне каталогов /bin , /sbin или /etc , необходимо вручную смонтировать остальные файло­вые системы.

    Во многих однопользовательских средах корневой каталог файловой системы мон­тируется в режиме только для чтения. Если /tmp является частью корневой файловой системы, выполнение множества команд, которые используют временные файлы (таких как vi), будет невозможно. Чтобы выйти из положения, придется начать однопользова­тельский сеанс с повторного монтирования каталога / в режиме чтения/записи. Нужное действие выполняет команда:

    # mount -o rw,remount /

    В системах Red Hat и Fedora загрузка в однопользовательском режиме выпол­няется несколько более активно, нежели обычно. До того момента, когда на экран будет выведено приглашение интерпретатора команд, эти дистрибутивы попытаются смонтировать все локальные файловые системы. Хотя на первый взгляд такой подход кажется удобным, но при использовании недостаточно продуманной файловой системы он может порождать проблемы.

    Команда fsck , которая проверяет и восстанавливает поврежденные файловые сис­темы, обычно выполняется в ходе автоматической загрузки. Если система запускается в однопользовательском режиме, команду fsck придется вводить вручную.

    Когда интерпретатор команд однопользовательского режима завершит свою работу, система продолжит загрузку в многопользовательском режиме.

    Выполнение сценариев запуска системы

    В тот момент, когда система сможет выполнять сценарии запуска, ее уже можно на­звать Linux. Это еще не полностью загруженная система, но “загадочных” этапов про­цесса загрузки больше не осталось. Файлы сценариев представляют собой обычные ко­мандные файлы, которые выбираются и запускаются демоном init по сложному, но, в общем-то, понятному алгоритму.

    Точное местонахождение, содержимое и организация сценариев запуска заслуживают отдельного изучения.

    Работа в многопользовательском режиме

    После выполнения сценариев запуска система полностью готова к работе, за одним исключением: никто не может в нее войти. Для того чтобы с конкретного терминала (включая системную консоль) можно было зарегистрироваться в системе, должен быть запущен процесс getty , ожидающий поступления запросов от этого терминала. Демон init порождает все необходимые процессы getty , заканчивая этап начальной загрузки. Если система сконфигурирована для работы в графическом режиме, демон init также порождает соответствующие регистрационные процессы, такие как xdm или gdm.

    Не забывайте о том, что демон init продолжает играть важную роль даже по завер­шении начальной загрузки. У него есть один однопользовательский и несколько много­пользовательских “уровней выполнения”, определяющих, какие ресурсы системы будут доступны пользователю.

    Загрузка Linux на персональном компьютере

    До этого момента описывалась общая схема начальной загрузки. Теперь некоторые наиболее важные (и сложные) ее этапы необходимо рассмотреть подробнее, проанали­зировав дополнительные особенности функционирования персональных компьютеров.

    Загрузка системы на персональном компьютере - это многоступенчатый процесс. Когда включается компьютер, начинает выполняться код, записанный в ПЗУ. Точное его местонахождение и структура зависят от типа оборудования. В компьютерах, соз­данных специально для UNIX или другой коммерческой операционной системы, код “прошивается” разработчиком, который заранее задает алгоритм подключения уст­ройств, базовой инициализации сети и распознавания локальных файловых систем. Это очень удобно для системного администратора. Ему достаточно ввести лишь имя нового файла ядра, а код ПЗУ автоматически обнаружит и прочитает этот файл.

    На персональных компьютерах код начальной загрузки представлен в виде базовой подсистемы ввода-вывода - BIOS (Basic Input/Output System), которая чрезвычайно уп­рощена в сравнении с фирменным кодом UNIX-станций. В действительности в BIOS есть несколько уровней кода: для самого компьютера, для видеоплаты, для SCSI-адаптера, если таковой имеется, и, иногда, для других периферийных устройств вроде сетевых плат.

    Встроенному коду BIOS известно об устройствах, расположенных на материнской плате, в частности контроллере IDE (и жестких дисках), плате сетевого адаптера, кон­троллере клавиатуры, последовательных и параллельных портах. SCSI-адаптеры знают только об устройствах, подключенных непосредственно к ним. К счастью, за последние несколько лет сложные взаимодействия, необходимые для обеспечения совместной ра­боты этих устройств, были стандартизованы и теперь почти не требуют вмешательства оператора.

    В современных компьютерах код BIOS интеллектуальнее, нежели раньше. Они по­зволяют на этапе начальной загрузки входить в режим конфигурирования, удерживая нажатой одну или две клавиши. В большинстве случаев названия этих клавиш отобра­жаются на экране, чтобы их не нужно было искать в документации.

    В режиме конфигурирования можно выбрать, с какого устройства требуется загру­жаться, хотя выбор не так уж велик. Обычно последовательность загрузки задается в виде правила, например: “сначала - дисковод для гибких дисков, затем - дисковод CD-ROM, в последнюю очередь - жесткий диск”. К сожалению, в некоторых BIOS за­грузка ограничена возможностью загрузки с первого IDE-дисковода CD-ROM или пер­вого жесткого диска IDE. Могут также распознаваться SCSI-адаптеры.

    Когда компьютер определил, с какого устройства следует загружаться, считываются первые 512 байтов с диска. Этот сегмент диска называется главной загрузочной записью (ГЗЗ). В ней хранится программа, которая сообщает компьютеру о том, в каком разделе диска расположена программа вторичной загрузки (загрузчик операционной системы).

    Стандартная программа, находящаяся в ГЗЗ, дает компьютеру указание извлечь за­грузчик ОС из первого раздела диска. В Linux поддерживаются более сложные програм­мы, которые могут работать с несколькими операционными системами и ядрами.

    Найдя раздел, с которого будет выполняться загрузка системы, программа ГЗЗ пыта­ется запустить загрузочную программу, связанную с этим разделом. В случае успеха этой программе передаются полномочия по дальнейшей загрузке ядра.

    Давайте разделим процесс загрузки ОС Linux на девять этапов, которые имеют место практически для любой конфигурации ОС Linux:

    1. Первый этап загрузки -- это считывание BOIS"ом компьютера или другими программно-аппаратными средствами MBR жесткого диска или другого загрузочного устройства (например, компакт-диска, гибкого диска или сетевого загрузочного устройства, etc.).
    2. Начинается работа загрузчика. Linux на архитектуре x86 обычно использует LILO или GRUB. Некоторые старые системы могут использовать loadlin чтобы загрузиться через вспомогательный DOS-раздел. В системах Power PC® это может быть BootX или yaboot. Вообще, загрузчик -- это простая программа, которая, тем не менее, знает, где искать ядро Linux, может выбрать, какую загружать из нескольких версий ядра или даже выбрать другую операционную систему на той же машине.
    3. Монтируется корневая файловая система. В некоторых случаях, временно монтируется начальная корневая файловая система из содержимого, например, RAM-диска, инициализируемого загрузчиком, чтобы дать возможность загружаться специальным драйверам и модулям, которые могут понадобиться для работы настоящей корневой файловой системы.

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

    4. Запускается процесс init , прародитель всех остальных процессов в ОС Linux.
    5. Считывается содержание файла /etc/inittab, чтобы определиться с дальнейшим ходом загрузки. Особенно важно что прописано в файле /etc/inittab в строке, определяющей уровень запуска системы (и, следовательно, последующие этапы загрузки).

      Действительно, все происходящее после этого момента полностью определяется содержимым файла /etc/inittab. Фактически, скрипты и другие инструменты, которые работают, подчиняются соответствующим настройкам, но, в принципе, вы могли бы полностью изменить /etc/inittab, чтобы управлять работой различных инструментов по вашему желанию.

      Одна из установок в файле /etc/inittab особенно важна. Это строка, похожая на:

      id:5:initdefault:

      Обычно она находится ближе к началу файла и устанавливает уровень запуска системы. Уровень запуска определяет, какие действия будут предприняты в оставшихся предписаниях файла /etc/inittab.

      Что происходит, когда сценарий /etc/inittab отработан? И особенно, какие именно файлы и директории принимают участие в процессе?

    6. Инициализация, независимая от уровня запуска. Существуют ряд действий, которые будут выполняться независимо от установленного уровня запуска. Эти шаги обозначены в /etc/inittab строками, похожими на:

      # System initialization.
      si::sysinit:/etc/rc.d/rc.sysinit

      В некоторых системах Linux (в основном в системах на основе Debian), вы скорее увидите строчки, более похожие на следующие:

      si::sysinit:/etc/init.d/rcS

      В последнем случае файл /etc/init.d/rcS -- это просто скрипт, который по очереди запускает скрипты /etc/rcS.d/??*. С другой стороны, если в вашей системе используется /etc/rc.d/rc.sysinit, для выполнения инициализации достаточно одного длинного скрипта, содержащегося в этом файле.

    7. Инициализация, зависимая от уровня запуска. Фактически, вы можете определить столько действий, связанных с уровнем запуска, сколько захотите, и при этом каждое действие может относиться к одному или нескольким уровням запуска. Как правило, /etc/inittab будет содержать строки типа:

      l0:0:wait:/etc/rc.d/rc 0
      # ...
      l5:5:wait:/etc/rc.d/rc 5
      l6:6:wait:/etc/rc.d/rc 6

      В свою очередь, скрипт /etc/rc.d/rc будет управлять всеми файлами, названными /etc/rc$1.d/??*. В следующем примере можно увидеть, что в данной системе, стартующей с уровнем запуска 5, будут выполняться (по порядку):

      /etc/rc5.d/K15postgresql
      /etc/rc5.d/S01switchprofile
      /etc/rc5.d/S05harddrake
      ...
      /etc/rc5.d/S55sshd
      ...
      /etc/rc5.d/S99linuxconf
      /etc/rc5.d/S99local

      Файлы, начинающиеся с "K" или "k" являются убивающими (kill) скриптами , они завершают процессы или упорядочивают их действия (последствия). Файлы, которые начинаются с "S" или "s" -- это запускающие (startup) скрипты , они начинают новые процессы или подготавливают систему к работе с этим уровнем запуска. Большинство из них являются скриптами shell, и большая часть их будет ссылками (часто на /etc/init.d/).

      В то время когда система Linux стартует с определенным уровнем запуска, вы хотите зарегистрироваться в системе как пользователь. Чтобы авторизация прошла успешно, используется программа getty. Множество разновидностей программ на основе getty используется создателями дистрибутивов, типа agetty, mgetty, и mingetty. Но все они делают примерно и то же.

    8. Войдите в систему в приглашении. Уже знакомый нам /etc/inittab обычно запускает getty на одном или нескольких виртуальных экранах и делает это для нескольких уровней запуска. Уровни определены в строках типа:

      # Run gettys in standard runlevels
      1:2345:respawn:/sbin/mingetty tty1
      2:2345:respawn:/sbin/mingetty tty2
      3:2345:respawn:/sbin/mingetty tty3
      4:2345:respawn:/sbin/mingetty tty4
      5:2345:respawn:/sbin/mingetty tty5
      6:2345:respawn:/sbin/mingetty tty6

      Цифра в начале показывает, в каком виртуальном терминале будет работать программа getty; следующие несколько цифр -- это те уровни запуска, при которых это случится (например, запуск mingetty при каждом из уровней 2, 3, 4 и 5).

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

    Понятие уровня запуска несколько произвольно, по крайней мере, оно не прописано в ядро Linux. Действительные уровни запуска сопоставлены набору номеров, чтобы можно было установить (или изменить имеющийся) по умолчанию уровень запуска выбором номера от 0 до 6. В соответствии с соглашением, следующий смысл присваивается каждому номеру уровня запуска:


    Листинг 1. Уровни запуска
    # Default runlevel. The runlevels used by Mandrake Linux are: # 0 - Halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you don"t have networking) # 3 - Full multiuser mode # 4 - Unused # 5 - X11 # 6 - Reboot (Do NOT set initdefault to this)

    Это соглашение, как можно видеть, используется в дистрибутиве Mandrake Linux, но большинство дистрибутивов используют то же самое соглашение. Может так оказаться, что текстовые или встроенные дистрибутивы не используют некоторые из уровней запуска, но все равно ими будут зарезервированы эти же номера.

    Вы видели множество строчек из файла /etc/inittab в примерах, но что же конкретно они означают? Каждая строка имеет формат:

    id:runlevels:action:process

    Поле id это короткое сокращение, обозначающее конфигурационную строчку. (1 - 4 буквы в свежих версиях init ; 1 - 2 в более старых). Поле runlevels уже обсуждалось. Следующее поле action обозначает действие, предпринимаемое строкой. Некоторые действия могут быть "специальными," такие как:

    ca::ctrlaltdel:/sbin/shutdown -t3 -r now

    Эта строка устанавливает действие для последовательности клавиш Ctrl-Alt-Delete (независимо от уровня запуска). Но большинство действий просто запускает соответствующие процессы. Частичный список действий включает:

    • respawn: Процесс будет перезапущен всякий раз, когда завершится (как в случае с getty).
    • wait:Процесс будет начат однажды, когда будет введен указанный уровень запуска, и init будет ждать его завершения.
    • once: Процесс будет выполнен однажды, когда будет введен указанный уровень запуска.
    • boot: Процесс будет выполнен во время загрузки системы (но после sysinit). Уровень запуска не имеет значения.

    Настройка запуска системы и процесса загрузки

    Несколько лет назад для загрузки Linux на x86 системах в основном использовалась программа, названная LILO. Название LILO -- сокращение от "LInux LOader." Сейчас более популярна программа, названная GRUB (GRand Unified Bootloader). На системах, отличных от x86, используются другие загрузчики, но все они сконфигурированы аналогичным для LILO и GRUB способом.

    Хотя существуют различия в их конфигурационном синтаксисе, и LILO и GRUB выполняют в значительной степени одну и ту же задачу. По существу, каждый из них предоставляет выбор операционной системы (включая, возможно, несколько ядер Linux) и загружает ядро выбранной ОС в память компьютера. Обе программы позволяют вам передавать аргументы ядру Linux по ходу, и обе могут быть сконфигурированы с возможностью загрузки на том же компьютере ОС, отличных от Linux.

    Либо LILO, либо GRUB (или какой-то другой загрузчик) находится на MBR (Master Boot Record) первичного жесткого диска, который автоматически загружается системным BIOS. LILO имеет ограничения на загрузку специального raw сектора жесткого диска. Загрузчик GRUB более изощрен и распознает разные файловые системы, например, такие как ext2/3, ReiserFS, VFAT или UFS. Это означает, что GRUB не нужно перезаписывать MBR каждый раз, как только изменился конфигурационный файл (как это делает LILO).

    Настройка загрузчика LILO производится при помощи содержимого файла /etc/lilo.conf. Для более детального изучения параметров настройки LILO, прочитайте страницы помощи man для lilo.conf. Общий характер поведения определяют несколько начальных параметров. Например, вы наверняка увидите boot=/dev/hda или нечто подобное. Эта команда устанавливает загрузчик на MBR первичного жесткого диска IDE. Вы можете также установить LILO внутрь конкретного раздела, обычно это нужно, когда вы используете другой основной загрузчик. Например, boot=/dev/sda3 устанавливает LILO на третий раздел первого SCSI диска. Другие параметры определяют внешний вид и время ожидания LILO.

    Запомните, что после того, как вы внесете исправления в файл /etc/lilo.conf, вам необходимо запустить LILO для фактической установки нового загрузочного сектора, который используется во время загрузки. Можно легко забыть установить новые параметры, но загрузчик сам по себе не сможет прочесть новую конфигурацию, за исключением того случая, когда записаны фактические адреса секторов (которые LILO распознает в процессе работы).

    Если используется LILO, особенное значение имеют строки типа image= и, может быть, other= , если имеется выбор между ОС Linux и другими операционными системами. Пример /etc/lilo.conf может содержать:


    Листинг 2. Пример конфигурации LILO
    image=/boot/bzImage-2.7.4 label="experimental" image=/boot/vmlinuz label="linux" initrd=/boot/initrd.img append="devfs=mount acpi=off quiet" vga=788 read-only other=/dev/hda3 label=dos

    Такая конфигурация позволяет вам выбирать либо ядро версии 2.7.4, которое находится в стадии разработки, либо стабильное ядро (далее объявлено, что использовать как стартовый RAM-диск (initrd) в процессе загрузки). Вы можете также выбрать DOS, которая находится на третьем разделе первичного IDE диска.

    Бесспорным преимуществом GRUB является то, что его не надо переустанавливать всякий раз, после того как вы изменили параметры загрузки. Конечно, в первый раз GRUB все же нужно установить, обычно это делается командой типа grub-install /dev/hda . Как правило, в процессе инсталляции дистрибутив делает это для вас сам, так что вы, может статься, так ни разу сами этого и не сделаете.


    Листинг 3. Пример конфигурации GRUB
    timeout 5 color black/yellow yellow/black default 0 password secretword title linux kernel (hd0,1)/boot/vmlinuz root=/dev/hda2 quiet vga=788 acpi=off initrd (hd0,1)/boot/initrd.img title experimental kernel (hd0,1)/boot/bzImage-2.7.4 root=/dev/hda2 quiet title dos root (hd0,4) makeactive chainloader +1

    И LILO и GRUB позволяют передать специальные параметры выбранному вами ядру. Если вы используете LILO, вы можете передать параметры приглашению boot добавлением их к выбранному вами ядру. Например, для обычных параметров загрузки вы можете ввести:

    LILO: linux ether=9,0x300,0xd0000 root=/dev/ha2 vga=791 acpi=on

    Эта строчка передает специальные параметры модулю Ethernet, указывает корневой раздел, выбирает режим видео, и т.д. Конечно, не все это удобно, так как вы должны знать точно подходящие значения этих параметров и уметь правильно ввести их.

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

    LILO: experimental single

    Другой специальный параметр -- аргумент init= , который позволяет вам использовать программы, отличные от init в качестве первичного процесса. Параметры для режима аварийной ситуации могут быть следующими: init=/bin/sh , что, по крайней мере, позволит вам иметь в своем распоряжении командную строку (Linux shell), если init совсем вышел из строя.

    С загрузчиком GRUB вы имеете еще большую гибкость. Фактически, GRUB представляет из себя оболочку командной строки и предоставляет пользователю базовую функциональность shell. GRUB дает возможность не только изменить базовую конфигурацию загрузчика, но даже читать файловые системы. Для настройки параметров загрузки, нажмите "e" в командной строке GRUB, после этого добавьте параметры (например, номер уровня запуска или ключевое слово "single" как в LILO). Все другие аргументы в приглашении загрузки, которые вы могли бы ввести, используя LILO, могут быть использованы в командной строке GRUB.

    Для понимания своих возможностей вы можете открыть командную строку GRUB. Например, предположите, что вам кажется, что ваш файл /etc/inittab плохо сконфигурирован, и вы хотите исследовать это перед загрузкой. Вы могли бы ввести:

    grub> cat (hd0,2)/etc/inittab

    Это позволило бы заранее просмотреть ваш инициализацонный файл, без запуска операционной системы. Если бы там обнаружилась ошибка, то можно было бы загрузиться в однопользовательский режим и исправить ее.

    Как только вы осознаете шаги в загрузке Linux после загрузки ядра (другими словами, процесс init и все, что он вызывает), вы также осознаете, как их отредактировать. В основном, вся настройка осуществляется редактированием файла /etc/inittab и различных скриптов в каталоге /etc/rc?.d/.

    Например, недавно мне понадобилось настроить видео BIOS на ноутбуке с Linux, базирующемся на Debian, использующем разработки третьих фирм. Если он не был запущен до того, как запустятся X11, мой драйвер XOrg не установил бы правильные режимы видео. Как только я выяснил, в чем была проблема, решение было столь же просто, как создание скрипта /etc/rcS.d/S56-resolution.sh. Другими словами, я запускал дополнительный скрипт при каждой загрузке системы.

    Замечу, что я удостоверился, что этот скрипт исполняется раньше, чем /etc/rcS.d/S70xorg-common вследствии простого соглашения, что скрипты запускаются в алфавитном порядке (если бы я хотел, чтобы мой скрипт выполнялся позже, я, возможно, назвал бы его S98-resolution.sh вместо /etc/rcS.d/S56-resolution.sh). Может быть, я поместил бы этот скрипт только в каталог /etc/rc5.d/, чтобы он запускался, когда выполняются X11, но я могу вручную запустить startx из-под другого уровня запуска.

    Все настройки в процессе инициализации открыты для редактирования, прямо в файловой системе; почти все можно исправить с помощью текстовых скриптов.

    Восстановление файловой системы

    Самое замечательное свойство Linux, которое рассматривается в перспективе обслуживания системы, это то, что все является файлом. Конечно, время от времени возникает вопрос , в каком файле что живет. Но зато, как правило, восстановление Linux означает применение основных утилит файловой системы, таких как cp , mv , rm и текстовый редактор типа vi. Для автоматизации этих действий полезны такие инструменты как grep, awk и bash; или на более высоком уровне, perl или python. Но в данном учебном пособии мы не ставим целью изучать обращение с файлами.

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

    Ваш лучший друг в восстановлении поврежденной файловой системы fsck .

    Команда fsck является фактически только началом команды для большого количества других инструментов fsck.* -- fsck.ext2 , fsck.ext3 , или fsck.reiser . Вы можете определить тип явно, используя опцию -t , но fsck предпримет усилие понять самостоятельно. Прочитайте страницу помощи man для fsck или fsck.* для получения более подробной информации. Основное, что вам нужно знать, что при использовании аргумента -a программа будет пытаться исправить все найденные ошибки.

    Вы можете проверить неподмонтированную файловую систему, упоминая местонахождение устройства, на котором она находится. Например, введите fsck /dev/hda8 , чтобы проверить неиспользующийся раздел. Вы можете также проверить корневую файловую систему, набрав fsck /home , но как правило, делают это, только если файловая система уже смонтирована как "только для чтения", а не для "чтения-записи".

    Одно из основных преимуществ систем Linux состоит в гибкости пользовательского контроля, при монтировании и отмонтировании файловых системам. В отличие от Windows и некоторых других операционных систем, местоположения разделов не автоматически закреплены ядром Linux, а присоединены к иерархии корневой файловой системы командой mount . Кроме того, различные типы файловых систем (даже на различных устройствах) могут быть смонтированы в рамках той же самой иерархии. Вы можете отмонтировать конкретный раздел командой umount , назначать любую точку монтирования (например, /home) или адрес устройства (например, /dev/hda7).

    Когда производится восстановление файловой системы, возможность управлять точками монтирования позволяет вам проводить анализ состояния разделов, используя fsck или другие инструменты, без риска дальнейшего повреждения уже поврежденной файловой системы. Вы можете также в обычном порядке монтировать файловую систему, используя различные параметры; самые важные из них монтируют файловую систему для использования только в режиме чтения с помощью одного из синонимов -r или -o ro .

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

    # umount /home # old /dev/hda7 home dir
    # mount -t xfs /dev/sda1 /home # new SCSI disk using XFS
    # mount -t ext3 /dev/sda2 /tmp # also put the /tmp on SCSI

    Для восстановления, модернизации системы, и специальных целей полезно иметь возможность монтировать и отмонтировать файловые системы по желанию. Но для повседневной работы, вам будет удобно, чтобы необходимый конкретный набор подмонтирований осуществлялся автоматически при каждой загрузке системы. Вы управляете точками монтирования, прописывая нужные строки конфигурации в файл /etc/fstab. Типичная конфигурация могла бы выглядеть так:


    Листинг 4. Пример конфигурации в /etc/fstab
    /dev/hda7 / ext3 defaults 1 1 none /dev/pts devpts mode=0620 0 0 /dev/hda9 /home ext3 defaults 1 2 none /mnt/cdrom supermount dev=/dev/hdc,fs=auto,ro,--,iocharset=iso8859-1,codepage=850,umask=0 0 0 none /mnt/floppy supermount dev=/dev/fd0,fs=auto,--,iocharset=iso8859-1,sync,codepage=850,umask=0 0 0 none /proc proc defaults 0 0 /dev/hda8 swap swap defaults 0 0
    Linux: Полное руководство Колисниченко Денис Николаевич

    1.8. Первый запуск Linux

    1.8. Первый запуск Linux

    Если вы выбрали для входа в систему графический режим (или инсталлятор выбрал его сам, ни о чем не спросив), то вы увидите графический экран с полем ввода имени и пароля. Зарегистрируйтесь в системе (лучше под тем именем, которое завели для обычного пользователя; используйте root, только если обычных учетных записей у вас еще нет), и вы увидите рабочий стол той оконной среды, которую установили в качестве среды по умолчанию, внешне довольно похожий на рабочий стол Windows.

    Как же так, вы ведь слышали, что настоящие линуксоиды работают в среде командной строки? Сейчас найдем и командную строку.

    Вы знаете, что консолью, или терминалом (для персонального компьютера эти понятия - синонимы) называются устройства ввода-вывода, предназначенные для общения системы с пользователем, то есть клавиатура и монитор. В UNIX-подобных системах существует понятие виртуальных консолей - консолей, по очереди занимающих физически одни и те же монитор и клавиатуру. На каждой из них может быть открыт отдельный сеанс работы пользователя, запущены свои приложения, в общем, они представляют собой почти независимые друг от друга вычислительные системы.

    В большинстве дистрибутивов Linux по умолчанию обслуживается шесть текстовых виртуальных консолей, седьмая - графическая. На ней вы и находитесь. Чтобы переключиться с нее на первую текстовую консоль, нажмите комбинацию клавиш Ctrl+Alt+F1 (на шестую - Ctrl+Alt+F6).

    В ответ на приглашение программы login: введите root и нажмите <Ввод>. Потом введите пароль, и ваш сеанс работы в текстовой консоли начат.

    Информацию о сетевом имени машины, версии ОС, архитектуре можно получить по команде uname -а.

    Если учетной записи для обычного пользователя у вас еще нет, самое время ее завести. Введите команду

    #useradd < имя >

    Если вам ответили «command not found», то, значит, в вашей системе эта команда называется adduser .

    #passwd < имя >

    Теперь можно регистрироваться под новым именем на другой виртуальной консоли. Чтобы с текстовой консоли переключиться на другую текстовую, нажмите комбинацию Alt+Fn, где n - число от 1 до 6. Вы снова увидите приглашение login: .

    Зарегистрировались? Обратите внимание на строку приглашения. На той консоли, где вы зарегистрировались как root, она оканчивается символом #, а для любого обычного пользователя - символом $. Кроме этого символа, приглашение обычно состоит из имени пользователя, имени системы и текущего каталога, причем вид его можно изменить, как только вы узнаете, как это делать. В дальнейших примерах строки, начинающиеся с # или будут обозначать вводимую команду, а строки без такого символа - ее сообщения.

    Теперь убедитесь сами, что Linux - действительно многозадачная и многопользовательская система, то есть, в отличие от Windows, несколько пользователей могут работать одновременно. Спросите, кто сейчас работает в системе, введя команду who .

    Вы увидите что-то вроде:

    root tty1 <дата и время начала сеанса root>

    ivan tty2 <дата и время начала сеанса ivan>

    root:0 <дата и время начала сеанса root>

    <на графической консоли>

    ttyN - это номер виртуальной текстовой консоли.

    Если вы потерялись и хотите узнать, на какой консоли находитесь сейчас, введите команду tty . Если вы забыли, под каким именем зарегистрировались на текущей консоли, введите команду whoami . Команда w покажет не только работающих сейчас пользователей, но и запущенные ими задачи.

    Листать экран можно комбинациями клавиш Shift+PgUp и Shift+PgDn.

    Для копирования текста в командную строку используйте мышь: протаскивание мыши при нажатой левой кнопке выделяет фрагмент, щелчок правой кнопки вставляет его в текущую позицию курсора на любой виртуальной текстовой консоли.

    Если вы хотите, не сходя с этой консоли, поработать под именем другого пользователя, введите su <имя> . По умолчанию в качестве имени подставляется root. Обычно это нужно для того, чтобы быстро выполнить какое-то администраторское действие. Возвращайтесь к работе под своим именем по команде exit.

    Чтобы переключиться обратно на графическую консоль, нажмите Alt+F7.

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

    Рис. 1.13 . Окно виртуального терминала

    Количество виртуальных терминалов, в отличие от количества виртуальных консолей, не ограничено ничем, даже традицией.

    Чтобы завершить сеанс работы на виртуальном терминале или на виртуальной консоли, введите команду exit (на виртуальной консоли можно также logout) или нажмите комбинацию клавиш Ctrl+D.

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

    # shutdown -h 19:00 [Конец рабочего дня]

    При этом за несколько минут до указанного времени всем, кто работает в системе, будет разослано предупреждающее сообщение «Конец рабочего дня», после чего система будет корректно остановлена. Краткой формой этой команды служит halt , останавливающая систему сейчас же и без предупреждения. Перезагрузиться можно командой reboot.

    Из книги Мир общения: ICQ автора Леонтьев Виталий Петрович

    Первый запуск программы. Интерфейс ICQ После установки ICQ и перезагрузки компьютера в правом углу вашей панели задач появится скромный цветок с бледными лепестками – ICQ Netdetect Agent. Значок ICQВ момент вашего входа в Интернет лепестки цветка должны окраситься в ярко-зеленый

    Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

    1.1.3.1. Запуск программы установки Linux Первым делом нужно настроить компьютер на загрузку с компакт диска. Обычно при запуске компьютера вы видите на экране сообщение:Press DEL to enter SETUP или Press F2 to enter SETUPВ программе SETUP нужно настроить компьютер на загрузку с CD/DVD (рис. 1.2), Если вы

    Из книги Linux для пользователя автора Костромин Виктор Алексеевич

    Глава 3. Первый запуск ОС Linux 3.1. Загрузка ОС Linux Итак, инсталляция Linux завершена, и вы перезапускаете компьютер. Если Linux - единственная операционная система, установленная на вашем компьютере (а, значит, загрузчик LILO размещается в главной загрузочной записи - MBR), то после

    Из книги 200 лучших программ для Linux автора Яремчук Сергей Акимович

    П5. К главе 3 "Первый запуск ОС Linux" 1. На странице Алексея Махоткина (http://alexm.here.ru/manpages-ru/index.html) можно найти переводы man-страниц на русский язык. 2. Guido Gonzato, "Из DOS/Windows в Linux HOWTO", перевод Alex Ott, v1.3.2, 22 Февраля 1999 (http://linux.webclub.ru/howtorus/doswinhow/dos-win-to-linux-howto.html). Это очень полезный материал

    Из книги Видеосамоучитель монтажа домашнего видео в Adobe Premiere Pro CS3 автора Днепров Александр Г

    Запуск игр Windows под Linux Для Linux существует мало игр. Неказуальных игр, позволяющих убить время, в Linux предостаточно, при установке дистрибутива пользователь найдет их несколько десятков. Есть и проекты OpenSource, предлагающие довольно серьезные игры в самых разообразных

    Из книги Создание шаблонов Joomla автора Автор неизвестен

    Первый запуск программы Premiere Pro Установка программы Premiere Pro на компьютер производится с помощью пошагового мастера. Нужно просто следовать указаниям на экране.Запустим программу Premiere Pro и создадим новый проект, чтобы далее познакомиться с интерфейсом программы.1. Нажмите

    Из книги Цифровой журнал «Компьютерра» № 71 автора Журнал «Компьютерра»

    Первый запуск После того, как мы создали структуру директории [ПутьКJoomla!]/templates/, наш шаблон появится в соответствующей секции административной части Joomla! (Extensions | Template). Теперь его можно использовать как шаблон по умолчанию. Рис. 2: Структура директории и файлы шаблона

    Из книги Компьютерра PDA N113 (28.05.2011-03.06.2011) автора Журнал «Компьютерра»

    Первый взгляд на Fedora Linux 15 Евгений Крестников Опубликовано 30 мая 2011 года Это выпуск важен по нескольким причинам. Во-первых, Fedora - популярный дистрибутив, который использует множество людей во всем мире. Кроме того, создается он сообществом

    Из книги Как найти и скачать в Интернете любые файлы автора Райтман М. А.

    Первый взгляд на Fedora Linux 15 Автор: Евгений КрестниковОпубликовано 30 мая 2011 годаЭто выпуск важен по нескольким причинам. Во-первых, Fedora - популярный дистрибутив, который использует множество людей во всем мире. Кроме того, создается он сообществом независимых разработчиков

    Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

    Первый запуск Как и большинство современных антивирусных программ, AVG Anti-Virus Free является не единой программой, а пакетом, состоящим из нескольких модулей, отвечающих за различные области защиты компьютера:? Anti-Virus - антивирусный сканер, отвечает за сканирование файлов

    Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

    Первый запуск Почты Windows Live Чтобы запустить установленную почтовую программу, нажмите кнопку Пуск и в открывшемся меню выберите пункт Почта Windows Live (1).Если этот значок в меню отсутствует, щелкните на пункте Все программы. В списке программ щелкните на пункте Windows Live -

    Из книги Photoshop CS4 автора Жвалевский Андрей Валентинович

    Первый запуск Windows Media Для запуска проигрывателя Windows Media нажмите кнопку на Панели задач или выберите в меню кнопки Пуск пункт Все программы|Проигрыватель Windows Media. При первом запуске проигрывателя предлагается выполнить некоторые его настройки. Установите переключатель

    Из книги Вопросы истории: UNIX, Linux, BSD и другие автора Федорчук Алексей Викторович

    Запуск Firebird на Linux/UNIX Суперсервер Каталог инсталляции по умолчанию /opt/firebird. В каталоге /bin находится в двоичном формате сервер Firebird fbserver (ibserver для Firebird 1.0.x), который запускается как процесс-демон в Linux/UNIX. Он запускается автоматически после инсталляции посредством RPM или

    Из книги автора

    Установка Photoshop CS4 и первый запуск Системные требования для Photoshop CS4 таковы: процессор с тактовой частотой не ниже 1,8 ГГц; операционная система Windows XP с Service Pack 2 (желательно Service Pack 3) или Windows Vista; не менее 512 Мбайт оперативной памяти (рекомендуется 1 Гбайт); 16-разрядная

    Из книги автора

    Slackware: первый шаг к Linux’у для всех Итак, дистрибутив SLS умер. Но душа его жила. Ещё в период его активного развития Патрик Фолькердинг принял SLS за основу своей Linux-системы, названной Slackware, первая версия которой была обнародована 17 июля 1993 года и с тех пор успешно развивается

    Из книги автора

    IPLabs Linux Team: начало русского Linux’а Следующая веха на пути русского Linux’а – 1998 год, когда фирма IPLabs (точнее, ее подразделение – IPLabs Linux Team) совместно с Институтом логики (на самом деле это были одни и те же люди – Алексей Новодворский, Алексей Смирнов и Юрий Девяткин с

    На самом деле, есть две последовательности событий, которые необходимы для загрузки Linux-компьютера и делают его пригодным для использования: загрузка и запуск. Последовательность загрузки начинается, когда компьютер включен, и завершается, когда инициализируется ядро и запускается systemd. Затем процесс запуска завершает задачу приведения компьютера Linux в рабочее состояние.

    В целом, процесс загрузки и запуска Linux довольно прост для понимания. Он состоит из следующих этапов, которые более подробно будут описаны в следующих разделах.

    BIOS POST;
    - загрузчик (GRUB2);
    - инициализация ядра;
    - запуск systemd, родительского компонента всех процессов.

    Обратите внимание, что в этой статье рассматриваются GRUB2 и systemd, поскольку они являются текущим загрузчиком и системой инициализации для большинства главных дистрибутивов. Ранее использовались другие варианты таких программ, и они все еще используются в некоторых дистрибутивах.

    Процесс загрузки

    Процесс загрузки может быть инициирован одним из нескольких способов. Во-первых, если питание отключено, его включение запустит процесс загрузки. Если компьютер уже запущен, локальный пользователь, включая root или обычного пользователя, может программно инициировать последовательность загрузки с помощью графического интерфейса или командной строки для перезагрузки компьютера. Сначала компьютер будет выключен, а затем перезагружен.

    BIOS POST

    Первый этап процесса загрузки Linux на самом деле не имеет ничего общего с Linux. Это аппаратная часть процесса загрузки и она одинаковая для любой операционной системы. Когдана компьютер подается питание, он запускает процедуру POST (Power On Self Test), которая является частью BIOS (Basic I/O System).

    Когда IBM разработала первый компьютер, еще в 1981 году, для инициализации аппаратных компонентов был разработан BIOS. POST является частью BIOS, задачей которого является обеспечение правильного функционирования оборудования. Если POST не сработал нормально, компьютер может не использоваться, поэтому процесс загрузки не будет продолжен.

    BIOS POST проверяет базовую работоспособность аппаратного обеспечения, а затем выдает прерывание BIOS, INT 13H, которое находит загрузочные секторы на всех подключенных загрузочных устройствах. Первый загрузочный сектор с правильной загрузочной записью, который он находит, загружается в ОЗУ, а затем управление передается коду, загруженному из загрузочного сектора.

    Загрузочный сектор - это фактичеки первый этап загрузчика. Существует три загрузчика, используемые большинством дистрибутивов Linux: GRUB, GRUB2 и LILO. GRUB2 является самым современным и используется сегодня гораздо чаще, чем более старые варианты.

    GRUB2

    GRUB2 означает «GRAND Unified Bootloader, версия 2», и сегодня он является основным загрузчиком для большинства дистрибутивов Linux. GRUB2 - это программа, которая делает компьютер достаточно умным, чтобы найти ядро операционной системы и загрузить его в память. Поскольку проще писать и говорить GRUB, чем GRUB2, я буду использовать термин GRUB в этом документе, но при этом буду ссылаться на GRUB2, если не указано иное.

    GRUB был разработан для совместимости с спецификацией multiboot, которая позволяет GRUB загружать множество версий Linux и других бесплатных операционных систем; он также может загружать загрузочную запись проприетарных операционных систем.

    GRUB также позволяет пользователю выбирать загрузку одного из нескольких разных ядер для любого дистрибутива Linux. Это дает возможность загрузиться с предыдущей версией ядра, если обновленная версия работает некорректно или несовместима с частью программного обеспечения. GRUB можно настроить с помощью файла /boot/grub/grub.conf.

    GRUB1 теперь считается устаревшим и был заменен в большинстве современных дистрибутивов на GRUB2, который является переписанным GRUB1. Дистрибутивы на основе Red Hat были обновлены до GRUB2, начиная с Fedora 15 и CentOS/RHEL 7. GRUB2 обеспечивает ту же функциональность, что и GRUB1, но GRUB2 также обеспечивает большую гибкость на этапе предварительной загрузки. GRUB2 настраивается с помощью файла /boot/grub2/grub.cfg.

    Основная функция GRUB заключается в том, чтобы загрузить ядро Linux в память и запустить его. Обе версии GRUB работают в целом одинаково и процесс включает те же три этапа, но я буду использовать GRUB2. Настройка GRUB или GRUB2 и использование команд GRUB2 выходит за рамки данной статьи.

    Хотя GRUB2 официально не использует нотацию этапов для трех этапов загрузки GRUB2, удобно обращаться к ним таким образом, что я и буду делать в этой статье.

    Этап 1

    Как упоминалось в разделе POST BIOS, в конце POST BIOS просматривает прикрепленные диски в поиске загрузочной записи, обычно находящейся в главной загрузочной записи (MBR), загружает первую обнаруженную в ОЗУ, а затем начинает выполнение загрузочной записи. Код начальной загрузки, т. е. этап 1 GRUB2, очень мал, поскольку он должен помещаться в первый 512-байтовый сектор на жестком диске вместе с таблицей разделов. Общий объем пространства, выделенного для реального кода начальной загрузки в классическом общем MBR, составляет 446 байтов. Файл размером 446 байт для этапа 1 называется boot.img и не содержит таблицу разделов, которая добавляется в загрузочную запись отдельно.

    Поскольку загрузочная запись должна быть такой маленькой, она не очень умна и не понимает структуры файловой системы. Поэтому единственной целью этапа 1 является нахождение и загрузка этапа 1.5. Для этого этап 1.5 GRUB должен быть расположен в пространстве между самой загрузочной записью и первым разделом на диске. После загрузки этапа 1.5 GRUB в ОЗУ, этап 1 передает управление этапу 1.5.

    Этап 1.5

    Как упоминалось выше, этап 1.5 GRUB должен быть расположен в пространстве между самой загрузочной записью и первым разделом на диске. По техническим причинам исторически это пространство не использовалось. Первый раздел на жестком диске начинается в секторе 63 с MBR в секторе 0, что оставляет 62 512-байтовых секторов - 31 744 байта, в которых хранится файл core.img, который является этапом 1.5 GRUB. Размер файла core.img равен 25389 байт, поэтому между MBR и первым дисковым разделом имеется много свободного места для его хранения.

    Из-за большего количества кода, который может быть задействован для этапа 1.5, он может содержать несколько драйверов для распространенных файловых систем, таких как EXT и других файловых систем Linux, FAT и NTFS. GRUB2 core.img гораздо более сложный и интеллектуальный по сравнению с более старым этапом 1.5 GRUB1. Это означает, что этап 2 GRUB2 может быть расположен на стандартной файловой системе EXT, но не может быть расположен на логическом томе. Таким образом, стандартное расположение файлов этапа 2 - файловая система /boot, а именно /boot/grub2.

    Обратите внимание, что каталог /boot должен находиться в файловой системе, поддерживаемой GRUB. Не все файловые системы подходят для него. Функция этапа 1.5 - загрузить драйвера файловой системы, необходимыми для поиска файлов этапа 2 в файловой системе /boot и загрузки необходимых драйверов.

    Этап 2

    Все файлы этапа 2 GRUB находятся в каталоге /boot/grub2 и нескольких его подкаталогах. GRUB2 не имеет файла образа, как этапы 1 и 2. Вместо этого он состоит в основном из модулей ядра, которые загружаются по мере необходимости из каталога /boot /grub2/ i386-pc.

    Функция этапа 2 GRUB2 состоит в том, чтобы найти и загрузить ядро Linux в оперативную память и переключить управление компьютером на ядро. Ядро и связанные с ним файлы находятся в каталоге /boot. Файлы ядра могут быть идентифицированы, поскольку все их имена начинаются с vmlinuz. Вы можете просмотреть содержимое каталога /boot, чтобы увидеть установленные в вашей системе ядра.

    GRUB2, как и GRUB1, поддерживает загрузку из одного из ядер Linux. Менеджер пакетов Red Hat, DNF, поддерживает сохранение нескольких версий ядра, поэтому, если возникает проблема с самой новой версией, можно загрузить более старую версию ядра. По умолчанию GRUB предоставляет предварительное загрузочное меню установленных ядер, включая вариант безопасной загрузки и, если он настроен, вариант восстановления.

    Этап 2 GRUB2 загружает выбранное ядро в память и передает управление компьютером ядру системы.

    Ядро

    Все ядра хранятся в формате самораспаковывающегося архива для экономии места. Ядра расположены в каталоге /boot вместе с исходным образом RAM-диска и картами устройств жестких дисков.

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

    Это конец процесса загрузки. К этому моменту ядро Linux и systemd работают, но не могут выполнять какие-либо продуктивные задачи для конечного пользователя, потому что ничего не работает.

    Процесс запуска

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

    systemd

    systemd является матерью всех процессов, и она отвечает за то, чтобы привести систему Linux в состояние, в котором на ней можно работать. Некоторые из ее функций, которые намного шире, чем у старой программы init, предназначены для управления различными аспектами работающей системы Linux, включая создание файловых систем, а также запуск и управление системными службами, необходимыми для повседневной работы Linux. Любая из задач systemd, не относящихся к последовательности запуска, выходит за рамки этой статьи.

    Во-первых, systemd монтирует файловые системы, заданные в /etc/fstab, включая любые файлы или разделы подкачки. На этом этапе она может получить доступ к конфигурационным файлам, расположенным в /etc, включая ее собственный. Она использует свой конфигурационный файл, /etc/systemd/system/default.target, для определения состояния (цели), в которые он должен загружать систему. Файл default.target является только символической ссылкой на настоящий целевой файл. Для рабочей станции или настольных компьютеров это обычно будет graphical.target, что эквивалентно уровню запуска 5 в старой системе инициализации SystemV. Для сервера по умолчанию, скорее всего, это будет multi-user.target, который похож на уровень запуска 3 в SystemV. Emergency.target похож на однопользовательский режим.

    Обратите внимание, что цели и службы являются единицами systemd.

    В таблице 1 ниже представлено сравнение целей systemd со старыми уровнями запуска SystemV. Алиасы целей предоставляются systemd для обратной совместимости. Алиасы целей позволяют сценариям и многим системным администраторам, таким как я, использовать команды SystemV, такие как init 3, для изменения уровней запуска. Конечно, команды SystemV для интерпретации и выполнения пересылаются в systemd.

    Уровень SystemV Цели target Алиасы целей systemd Описание
    - halt.target - Выключает систему без выключения питания.
    0 poweroff.target runlevel0.target Выключает систему с выключением питания.
    S emergency.target - Однопользовательский режим. Службы не работают; файловые системы не смонтированы. Это базовый уровень работы с только аварийной оболочкой, запущенной на главной консоли, чтобы пользователь мог взаимодействовать с системой.
    1 rescue.target runlevel1.target Базовая система, включающая смонтированные файловые системы только с основными запущенными службами и аварийной оболочкой на главной консоли.
    2 - runlevel2.target Многопользовательский режим без NFS, но с запущенными остальными консольными службами
    3 multi-user.target runlevel3.target Все службы работают, но доступен только интерфейс командной строки.
    4 - runlevel4.target Не используется
    5 graphical.target runlevel5.target Многопользовательский режим с графическим интерфейсом
    6 reboot.target runlevel6.target
    - default.target - Эта цель всегда является символической ссылкой на multi-user.target или graphical.target. system всегда использует default.target для запуска системы. default.никогда не должна ссылаться на halt.target, poweroff.target или reboot.target.

    Таблица 1: Сравнение уровней запуска SystemV с целями systemd.

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

    systemd также просматривает устаревшие каталоги инициализации SystemV, чтобы узнать, имеются ли там файлы запуска. Если они есть, systemd использует их в качестве конфигурационных файлов для запуска служб, описанных в этих файлах. Устаревшая сетевая служба является хорошим примером одного из тех случаев, когда в Fedora все еще используются файлы запуска SystemV.

    Рисунок 1, ниже, скопирован непосредственно с man-страницы bootup. Он показывает общую последовательность событий во время запуска systemd и основные требования к их порядку для обеспечения успешного запуска.

    Цели sysinit.target и basic.target можно рассматривать как контрольные точки в процессе запуска. Хотя одной из целей разработки systemd было обеспечение одновременного запуска системных служб, все еще есть определенные службы и функциональные цели, которые необходимо запустить, прежде чем можно будет запустить другие службы и цели. Эти контрольные точки не могут быть пройдены до тех пор, пока не будут выполнены все требуемые службы и цели.

    Таким образом, sysinit.target достигается, когда завершены все компоненты, от которых он зависит. Монтирование файловых систем, настройка файлов подкачки, запуск udev, установка генератора случайных чисел, запуск низкоуровневых служб и настройка криптографических служб, если одна или несколько файловых систем зашифрованы, должны быть завершены, но внутри sysinit.target эти задачи могут выполняться параллельно.

    Sysinit.target запускает все низкоуровневые службы и компоненты, необходимые для минимальной функциональности системы, и которые будут необходимы для перехода на basic.target.

    Local-fs-pre.target | v (various mounts and (various swap (various cryptsetup fsck services...) devices...) devices...) (various low-level (various low-level | | | services: udevd, API VFS mounts: v v v tmpfiles, random mqueue, configfs, local-fs.target swap.target cryptsetup.target seed, sysctl, ...) debugfs, ...) | | | | | \__________________|_________________ | ___________________|____________________/ \|/ v sysinit.target | ____________________________________/|\________________________________________ / | | | \ | | | | | v v | v v (various (various | (various rescue.service timers...) paths...) | sockets...) | | | | | v v v | v rescue.target timers.target paths.target | sockets.target | | | | v \_________________ | ___________________/ \|/ v basic.target | ____________________________________/| emergency.service / | | | | | | v v v v emergency.target display- (various system (various system manager.service services services) | required for | | graphical UIs) v | | multi-user.target | | | \_________________ | _________________/ \|/ v graphical.target

    Рисунок 1: Карта запуска systemd.

    После того, как будет выполнен sysinit.target, systemd запустит basic.target, запуская все компоненты, необходимые для его выполнения. basic.target обеспечивает некоторую дополнительную функциональность, запуская компоненты, которые необходимы для следующей цели. Они включают настройку таких аспектов, как пути к различным исполняемым каталогам, коммуникационные сокеты и таймеры.

    Наконец, могут быть инициализированы цели пользовательского уровня, multi-user.target или graphical.target. Обратите внимание, что многопользовательский режим должен быть достигнут до того, как будут выполнены графические зависимости.

    Подчеркнутые цели на рисунке 1 являются обычными целями запуска. Когда достигнута одна из этих целей, запуск завершен. Если значением по умолчанию является параметр multi-user.target, вы должны увидеть логин в текстовом режиме на консоли. Если значением по умолчанию является graphical.target, вы должны увидеть графический экран входа в систему; конкретный экран входа, который вы видите, будет зависеть от используемого по умолчанию диспетчера сеансов.

    Проблемы

    Недавно мне пришлось менять ядро по умолчанию на компьютере под Linux, использующем GRUB2. Я обнаружил, что некоторые из команд, похоже, не работают должным образом, или может быть я использовал их неправильно. Я еще не уверен в причинах, нужно сделать еще несколько тестов.

    Команда grub2-set-default неправильно настроила индекс ядра по умолчанию в файле /etc/ default/grub, поэтому нужное мне альтернативное ядро не загрузилось. Далее я вручную изменил /etc/default/grub GRUB_DEFAULT=saved на GRUB_DEFAULT=2, где 2 - индекс установленного ядра, которое я хотел загрузить. Затем я запустил команду grub2-mkconfig> /boot/grub2/grub.cfg, чтобы создать новый конфигурационный файл grub. Этот обходной метод сработал так, как я ожидал, и загрузил альтернативное ядро.

    Заключение

    GRUB2 и система systemd являются ключевыми компонентами на этапах загрузки и запуска большинства современных дистрибутивов Linux. Эти два компонента работают вместе, чтобы сначала загрузить ядро, а затем запустить все системные службы, необходимые для создания полнофункциональной системы Linux.

    Хотя я нахожу GRUB2 и systemd более сложными, чем их предшественники, они досточно легко изучаются и управляются. В man-страницах есть много информации о systemd, а на freedesktop.org есть полный набор man-страницах systemd , доступных онлайн.