Mengapa "shutdown -r now" berperilaku berbeda dari "reboot -f" di Debian Linux?

11

Saya baru-baru ini harus berurusan dengan klien / server NFS sial, terputus-putus tergantung masalah titik. Ketika masalah terjadi pada klien saya tidak bisa melepas, bersama dengan beberapa perilaku aneh lainnya. Satu-satunya resolusi langsung yang saya miliki hingga saat ini adalah me-reboot kotak klien.

Tetapi shutdown -r nowtidak bekerja sama sekali. Sejak saya temukan reboot -f, yang melakukan reboot sistem. Mengapa? Saya telah membaca halaman manual tetapi sepertinya tidak ada yang menjawab pertanyaan saya.

Mengapa shutdown -r nowberperilaku berbeda dari reboot -f?

(Saya terus menyelesaikan masalah NFS, tapi itu bukan pertanyaan saya di sini.)

Stu Thompson
sumber

Jawaban:

20

Dari halaman manual shutdown:

Setelah TIME berlalu, shutdown mengirimkan permintaan ke daemon init (8) untuk membawa sistem ke runlevel yang sesuai.

initmemulai dan menghentikan pekerjaan saat sistem mengubah runlevel. Ketika memasuki runlevel 6 karena reboot, sistem menjalankan semua skrip di /etc/rc6.d. Karena sistem Anda tidak merespons shutdown, kemungkinan skrip di /etc/rc6.d(mungkin K05nfs-commonkarena masalah NFS Anda) macet, tidak memungkinkan urutan penutupan selesai. Bahkan, hal terakhir init berjalan ketika mengubah ke runlevel 6 adalah reboot -d -f -i.

reboot -f melompati semua skrip dan mem-boot ulang sistem secara langsung.

Cakemox
sumber
Terima kasih banyak telah menghubungkan jawaban Anda dengan konteks saya.
Stu Thompson
12

shutdownmenginstruksikan inituntuk memulai prosedur mematikan, yang melibatkan membiarkan pengguna yang masuk tahu bahwa sistem dimatikan, membunuh semua proses dengan anggun, melepas dan menyinkronkan drive, dan sebagainya. Anda terhenti di sini karena proses macet menunggu IO cenderung sangat sulit untuk dibunuh, dan NFS mount Anda yang macet tidak dapat dilepas.

reboot -f, di sisi lain, segera reboot server tanpa melakukan semua itu. ( rebootadalah initpanggilan program untuk mematikan server. Tanpa -ftanda, itu akan memeriksa untuk melihat apakah initmengira sedang me-reboot, dan jika tidak, ia akan memanggil shutdownuntuk memulai proses).

DerfK
sumber
Terima kasih banyak telah menghubungkan jawaban Anda dengan konteks saya.
Stu Thompson
4

Karena 'reboot -f' tidak masuk ke runlevel 0 - ia memberi tahu OS untuk menginisialisasi ulang CPU secara langsung. Halaman manual di kotak Linux terdekat saya mengatakan:

 -f     Force halt or reboot, don't call shutdown(8)

Halaman manual shutdown menjelaskan lebih lanjut.

symcbean
sumber
1

Jika Anda menggunakan intropsi pada NFS mounts Anda, maka shutdown -r nowharus dapat mematikan proses yang menunggu di NFS IO untuk menyelesaikan. Ini dapat menyebabkan file korupsi, tetapi kemungkinan tidak lebih dari shutdown -fmenciptakan.

BillThor
sumber