Cara menentukan dengan tepat mengapa Systemd memasuki mode darurat

10

Komputer desktop saya yang menjalankan Debian Jessie mulai menjatuhkan ke shell mode darurat pada setiap boot. Layar mengatakan digunakan journalctl -xbuntuk menemukan alasannya, dan digunakan systemctl defaultuntuk melanjutkan booting. Ketika saya menjalankan systemctl default, sistem terus boot, dan setelah beberapa minggu menggunakan sistem tidak ada yang salah.

Melihat melalui journalctl -xb, tidak ada yang menonjol sebagai alasan untuk jatuh ke shell darurat. Apakah ada cara mudah untuk menentukan dengan tepat alasan mengapa ia memutuskan untuk masuk ke mode darurat? Apakah ada opsi flag atau bootup lain yang akan memperjelas di mana masalahnya?

jordanm
sumber
2
Itu harus terlihat di jurnal tetapi dengan informasi yang Anda berikan terbatas, tidak ada cara untuk membimbing Anda. Apakah Anda memiliki salinan journalctl -xb ketika itu terjadi?
Julie Pelletier
3
Boot dalam mode logging verbose systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1Muntuk detail level forensik ...
jasonwryan
2
Log yang ada seharusnya sudah memberi Anda alasannya. Ada banyak alasan sehingga sulit ditebak.
Giacomo Catenazzi
1
Saya memiliki masalah yang sama pada instance Ubuntu 16.04. Telah menginstal, menggunakan, memperbaiki banyak sistem Linux selama 20 tahun terakhir. Tidak ada yang spesial di layar dan kali ini tidak ada yang menonjol di log. Layar mengatakan Ctrl-D untuk melanjutkan boot, tetapi itu hanya mengarah kembali ke prompt yang sama setelah beberapa saat. Tanpa petunjuk. Membuat frustrasi, bukan?
Stéphane Gourichon
Sudahkah Anda mencoba semua langkah dari bagian "Mendiagnosis Masalah Booting" di Debugging systemd ?
Siosm

Jawaban:

6

Kegagalan seharusnya menunjukkan warna merah [ FAIL ]pada konsol (bukan [ OK ]), dengan deskripsi unit di sebelahnya. Biasanya kegagalan pertama adalah yang paling penting. Gunakan shift + pageup pada konsol untuk menggulir ke atas dan melihat beberapa layar penuh keluaran. Ini mungkin tidak berfungsi jika ada terlalu banyak output.

Ini berfungsi bahkan jika Anda biasanya tidak melihat [ OK ]pesan, misalnya karena quietpada baris perintah kernel seperti yang digunakan oleh Debian. Pada kegagalan pertama, systemd beralih ke mode verbose.

Kalau tidak, Anda bisa menggunakan systemctl. Tanpa opsi apa pun, ini menunjukkan daftar besar unit yang diketahui dengan kegagalan disorot dalam warna merah. Untuk menampilkan yang gagal saja, gunakan systemctl --state=failedatau systemctl --failed.


Jika Anda mencari melalui file unit, hanya ada beberapa cara untuk boot kembali emergency.target. Biasanya ketika .mountunit untuk sistem file lokal gagal, menyebabkan local-fs.targetgagal. Atau ketika initramf Anda gagal me-mount filesystem root, jika initramf Anda menggunakan systemd.

local-fs.targettelah OnFailure=emergency.target. Dan itu gagal karena unit untuk sistem file lokal secara otomatis ditambahkan ke daftar Memerlukan local-fs.target (kecuali jika ada DefaultDependencies=no).

$ systemctl show --property Requires local-fs.target
Requires=-.mount home.mount boot.mount boot-efi.mount
sourcejedi
sumber
2

Sesekali saya mengalami prompt "mode pemeliharaan", dan saya juga harus menelusuri journald untuk mencari kesalahan. Karena jurnalctl menggunakan lebih sedikit sebagai pager, Anda harus dapat menerapkan pintasan yang kurang untuk pencarian Anda.

Biasanya, saya akan bergantung pada fungsi pencarian (/) dan mencari sesuatu yang setara dengan "kesalahan", "peringatan", atau "gagal". Dan pastikan -i untuk memaksa pencarian case sensitif.

Jadi penekanan tombol saya akan cenderung terlihat seperti:

-i (case insensitive)
g (move to start)
/error
nnnn (skip through results)
g (move to start)
/fail
nnnn (skip through results)
g (move to start)
/warn
nnnn (skip through results)

Secara teknis ini bukan pencarian yang lengkap atau tepat untuk masalah yang tepat, tetapi saya tidak pernah melewatkan masalah boot dengan cara ini.

Beberapa pintasan keyboard yang kurang terkait di bawah ini:

http://www.thegeekstuff.com/2010/02/unix-less-command-10-tips-for-effective-navigation/

madumlao
sumber
Saya percaya itu juga harus dimungkinkan untuk melalui halaman dengan cepat dan mencari pesan merah (LOG_ERR dan di atas). systemdakan mencatat pesan merah karena kegagalan untuk memulai unit layanan, atau lebih penting lagi kegagalan untuk memasang sistem file.
sourcejedi