Pengantar proses boot dan boot kernel Linux

Halo semuanya! Jadi kami membuka aliran berikutnya, keempat berturut-turut, kursus Administrator Linux , yang dengan percaya diri menempati ceruknya di sebelah kursus devopersky. Lebih banyak guru , lebih banyak informasi dan kedudukan. Yah, seperti biasa, lebih banyak informasi menarik yang diambil para guru.

Ayo pergi.

Pernahkah Anda bertanya-tanya apa yang dibutuhkan agar sistem Anda siap untuk menjalankan aplikasi?

Memahami proses memuat kernel dan memulai sistem Linux adalah penting untuk mengkonfigurasi Linux dan memecahkan masalah startup. Artikel ini memberikan ikhtisar proses boot kernel menggunakan bootloader GRUB2 dan startup yang dijalankan oleh sistem inisialisasi systemd .

Bahkan, ada dua rangkaian acara yang diperlukan untuk membawa komputer Linux ke dalam kondisi kerja: boot kernel (boot) dan startup sistem (startup). Proses boot kernel dimulai ketika Anda menyalakan komputer dan berakhir dengan kernel menginisialisasi dan memulai sistemd. Setelah itu, proses memulai sistem dimulai, dan dialah yang membawa komputer Linux ke kondisi kerja.



Secara umum, proses memuat kernel dan memulai sistem Linux cukup sederhana. Ini terdiri dari langkah-langkah berikut, yang akan dijelaskan secara lebih rinci di bagian di bawah ini:

  • BIOS POST;
  • Pemuatan kernel (GRUB2);
  • Inisialisasi kernel;
  • Menjalankan systemd, induk dari semua proses.

Harap dicatat bahwa artikel ini adalah tentang GRUB2 dan systemd, karena mereka adalah pemuat kernel dan program inisialisasi untuk sebagian besar distribusi. Opsi lain sebelumnya digunakan, dan kadang-kadang masih dapat ditemukan di beberapa distribusi.

Proses boot kernel

Proses boot kernel dapat dimulai dengan beberapa cara. Pertama, jika daya dimatikan, menyalakan komputer akan memulai proses boot. Kedua, jika pengguna lokal sudah berjalan di komputer, termasuk root dan pengguna yang tidak terjangkau, pengguna dapat secara terprogram memulai proses boot kernel menggunakan GUI atau baris perintah untuk reboot. Reboot pertama-tama akan mematikan komputer dan baru kemudian restart.

BIOS POST

Langkah pertama dalam proses boot kernel Linux tidak ada hubungannya dengan Linux. Ini adalah bagian perangkat keras dari proses, sama untuk semua sistem operasi. Ketika daya disuplai ke komputer, hal pertama yang dimulai adalah POST (Power On Self Test), yang merupakan bagian dari BIOS (Sistem I / O Dasar, Sistem Input / Output Dasar).

Ketika IBM meluncurkan komputer pribadi pertamanya pada tahun 1981, BIOS dirancang untuk menginisialisasi komponen perangkat keras. POST adalah bagian dari BIOS, yang tugasnya memastikan operasi peralatan komputer yang benar. Jika POST gagal, maka komputer mungkin tidak berfungsi dan proses boot tidak akan melanjutkan.

BIOS POST memeriksa kinerja dasar perangkat keras, dan kemudian menyebabkan interupsi BIOS - INT 13H, yang menemukan sektor boot kernel pada semua perangkat yang terhubung dengan kemampuan untuk boot. Sektor pertama yang ditemukan, yang berisi catatan boot yang valid, dimuat ke dalam RAM, setelah itu kontrol ditransfer ke kode dari sektor boot.
Sektor boot hanya tahap pertama. Sebagian besar distribusi Linux menggunakan salah satu dari tiga opsi bootloader: GRUB, GRUB2, dan LILO. GRUB2 adalah yang terbaru dan sekarang lebih sering digunakan daripada versi yang lebih lama.

GRUB2

