Linux Boots

Ternyata, Bukankah ada banyak proses boot:

1. Sebuah boot loader Menemukan imej kernel pada disk, beban itu ke dalam memori, dan mulai itu.
2. Kernel menginisialisasi perangkat dan driver IMS.
3. Kernel mount filesystem root.
4. Kernel mulai init Dipanggil untuk jadwal.
5. init menentukan sisa Proses dalam gerakan.
6. Proses terakhir Itu dimulai init sebagai bagian dari urutan boot memungkinkan Anda untuk log on.

Mengidentifikasi setiap tahap proses boot sangat berharga dalam memperbaiki masalah boot dan memahami sistem secara keseluruhan. Untuk memulai, nol dalam pada boot loader, yang merupakan layar awal atau meminta Anda dapatkan setelah komputer melakukan IMS power-on self-test, meminta sistem operasi yang menjalankan. Setelah Anda membuat pilihan, boot loader menjalankan kernel Linux, Penyerahan kontrol sistem untuk kernel.

Ada diskusi rinci dari kernel tempat lain dalam buku ini dari mana artikel ini dikutip. Artikel ini mencakup Tahap inisialisasi kernel, Tahap Ketika kernel mencetak banyak pesan tentang hadir hardware pada sistem. Kernel dimulai init tepat setelah layar menampilkan pesan menyatakan Bahwa kernel telah terpasang filesystem root:

VFS: Mounted root (ext2 filesystem) readonly.

Segera setelah itu, kau akan melihat pesan tentang tolak init, DIIKUTI oleh sistem pesan startup layanan, dan akhirnya Anda mendapatkan prompt login Beberapa Urut.

CATATAN : Pada Red Hat Linux, catatan init sangat jelas, karena "menyambut" Anda ke "Red Hat Linux." Semua pesan akan menunjukkan keberhasilan atau kegagalan dalam tanda kurung di sisi kanan layar.

Sebagian besar bab ini berkaitan dengan init, Karena WHERE bagian dari urutan boot Anda memiliki kontrol yang paling.
init

Tidak ada yang khusus tentang init. Ini adalah jadwal seperti yang lain pada sistem Linux, dan Anda akan menemukannya di / sbin bersama dengan binari sistem lainnya. Tujuan utama adalah init untuk memulai dan menghentikan program lain dalam urutan tertentu. Semua Anda harus tahu adalah bagaimana urutan ini bekerja.

Ada beberapa variasi yang berbeda BEBERAPA, Tapi sebagian besar distribusi Linux menggunakan Sistem V gaya DIBAHAS sini. Beberapa distribusi menggunakan Versi Simpler Itu menyerupai init BSD, Tapi Anda tidak mungkin untuk menemukan ini.

Runlevel

Di Setiap Waktu Mengingat pada sistem Linux, satu set Proses Tertentu dasar berjalan. Keadaan mesin Disebut runlevel ITS, dan dilambangkan dengan angka dari 0 6 melalui. Sistem ini menghabiskan sebagian besar waktunya IMS dalam runlevel tunggal. Namun, Ketika Anda mematikan mesin bawah, init beralih ke runlevel yang berbeda untuk menyelesaikan Sistem tahun Jasa di tertib dan memberitahu kernel untuk berhenti. Namun runlevel yang lain adalah untuk mode single-user, DIBAHAS kemudian.

Cara termudah untuk mendapatkan pegangan pada runlevel adalah untuk memeriksa file konfigurasi init, / etc / inittab. Carilah baris seperti berikut:

id: 5: initdefault:

Baris ini Berarti Bahwa runlevel default pada sistem adalah 5. Semua baris dalam file inittab mengambil formulir ini, dengan empat kolom yang dipisahkan oleh titik terjadi dalam urutan berikut:
# Sebuah pengenal unik (string pendek, Seperti id pada contoh sebelumnya)
# Jumlah runlevel yang berlaku (s)
# The init Itu HARUS mengambil tindakan (dalam contoh sebelumnya, tindakan adalah untuk mengatur runlevel default 5)
# Sebuah perintah untuk mengeksekusi (opsional)

