Bagaimana cara mematikan ketika tidak ada systemd / init (mis. Menggunakan init = / bin / bash)?

9

poweroffmengeluh bahwa itu tidak dapat terhubung ke systemd melalui DBus (tentu saja, itu tidak hidup). Saya memang syncmengikuti kill $$, berpikir bahwa pid 1 sekarat akan memberi tanda kernel untuk poweroff, tetapi itu menyebabkan panik kernel. Saya kemudian menahan tombol power untuk memaksa poweroff.

Apa cara paling tepat untuk mematikan dalam skenario ini?

JoL
sumber
Ada premis implisit yang tidak dinyatakan dari pertanyaan bahwa toold toolset diinstal. Ketika "tidak ada systemd" sebenarnya berarti bahwa tidak ada toolset systemd diinstal, yang adalah bagaimana judulnya juga dapat dibaca, jawabannya agak berbeda; dan itu mungkin layak pertanyaan terpisah dalam dirinya sendiri.
JdeBP
@ JdeBP Anda benar, hanya membaca judul dan mengabaikan init=/bin/bashpetunjuk / implikasi, itu ambigu jika systemd diinstal atau tidak. Maksud saya, tidak ada systemd yang berjalan . Bagaimanapun, tanpa menjalankan systemd, saya pikir toold systemd akan sia-sia dan bahwa jawaban akan menggunakan cara lain seperti yang tentang sysrq.
JoL

Jawaban:

10

Lepaskan sistem file yang telah Anda pasang. Sistem file root adalah kasus khusus; untuk ini kamu bisa menggunakan mount / -o remount,ro. Di Linux, umount /kebetulan juga bekerja, karena secara efektif dikonversi ke perintah sebelumnya.


Yang mengatakan, Anda tidak perlu khawatir tentang melepas terlalu banyak, kecuali

  1. Anda telah memasang sistem file lama seperti FAT - seperti yang digunakan oleh partisi sistem EFI - atau ext2, yang tidak menerapkan penjurnalan atau setara. Dengan sistem file modern, syncseharusnya sudah cukup, dan sistem file akan memperbaiki dirinya dengan sangat cepat pada boot berikutnya.
  2. Anda mungkin telah meninggalkan proses yang berjalan yang menulis ke sistem file, dan Anda bermaksud mematikannya dengan bersih. Dalam hal ini berguna untuk mencoba melakukan umount sistem file, karena umount akan gagal dan menunjukkan kesalahan yang sibuk untuk mengingatkan Anda tentang penulis yang tersisa.

Di atas adalah bagian penting. Setelah itu, Anda juga dapat dengan mudah mematikan perangkat keras menggunakan poweroff -f. Atau reboot dengan reboot -f.

Ada systemdsetara -specific dari poweroff -f: systemctl poweroff -f -f. Namun poweroff -fmelakukan hal yang sama, dan systemdmendukung perintah ini meskipun telah dibangun tanpa kompatibilitas SysV.


Secara teknis, saya ingat hard drive USB saya didokumentasikan sebagai membutuhkan Windows "hapus aman" atau setara. Tetapi persyaratan ini bukan powerfail aman, dan Linux tidak melakukan ini selama shutdown normal. Lebih baik diartikan sebagai makna bahwa Anda tidak boleh joging hard drive saat sedang berputar - termasuk dengan mencoba mencabutnya. Matikan penuh harus menghentikan drive berputar. Anda mungkin dapat mendengar, merasakan, atau melihat apakah itu tidak berhenti :-).

sourcejedi
sumber
Asal tahu saja, saya tidak lupa menerima. Hanya saja saya telah melihat saran untuk menunggu beberapa saat sebelum menerima jawaban untuk membiarkan orang lain (mungkin di zona waktu yang berbeda) melihat pertanyaan dan memiliki kesempatan untuk memberikan jawaban mereka sendiri.
JoL
sync()cukup untuk ext2. Ini akan mengeluh tentang menjadi kotor tetapi tidak akan benar-benar rusak kecuali untuk informasi ringkasan. Saya biasanya menganggap init = / bin / bash atau setara lokal sebagai situasi darurat.
Joshua
@ Yosua ext2 fsck luar biasa . Tetapi kinerja fsck pada sistem file besar jauh lebih buruk daripada replay jurnal. Dalam situasi darurat, Anda tidak ingin ditunda karena unmount yang tidak bersih.
sourcejedi
Anda tahu fsck.mode=skipkan?
Yosua
3
@ Yosua yang relevan mengapa? Jika Anda melakukan unmount yang tidak bersih, Anda akhirnya harus memperbaiki FS. Jangan gunakan fsck.mode=skipuntuk boot secara normal setelah unmount yang tidak bersih!
sourcejedi
5