GRUB2 adalah singkatan dari "GRand Unified Bootloader, versi 2," dan sekarang ini adalah bootloader utama untuk sebagian besar distribusi Linux modern. GRUB2 adalah program yang membuat komputer cukup pintar sehingga dapat menemukan kernel sistem operasi dan memuatnya ke dalam memori. Karena berbicara dan menulis hanya GRUB lebih mudah daripada GRUB2, dalam artikel ini saya mungkin akan menggunakan istilah GRUB, tetapi menyiratkan GRUB2 kecuali dinyatakan sebaliknya.

GRUB kompatibel dengan spesifikasi multiboot , yang memungkinkannya memuat berbagai versi Linux dan sistem operasi lain; itu juga dapat memulai catatan boot sistem operasi berpemilik dalam sebuah rantai.

GRUB juga memungkinkan pengguna untuk memilih dari beberapa kemungkinan unduhan kernel untuk distribusi Linux yang disediakan. Ini memungkinkan untuk mengunduh versi kernel sebelumnya jika yang diperbarui tidak dapat boot dengan benar atau tidak kompatibel dengan beberapa bagian penting dari perangkat lunak. GRUB dapat dikonfigurasi dalam file /boot/grub/grub.conf .

GRUB1 sekarang dianggap usang dan di sebagian besar distribusi modern digantikan oleh GRUB2, yang merupakan versi yang ditulis ulang. Distribusi berbasis Red Hat diupgrade ke GRUB2 sekitar Fedora 15 dan CentOS / RHEL 7. GRUB2 memiliki fungsionalitas boot yang sama dengan GRUB1, tetapi selain itu ia juga menyediakan lingkungan berbasis perintah, seperti pre-OS berbasis mainframe dan lebih fleksibel pada tahap pra-boot. GRUB2 dikonfigurasi di /boot/grub2/grub.cfg .

Tugas utama GRUB adalah untuk memuat kernel Linux ke dalam memori dan menjalankannya. Kedua versi GRUB bekerja serupa dalam tiga tahap, tetapi dalam artikel ini saya akan menggunakan GRUB2 untuk menjelaskan cara kerja GRUB. Mengkonfigurasi GRUB dan GRUB2 dan menggunakan perintah GRUB2 berada di luar cakupan artikel ini.

Meskipun secara resmi GRUB2 tidak menggunakan penomoran langkah, demi kenyamanan saya akan menggunakannya dalam artikel ini.

Tahap 1

Seperti yang telah disebutkan di bagian BIOS POST, pada akhir POST, BIOS mencari catatan booting pada disk yang terpasang, biasanya terletak di Master Boot Record (MBR), setelah itu memuat catatan pertama yang ditemukan ke dalam memori dan mulai menjalankannya. Kode bootstrap, yaitu, tahap pertama GRUB2, membutuhkan ruang yang sangat sedikit, karena harus sesuai dengan sektor 512-byte pertama pada hard disk bersama dengan tabel partisi. Jumlah total ruang yang dialokasikan untuk kode bootstrap itu sendiri dalam MBR standar adalah 446 byte. File 446-byte untuk tahap 1 disebut boot-img dan tidak berisi tabel partisi - ini ditambahkan ke catatan boot secara terpisah.

Karena catatan boot harus sangat kecil, itu tidak terlalu "pintar" dan tidak mengerti struktur sistem file. Oleh karena itu, satu-satunya tujuan langkah 1 adalah untuk mendeteksi dan memuat langkah 1.5. Untuk mencapai ini, langkah 1.5 dari GRUB harus terletak di ruang antara catatan boot itu sendiri dan partisi pertama pada disk. Setelah memuat stage 1.5 GRUB ke dalam RAM, stage 1 mentransfer kontrol ke stage 1.5.

Tahap 1.5