Tidak ada perintah untuk mengeksekusi dalam initdefault contoh sebelumnya Karena perintah tidak masuk akal dalam konteks pengaturan runlevel default. Lihatlah A Little Jauh di bagian bawah inittab, sampai Anda melihat baris seperti ini:

l5: 5: wait :/ etc / rc.d / rc 5

Baris ini memicu sebagian besar konfigurasi sistem dan layanan melalui rc *. D dan direktori init.d. Anda BISA MELIHAT Itu init diatur untuk menjalankan perintah Dipanggil / etc / rc.d / rc 5 5 Ketika di runlevel. Tindakan menunggu menceritakan Kapan dan bagaimana init menjalankan perintah: menjalankan rc sekali 5 5 Ketika Memasuki runlevel, dan KEMUDIAN menunggu perintah ini selesai Sebelum melakukan apapun.

Ada Beberapa tindakan yang berbeda selain initdefault dan menunggu, terutama yang berkaitan dengan manajemen daya, dan halaman manual inittab (5) memberitahu Anda semua tentang them. Yang Anda paling Kemungkinan untuk Encounter Itu Dijelaskan dalam bagian berikut.

respawn

Tindakan respawn menyebabkan init untuk menjalankan perintah itu berikut, dan jika perintah Finishes mengeksekusi, untuk menjalankannya lagi. Kau Kemungkinan untuk melihat Sesuatu yang mirip dengan baris ini dalam file inittab Anda:

1: 2345: respawn :/ sbin / mingetty tty1

Program getty menyediakan login prompt. Pendahulunya line untuk konsol virtual pertama (/ dev / tty1), yang Anda lihat Ketika Anda menekan ALT atau CONTROL-ALT-F1 F1. Tindakan respawn membawa prompt login kembali setelah Anda log out.

ctrlaltdel

Kontrol Tindakan ctrlaltdel apa sistem tidak Ketika Anda menekan CONTROL-ALT-DELETE pada konsol virtual. Pada kebanyakan sistem, ini adalah Semacam perintah reboot menggunakan perintah shutdown.

sysinit

Tindakan sysinit adalah hal pertama init Itu HARUS Jalankan Ketika itu dimulai, Sebelum Memasuki setiap runlevel.

Bagaimana Proses dalam runlevel mulai

Anda sekarang siap untuk belajar bagaimana init memulai layanan sistem, Hanya Sebelum itu memungkinkan Anda log on. Ingat ini garis inittab dari sebelumnya:

l5: 5: wait :/ etc / rc.d / rc 5

Ini garis kecil memicu Banyak program lain. rc singkatan perintah dijalankan, dan Anda Akan Mendengar orang menyebut perintah sebagai script, program, atau layanan. Jadi, di mana perintah ini, sih?

Untuk runlevel 5, dalam contoh ini, perintah mungkin BAIK di / etc / rc.d / rc5.d atau / etc / rc5.d. Runlevel 1 menggunakan rc1.d, runlevel 2 rc2.d menggunakan, dan sebagainya. Anda mungkin menemukan item dalam rc5.d GMT direktori:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

The rc Perintah 5 mulai program dalam direktori ini runlevel dengan menjalankan perintah GMT:

S10sysklogd rumah
S12kerneld rumah
S15netstd_init rumah
S18netbase rumah
...
S99sshd rumah

Perhatikan argumen start di setiap perintah. S dalam nama perintah Sarana Itu HARUS menjalankan perintah dalam mode awal, dan jumlah (00 melalui 99) menentukan MANA dalam urutan rc dimulai perintah.

Perintah D rc *. Adalah skrip Itu Biasanya mulai program / sbin atau / usr / sbin. Biasanya, Anda BISA mencari tahu apa salah satu perintah sebenarnya tidak dengan melihat script yang kurang atau pager Program lain.

Anda BISA memulai salah satu layanan ini dengan tangan. Misalnya, jika Anda ingin memulai httpd perangkat lunak server web secara manual, jalankan S99httpd awal. Demikian pula, jika Anda pernah Perlu untuk membunuh salah satu layanan Ketika mesin menyala, Anda BISA menjalankan perintah di rc * D direktori dengan berhenti argumen (S99httpd berhenti, misalnya)..