Saya hanya akan menjalankan dua perintah di bawah ini:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Dengan asumsi kunci ajaib diaktifkan di kernel

SHW
sumber
4

Ok, jadi terpikir olehku bahwa aku punya pilihan exec init. Dari sana, saya mungkin akan bisa nanti poweroff. Saya bertanya-tanya apakah ada alternatif yang lebih baik.

JoL
sumber
@ G-Man bukankah itu akan memulai proses boot normal dan pada akhirnya memberi Anda shell normal?
muru
2
@uru Anda bisa melakukannya exec init 0. Itu tidak akan bekerja dengan semua sistem init, tetapi yang sama akan melalui urutan shutdown.
Austin Hemmelgarn
1
Saya pikir ini adalah jawaban yang sangat bagus untuk alasan lain; terutama karena kebanyakan kasus mematikan tidak diinginkan begitu banyak reboot dan ini menghindari reboot setelah memperbaiki kerusakan.
Joshua
1
@ Yosua Itu mudah, tetapi jika Anda ingin menjadi yang paling aman, sering kali merupakan ide bagus untuk memeriksa proses booting lengkap berfungsi :-).
sourcejedi
3

Secara efektif, tou ingin memanggil reboot (2) syscall.

Dua cara Anda bisa melakukan ini:

  1. Jalankan reboot -fatau poweroff -f, ini harus memanggil reboot(2)langsung.

  2. Jika Anda berada di terminal virtual Linux nyata (bukan emulator terminal GUI), dengan menekan Ctrl+ Alt+ Delete.

Perhatikan bahwa pintasan keyboard dapat dinonaktifkan oleh beberapa program ruang pengguna (biasanya init), ketika dinonaktifkan pintasan akan mengirim sinyal ke init sebagai gantinya.

Semua perintah di atas harus dilakukan setelah umount-ing semua disk atau remounting sebagai hanya baca, dan menjalankan sinkronisasi, jika tidak, Anda dapat kehilangan data tidak tertulis. Jika shell Anda adalah satu-satunya proses yang berjalan, sinkronisasi mungkin cukup.

Lie Ryan
sumber
1

Anda bisa menggunakan kunci Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) untuk mematikan komputer Anda.

Untuk mematikan dengan benar, Anda dapat menggunakan yang berikut ini (bentuk kutipan Wikipedia):

Penggunaan kunci SysRq ajaib yang umum adalah dengan melakukan reboot yang aman dari komputer Linux yang sebelumnya terkunci (abbr. REISUB ). Ini dapat mencegah fsckkeharusan untuk reboot dan memberikan beberapa program kesempatan untuk menyimpan cadangan darurat dari pekerjaan yang belum disimpan. [5]   The QWERTY (atau AZERTY) jembatan keledai: " R aising E lephants saya s S o U tterly B oring", " R eboot E ven Saya f S ystem U tterly Broken "atau hanya kata" BUSIER "dibaca mundur, sering digunakan untuk mengingat urutan SysRq-keys berikut:

  • un Raw (kendalikan keyboard kembali dari X),
  • t Erminate (kirim SIGTERM ke semua proses, memungkinkan mereka untuk mengakhiri dengan anggun),
  • k Ill (kirim SIGKILL ke semua proses, memaksa mereka untuk segera berakhir),
  • Sync (flush data to disk),
  • Unmount (remount semua sistem file read-only),
  • re Boot.

Tetapi mengganti B terakhir dengan O (untuk azerty / qwerty) untuk "power O ff"

breversa
sumber