Seperti disebutkan di atas, langkah 1.5 dari GRUB harus berada di antara catatan boot dan partisi pertama pada disk. Secara historis, ruang ini tetap tidak digunakan karena alasan teknis. Partisi pertama pada hard disk dimulai di sektor 63, dan dengan mempertimbangkan MBR di sektor 0, ada 62 sektor byte-311 - 31744 byte - di mana Anda dapat menyimpan file core.img - 1,5 tahap GRUB. File core.img memiliki berat 25389 byte, yang merupakan ruang yang cukup untuk menyimpannya di antara MBR dan partisi disk pertama.

Karena lebih banyak kode dapat digunakan untuk langkah 1.5, mungkin cukup untuk memuat beberapa driver sistem file umum, seperti EXT standar dan sistem file Linux lainnya, FAT, dan NTFS. core.img di GRUB2 lebih kompleks dan fungsional daripada di langkah 1.5 dari GRUB1. Ini berarti bahwa tahap 2 GRUB2 dapat berada di sistem file EXT standar, tetapi tidak dalam volume yang logis. Oleh karena itu, lokasi standar untuk file tahap 2 adalah sistem file /boot , atau lebih tepatnya /boot/grub2 .

Perhatikan bahwa direktori / boot harus berada di sistem file yang didukung oleh GRUB. Tidak semua sistem file memiliki dukungan ini. Tugas tahap 1.5 adalah memulai dengan driver sistem file yang diperlukan untuk mencari file stage 2 di sistem file / boot dan memuat driver yang diperlukan.

Tahap 2

Semua file GRUB Stage 2 terletak di /boot/grub2 dan beberapa subdirektori. GRUB2 tidak memiliki file gambar seperti pada langkah 1 dan 2. Sebaliknya, sebagian besar terdiri dari modul kernel runtime, yang diambil dari direktori /boot/grub2/i386-pc sesuai kebutuhan.

Tugas GRUB2 tahap 2 adalah untuk mendeteksi dan memuat kernel Linux ke dalam RAM dan mentransfer kontrol kontrol komputer ke kernel. Kernel dan file terkaitnya berada di direktori /boot . File kernel mudah dikenali, karena namanya dimulai dengan vmlinuz. Anda dapat mendaftar isi direktori /boot untuk melihat kernel yang saat ini diinstal pada sistem Anda.

GRUB2, seperti GRUB1, mendukung memuat salah satu dari beberapa kernel Linux. Sistem manajemen paket Red Hat mendukung penyimpanan beberapa versi dari kernel sehingga Anda dapat memuat versi lama dari kernel jika ada masalah dengan yang terbaru. Secara default, GRUB menyediakan menu kernel terinstal yang sudah dimuat, termasuk opsi penyelamatan, dan setelah konfigurasi, opsi pemulihan.

Tahap 2 GRUB2 memuat kernel yang dipilih ke dalam memori dan mentransfer kontrol kontrol komputer ke kernel.

Intinya

Semua core dalam format self-extracting, terkompresi untuk menghemat ruang. Kernel terletak di direktori /boot , bersama dengan gambar disk RAM asli dan daftar partisi pada hard drive.

Setelah kernel yang dipilih dimuat ke dalam memori dan mulai dijalankan, pertama-tama, kernel harus mengekstraksi sendiri dari versi terkompresi dari file sebelum mulai melakukan pekerjaan yang bermanfaat. Setelah ekstraksi telah terjadi, ia memuat systemd , yang merupakan pengganti untuk program init SysV lama, dan mentransfer kontrol ke sana.

Ini adalah akhir dari proses boot kernel. Pada titik ini, kernel dan sistem Linux sedang berjalan, tetapi tidak dapat melakukan tugas-tugas yang bermanfaat bagi pengguna akhir, karena tidak ada lagi yang harus dilakukan.

Proses startup sistem

Proses startup sistem mengikuti proses boot kernel dan menjalankan dan menjalankan komputer Linux.

systemd

systemd adalah induk dari semua proses yang bertanggung jawab untuk membawa host Linux ke keadaan efisien. Beberapa fungsinya, lebih luas daripada yang disajikan dalam program inisialisasi lama, harus mengelola banyak aspek dari menjalankan Linux host, termasuk pemasangan sistem file, memulai dan mengelola layanan sistem yang diperlukan untuk host Linux untuk bekerja secara efisien. Semua tugas systemd yang tidak terkait dengan proses startup sistem berada di luar ruang lingkup diskusi dalam artikel ini.