Beberapa rc * D direktori Itu MENGANDUNG perintah mulai dengan K (untuk "membunuh," atau menghentikan modus).. Dalam hal ini, rc menjalankan perintah dengan berhenti argumen BUKAN rumah. Anda yang paling Kemungkinan untuk menghadapi perintah K dalam runlevel Itu mematikan sistem itu.

Menambah dan menghapus layanan

Jika Anda ingin menambah, menghapus, atau memodifikasi pelayanan di rc * D direktori., Anda Perlu mengambil melihat lebih dekat pada file di dalamnya. Sebuah daftar panjang mengungkapkan struktur seperti ini:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Perintah pada tahun rc *. D direktori sebenarnya symbolic link ke file dalam direktori init.d tahun, Biasanya di / etc atau / etc / rc.d. Link ini untuk distribusi Linux MENGANDUNG Itu Mereka BISA menggunakan skrip startup yang sama untuk semua runlevel. Konvensi ini adalah dengan tidak Sarana Kebutuhan, Tapi Sering Membuatnya organisasi sedikit lebih mudah.

Untuk Mencegah salah satu perintah di direktori init.d dari berjalan di runlevel tertentu, Anda mungkin berpikir untuk menghapus link simbolik di rc * Tepat direktori D.. Ini bisa, tetapi jika Anda membuat kesalahan dan pernah Perlu untuk menempatkan link kembali di tempat, Anda mungkin akan kesulitan Mengingat nama yang tepat dari link. Oleh karena itu, Anda tidak harus menghapus link di rc * D direktori, Tapi Sebaliknya, tambahkan garis bawah (_) ke Awal dari nama link seperti ini.:

mv S99httpd _S99httpd

Pada waktu boot, rc mengabaikan _S99httpd Karena itu Apakah tidak dimulai dengan S atau K. Selanjutnya, nama asli masih jelas, dan Anda memiliki akses cepat ke perintah jika Anda dalam keadaan darurat dan Perlu untuk memulai dengan tangan.

Untuk menambahkan layanan, Anda harus membuat script seperti yang lain di direktori init.d dan KEMUDIAN membuat link simbolik di rc benar * D direktori.. Cara termudah untuk menulis naskah adalah untuk menguji skrip sudah init.d, membuat salinan dari satu Bahwa kau mengerti, dan memodifikasi salinan.

Ketika menambahkan layanan, pastikan Itu Anda Pilih Tempat yang Tepat dalam urutan boot untuk memulai layanan. Jika layanan mulai terlalu cepat, Mungkin tidak bekerja, karena ketergantungan pada Beberapa layanan lain. Untuk layanan non-esensial, kebanyakan sistem administrator lebih memilih angka di 90s, setelah sebagian besar layanan itu cam dengan sistem.

Biasanya distribusi Linux datang dengan perintah untuk mengaktifkan dan menonaktifkan layanan di rc *. D direktori. Misalnya, dalam Debian, perintah adalah update-rc.d, dan Red Hat Linux, perintahnya adalah chkconfig. Antarmuka pengguna grafis yang Juga Tersedia. Menggunakan Program-program MEMBANTU menjaga direktori startup konsisten dan MEMBANTU dengan upgrade.

Petunjuk: Salah satu yang paling umum masalah instalasi Linux adalah tahun benar server dikonfigurasi XFree86 Itu film dan mematikan, membuat sistem tidak dapat digunakan pada konsol. Untuk menghentikan perilaku ini, boot ke mode single-user dan mengubah runlevel atau layanan runlevel. Carilah Sesuatu Mengandung xdm, gdm atau kdm dalam Anda rc *. D direktori, atau / etc / inittab.

Mengontrol init

Kadang-kadang, Anda Harus Berikan init sedikit tendangan untuk menceritakannya untuk beralih runlevel, untuk kembali membaca file inittab, atau hanya untuk mematikan sistem. Karena init selalu proses pertama pada sistem, STI proses ID selalu 1.

Anda BISA mengontrol init dengan telinit. Misalnya, jika Anda ingin beralih ke runlevel 3, gunakan perintah ini:

telinit 3

