Описание процесса загрузки Linux

Thank you for reading this post, don't forget to subscribe!

Суще­ству­ет 4 раз­лич­ных эта­па, кото­рые каж­дый дис­три­бу­тив Linux про­хо­дит в сво­ем типич­ном про­цес­се загрузки.

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

Про­цесс загруз­ки состо­ит из сле­ду­ю­щих 4 шагов, кото­рые мы обсу­дим более подробно:

  • Про­вер­ка целост­но­сти BIOS (POST)
  • Загруз­ка загруз­чи­ка (GRUB2)
  • Ини­ци­а­ли­за­ция ядра
  • Запуск systemd, роди­те­ля всех процессов

1. Проверка целостности BIOS (POST)

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

Когда систе­ма Linux вклю­ча­ет­ся, вклю­ча­ет­ся BIOS (базо­вая систе­ма вво­да-выво­да) и выпол­ня­ет само­те­сти­ро­ва­ние при вклю­че­нии –  Power On Self Test (POST).

Это про­вер­ка целост­но­сти, кото­рая выпол­ня­ет мно­же­ство диа­гно­сти­че­ских проверок.

POST про­ве­ря­ет рабо­то­спо­соб­ность обо­ру­до­ва­ния таких ком­по­нен­тов, как жест­кий или твер­до­тель­ный нако­пи­тель, кла­ви­а­ту­ры, опе­ра­тив­ной памя­ти, пор­ты USB и любое дру­гое оборудование.

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

В неко­то­рых слу­ча­ях раз­да­ет­ся зву­ко­вой сиг­нал, осо­бен­но в слу­чае отсут­ствия моду­ля RAM.

Одна­ко, если ожи­да­е­мое обо­ру­до­ва­ние при­сут­ству­ет и функ­ци­о­ни­ру­ет долж­ным обра­зом, про­цесс загруз­ки пере­хо­дит к сле­ду­ю­ще­му этапу.

2. Загрузчик (GRUB2)

После завер­ше­ния POST систе­ма про­ве­ря­ет MBR (глав­ную загру­зоч­ную запись) на пред­мет загруз­чи­ка и инфор­ма­ции о раз­де­лах диска.

MBR – это 512-бай­то­вый код, рас­по­ло­жен­ный в пер­вом сек­то­ре жест­ко­го дис­ка, обыч­но это /dev/sda или /dev/hda, в зави­си­мо­сти от архи­тек­ту­ры ваше­го жест­ко­го диска.

Обра­ти­те вни­ма­ние, одна­ко, что ино­гда MBR может нахо­дить­ся на Live USB или DVD-дис­ке Linux.

В Linux есть 3 основ­ных типа загруз­чи­ков: LILO, GRUB и GRUB2.

Загруз­чик GRUB2 – это послед­ний и основ­ной загруз­чик в совре­мен­ных дис­три­бу­ти­вах Linux.

GRUB2 озна­ча­ет GRand Unified Bootloader version 2.

Как толь­ко BIOS обна­ру­жи­ва­ет загруз­чик grub2, он запус­ка­ет­ся и загру­жа­ет его в основ­ную память (RAM).

Меню grub2 поз­во­ля­ет вам делать несколь­ко вещей.

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

Если вы несколь­ко раз обнов­ля­ли свою систе­му, вы може­те уви­деть в спис­ке раз­ные вер­сии ядра.

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

Кро­ме того, в систе­мах с двой­ной загруз­кой, когда у вас есть несколь­ко уста­нов­лен­ных ОС, меню grub поз­во­ля­ет вам выбрать, в какую ОС загружаться.
Файл кон­фи­гу­ра­ции grub2 – это файл /boot/grub2/grub2.cfg.
Основ­ная цель GRUB – загру­зить ядро Linux в основ­ную память.

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

Kernel – это ядро любой систе­мы Linux.

Оно свя­зы­ва­ет обо­ру­до­ва­ние ПК с базо­вы­ми процессами.

Ядро кон­тро­ли­ру­ет все про­цес­сы в вашей систе­ме Linux.

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

После само­рас­па­ко­вы­ва­ния выбран­ное ядро мон­ти­ру­ет кор­не­вую фай­ло­вую систе­му и ини­ци­а­ли­зи­ру­ет про­грам­му /sbin/init, обыч­но назы­ва­е­мую init.

Init все­гда выпол­ня­ет­ся пер­вой про­грам­мой, и ей назна­ча­ет­ся ID про­цес­са или PID 1.

Это про­цесс init, кото­рый порож­да­ет раз­лич­ных демо­нов и мон­ти­ру­ет все раз­де­лы, ука­зан­ные в фай­ле /etc/fstab.

Затем ядро мон­ти­ру­ет началь­ный RAM-диск (initrd), кото­рый явля­ет­ся вре­мен­ной кор­не­вой фай­ло­вой систе­мой, пока не будет смон­ти­ро­ва­на насто­я­щая кор­не­вая фай­ло­вая система.

Все ядра нахо­дят­ся в ката­ло­ге /boot вме­сте с началь­ным обра­зом RAM-диска.

4. запуск Systemd


Нако­нец, ядро загру­жа­ет Systemd, заме­ня­ю­щий ста­рый SysV init.

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

Systemd исполь­зу­ет файл /etc/systemd/system/default.target для опре­де­ле­ния состо­я­ния или уров­ня, в кото­ром долж­на загру­жать­ся систе­ма Linux.

  • Для настоль­ной рабо­чей стан­ции (с гра­фи­че­ским интер­фей­сом поль­зо­ва­те­ля) целе­вое зна­че­ние по умол­ча­нию – 5, что экви­ва­лент­но уров­ню выпол­не­ния 5 для ста­ро­го SystemV init.
  • Для сер­ве­ра по умол­ча­нию явля­ет­ся multi-user.target, что соот­вет­ству­ет уров­ню выпол­не­ния 3 в SysV init.

Что­бы про­ве­рить теку­щий уро­вень в вашей систе­ме, выпол­ни­те команду:

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

Напри­мер, init 3 пере­во­дит систе­му в негра­фи­че­ское состояние.

Коман­да init 6 пере­за­гру­жа­ет вашу систе­му, а коман­да init 0 выклю­ча­ет систему.

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

Про­цесс загруз­ки завер­ша­ет­ся, когда systemd загру­жа­ет все демо­ны и уста­нав­ли­ва­ет зна­че­ние целе­во­го уров­ня или уров­ня выполнения.

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