Pertama, systemd me-mount sistem file sebagaimana didefinisikan dalam /etc/fstab , termasuk semua file swap dan partisi. Pada titik ini, ia dapat mengakses file konfigurasi yang terletak di /etc , termasuk miliknya. Ia menggunakan file konfigurasinya sendiri /etc/systemd/system/default.target untuk menentukan target yang akan memuat host. File default.target hanyalah symlink ke file target asli. Untuk workstation desktop, ini biasanya graphical.target, setara dengan runlevel 5 di initializer SystemV lama. Untuk server, defaultnya adalah multi-user.target, mirip dengan runlevel 3 di SystemV. emergency.target mirip dengan mode satu pengguna.

Perhatikan bahwa target dan layanan adalah unit systemd.

Tabel 1 di bawah ini adalah perbandingan dari semua target systemd dengan runlevel lama di SystemV. Alias ​​target Systemd disediakan oleh systemd untuk kompatibilitas ke belakang. Alias ​​target memungkinkan skrip - dan banyak sysadmin, termasuk saya - untuk menggunakan perintah SystemV seperti init3 untuk mengubah level eksekusi. Tentu saja, perintah SystemV diarahkan oleh systemd untuk interpretasi dan eksekusi.
Runlevel systemvtarget systemdalias target systemdDeskripsi
halt.targetMenangguhkan sistem tanpa mematikan daya
0poweroff.targetrunlevel0.targetMenjeda sistem dan mematikan daya
SdaruratMode pengguna tunggal. Layanan tidak berjalan; sistem file tidak terpasang. Ini adalah tingkat operasi paling dasar. Untuk interaksi pengguna dengan sistem, hanya shell darurat yang diluncurkan di konsol utama.
1rescue.targetrunlevel1.targetSistem dasar, termasuk memasang sistem file dengan set layanan paling dasar dan shell penyelamat di konsol utama.
2runlevel2.targetMode multiuser, tanpa NFS, tetapi semua layanan non-GUI berjalan.
3multi-user.targetrunlevel3.targetSemua layanan berjalan, tetapi hanya melalui antarmuka baris perintah (CLI).
4runlevel4.targetTidak digunakan
5graphical.targetrunlevel5.targetMode multiuser dengan GUI.
6reboot.targetrunlevel6.targetMulai ulang
default.targetTarget ini selalu memiliki symlink dengan multi-user.target atau graphical.target. systemd selalu menggunakan default.target untuk memulai sistem. default.target tidak boleh dikaitkan dengan halt.target, poweroff.target atau reboot.target.

Tabel 1: Perbandingan level kontrol SystemV dengan target systemd dan beberapa alias target.

Setiap target memiliki serangkaian dependensi yang dijelaskan dalam file konfigurasi. systemd menjalankan yang diperlukan. Ketergantungan ini adalah layanan yang diperlukan untuk menjalankan host Linux dengan tingkat fungsionalitas tertentu. Ketika semua dependensi yang tercantum dalam file konfigurasi target dimuat dan dimulai, sistem bekerja pada level target ini.

systemd juga memindai direktori inisialisasi SystemV yang sudah usang untuk file startup. Jika ya, systemd menggunakannya sebagai file konfigurasi untuk menjalankan layanan yang dijelaskan dalam file. Layanan jaringan yang ketinggalan jaman adalah contoh yang bagus dari yang masih menggunakan file startup SystemV di Fedora.

Gambar 1 di bawah ini langsung disalin dari halaman utama bootup. Ini menunjukkan urutan umum peristiwa selama awal systemd dan persyaratan dasar untuk memastikan keberhasilannya.