Ketika beralih runlevel, init Mencoba untuk membunuh aren'ta setiap Bahwa Proses dalam file inittab untuk runlevel baru. Oleh karena itu, Anda HARUS berhati-hati tentang Mengubah runlevel.

Ketika Anda Perlu untuk menambah atau menghapus pekerjaan respawning atau membuat perubahan lain ke file inittab, Anda harus memberitahu init tentang perubahan dan menyebabkan ia untuk membaca kembali file tersebut. Beberapa orang menggunakan kill-HUP 1 untuk memberitahu init untuk melakukan hal ini. Metode tradisional ini bekerja pada sebagian besar versi Unix, selama Anda ketik dengan benar. Namun, Anda juga dapat menjalankan perintah ini telinit:

telinit q

Anda Juga Bisa menggunakan telinit s untuk beralih ke mode single-user.

Mematikan

Juga kontrol init bagaimana sistem dimatikan dan reboot. Cara yang tepat untuk mematikan mesin Linux adalah dengan menggunakan perintah shutdown.

Ada dua cara dasar untuk menggunakan shutdown. Jika Anda menghentikan sistem, menutup mesin bawah dan Keeps ke bawah. Untuk membuat mesin berhenti Segera, gunakan perintah ini:

shutdown-h now

Pada kebanyakan mesin modern dengan versi terbaru dari Linux cukup, berhenti memotong kekuatan untuk mesin. Anda Juga Bisa reboot komputer. Untuk reboot, gunakan-r-h BUKAN.

Proses shutdown Membawa Beberapa detik. Anda tidak HARUS reset atau matikan mesin SELAMA tahap ini.

Dalam contoh sebelumnya, sekarang adalah waktu untuk menutup. Argumen ini adalah wajib, Tapi ada Banyak Cara Menentukan itu. Jika Anda ingin mesin untuk turun suatu saat nanti, salah satu cara adalah dengan menggunakan + n, Dimana n adalah jumlah menit shutdown yang menunggu Sebelum melakukan ITS HARUS bekerja. Untuk pilihan lain, melihat (8) halaman buku panduan shutdown.

Untuk membuat sistem restart 10 menit, jalankan perintah ini:

shutdown-r + 10

Pada Linux, shutdown memberitahu siapa pun login Bahwa mesin akan turun, Tapi itu tidak bekerja nyata sedikit. Jika Anda menetapkan waktu selain sekarang, shutdown Disebut Membuat berkas / etc / Nologin. Ketika file ini hadir, sistem login dengan melarang siapapun kecuali superuser.

Ketika sistem waktu shutdown akhirnya TIBA, shutdown memberitahu init beralih ke runlevel 0 6 untuk menghentikan dan runlevel untuk reboot. Ketika Memasuki runlevel init atau 0 6, semua Berikut ini Berlangsung, Yang Dapat memverifikasi dengan melihat script dalam rc0.d dan rc6.d:

1. init membunuh setiap proses Bahwa BISA (seperti Akan Ketika beralih ke setiap runlevel lainnya).

# Perintah rc0.d / rc6.d awal berjalan, mengunci file sistem ke tempatnya dan membuat persiapan lainnya untuk shutdown.
# The rc0.d / rc6.d perintah berikutnya unmount semua filesystem selain root.
Perintah # lanjut rc0.d / rc6.d remount filesystem root read-only.
# Masih rc0.d / rc6.d lebih banyak perintah menulis semua buffered pada keluar ke filesystem dengan program sync.
# Perintah rc0.d / rc6.d akhir memberitahu kernel untuk reboot atau berhenti dengan reboot, berhenti, atau program poweroff.

Program reboot dan berhenti berperilaku Berbeda untuk setiap runlevel, berpotensi Menyebabkan kebingungan. Secara default, program ini menyebut penutupan dengan-r atau-h pilihan, tetapi jika sistem sudah pada berhenti atau restart runlevel, program kirim kernel untuk mematikan Hakikat Segera. Jika Anda benar-benar ingin mematikan komputer Anda ke bawah terburu-buru (mengabaikan kerusakan Kemungkinan dari shutdown teratur), gunakan opsi-f.

Tinggalkan Komentar