Target sysinit.target dan basic.target dapat dianggap sebagai pos pemeriksaan selama startup sistem. Meskipun salah satu tujuan dari systemd adalah untuk menjalankan layanan sistem secara paralel, ada beberapa layanan dan target fungsional yang harus diluncurkan sebelum yang lain. Titik kontrol ini tidak dapat dilewati sampai semua layanan dan target yang mereka butuhkan selesai.

Dengan demikian, sysinit.target tercapai ketika semua unit yang bergantung padanya selesai. Semua unit berikut harus dilengkapi: pemasangan sistem file, pengaturan file swap, mulai udev, pengaturan keadaan awal generator angka acak, inisialisasi layanan tingkat rendah, pengaturan layanan kriptografi jika setidaknya satu sistem file dienkripsi. Di sysinit.target mereka dapat dieksekusi secara paralel.
sysinit.target menjalankan semua layanan dan unit tingkat rendah yang diperlukan untuk fungsionalitas minimum sistem, dan layanan yang diperlukan untuk masuk ke basic.target.


Gambar 1. Peta startup Systemd

Setelah menjalankan sysinit.target, systemd meluncurkan basic.target, dimulai dengan semua unit yang diperlukan untuk menjalankannya. Target dasar menyediakan fungsionalitas tambahan dengan meluncurkan unit yang diperlukan untuk target berikutnya, termasuk menetapkan jalur ke berbagai direktori yang dapat dieksekusi, soket komunikasi, dan timer.

Terakhir, Anda dapat mulai menginisialisasi target tingkat pengguna: multi-user.target atau graphical.target. Perlu dicatat bahwa multi-user.target harus dicapai sebelum dependensi target grafis dieksekusi.

Target yang digarisbawahi pada Gambar 1 adalah target startup yang khas. Startup sistem berakhir ketika salah satunya tercapai. Jika multi-user.target adalah target default, maka di konsol Anda akan melihat login dalam mode teks. Jika graphical.target ditentukan secara default, Anda akan melihat login grafis; GUI layar masuk tergantung pada pengelola layar yang Anda gunakan.

Masalahnya

Baru-baru ini saya harus mengubah kernel boot default pada komputer Linux yang menggunakan GRUB2. Saya menemukan bahwa beberapa perintah berhenti berfungsi dengan benar, atau saya salah menggunakannya. Saya masih tidak tahu apa masalahnya, akan butuh lebih banyak waktu untuk meneliti itu.

Perintah grub2-set-default salah mengkonfigurasi indeks kernel default di file /etc/default/grub , sehingga kernel alternatif yang diinginkan tidak dimuat. Saya mengubah /etc/default/grub GRUB_DEFAULT=saved secara manual /etc/default/grub GRUB_DEFAULT=saved ke GRUB_DEFAULT=2 , di mana 2 adalah indeks dari kernel yang diinstal yang ingin saya jalankan. Kemudian, saya menjalankan perintah grub2-mkconfig > /boot/grub2/grub.cfg untuk membuat file konfigurasi grub baru. Trik ini berhasil dan kernel alternatif diluncurkan.

Kesimpulan

GRUB2 dan sistem inisialisasi systemd adalah komponen kunci untuk boot kernel dan fase startup sistem dari sebagian besar distribusi Linux modern. Terlepas dari kontradiksi, terutama di sekitar systemd, kedua komponen ini bekerja dengan baik bersama untuk memuat kernel dan menjalankan semua layanan sistem yang diperlukan untuk membuat sistem Linux yang fungsional.
Walaupun saya menganggap GRUB2 dan systemd secara keseluruhan lebih kompleks dari pendahulunya, mereka tidak lebih sulit untuk dikuasai dan dikelola. Manual berisi banyak informasi tentang systemd, dan pada freedesktop.org daftar halaman-halamannya disajikan secara lengkap. Untuk informasi lebih lanjut, lihat tautan di bawah ini:



Itu saja. Kami menunggu pertanyaan dan komentar di sini atau mereka dapat ditanyakan langsung dalam pelajaran terbuka .

Source: https://habr.com/ru/post/id424761/


All Articles