systemd / initがない場合(たとえば、init = / bin / bashを使用する)に電源をオフにする方法は?


9

poweroffDBusを介してsystemdに接続できないと文句を言います(もちろん、生きていません)。私はにsync続いてkill $$、pid 1が死ぬとカーネルの電源が切れるのではないかと思ったが、カーネルパニックが発生した。次に、電源ボタンを押し続けて電源を強制的にオフにしました。

このシナリオで電源を切る最も適切な方法は何ですか?


systemdツールセットがインストールされているという暗黙の前提はありません。「systemdがない」が実際にsystemdツールセットがインストールされていないことを意味する場合、つまりタイトルも読み取ることができますが、答えはかなり異なります。それはおそらくそれ自体で別の質問に値するでしょう。
JdeBP 2018

@JdeBPその通り、タイトルのみを読み、init=/bin/bashヒント/含意を無視すると、systemdがインストールされているかどうかがあいまいです。systemdが実行されていないことを意味していました。いずれにせよ、systemdを実行していないので、systemdツールセットは役に立たないだろうと思いました。その答えは、sysrqのような他の手段を使用することになります。
JoL、

回答:


10

マウントしたファイルシステムをアンマウントします。ルートファイルシステムは特別な場合です。このために使用できますmount / -o remount,ro。Linuxでは、umount /前者のコマンドに効果的に変換されるため、たまたま機能します。


とはいえ、アンマウントしすぎることを心配する必要はありません。

  1. EATシステムパーティションで使用されているFATなどの古いファイルシステム、またはジャーナリングまたは同等の機能を実装していないext2をマウントしました。最新のファイルシステムでsyncは十分なはずですが、ファイルシステムは次回の起動時に非常に迅速に修復されます。
  2. ファイルシステムに書き込む実行中のプロセスを残した可能性があり、それを完全にシャットダウンするつもりでした。その場合、ファイルシステムをumountしようとすると便利です。umountが失敗し、ビジーエラーが表示されて、残りのライターについて通知するからです。

上記は重要な部分です。その後、を使用してハードウェアの電源を切ることもできますpoweroff -f。または、で再起動しreboot -fます。

-にsystemd相当するものがありpoweroff -fます systemctl poweroff -f -f。ただしpoweroff -f、同じことを行い、systemdSysV互換性なしでビルドされた場合でも、このコマンドをサポートします。


技術的には、USBハードドライブがWindowsの「安全な取り外し」または同等の機能を必要とするものとして文書化されていたことを覚えています。しかし、この要件は電源障害に対して安全ではなく、Linuxは通常のシャットダウン中にこれを行いません。ハードドライブが回転している間は、取り外しを試みるなどして、ハードドライブをジョギングしないでください。完全に電源をオフにすると、ドライブの回転が停止します。あなたはおそらくそれが止まらないかどうか聞いたり、感じたり、見ることができます:-)。


ご存知のように、私は受け入れることを忘れません。それは、回答を受け入れる前にしばらく待って、他の人(おそらく異なるタイムゾーンにある)に質問を見てもらい、独自の回答を提供する機会を与えるというアドバイスを見たことがあるだけです。
JoL 2018

sync()ext2で十分です。ダーティであると文句を言いますが、要約情報以外は実際には破損していません。私は通常、init = / bin / bashまたはローカルの同等のものを緊急事態と見なします。
ジョシュア

@ジョシュアext2 fsckは素晴らしいです。ただし、大規模なファイルシステムでのfsckのパフォーマンスは、ジャーナルの再生よりもはるかに劣ります。緊急の状況では、アンマウントが不正確なために遅れることはありません。
sourcejedi 2018

知ってるfsck.mode=skip
ジョシュア

3
なぜ関連する@ジョシュア?アンクリーンなアンマウントを行うと、最終的にFSを修復する必要があります。fsck.mode=skip汚れたアンマウント後に通常の起動に使用しないでください!
sourcejedi 2018

5

以下の2つのコマンドを実行します。

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

カーネルでマジックキーが有効になっていると仮定


4

わかりました、それで私は私にオプションがあることを思いつきましたexec init。そこから、私はおそらく後でできるでしょうpoweroff。しかし、もっと良い代替案はあるのだろうか。


@ G-Manは通常の起動プロセスを開始し、最終的に通常のシェルを提供しませんか?
muru

2
@muruできるよexec init 0。これはすべてのinitシステムで動作するわけではありませんが、同じものはシャットダウンシーケンスを実行します。
オースティンヘンメルガーン2018

1
これは他の理由から本当に良い答えだと思います。特に、ほとんどの場合、電源を切ることは再起動ほど望ましくないため、損傷を修正した後の再起動は回避されます。
Joshua

1
@ジョシュアこれは便利ですが、安全を確保したい場合は、ブートプロセス全体が機能することを確認することをお勧めします。
sourcejedi

3

事実上、touはreboot(2) syscall を呼び出します。

これを行うには、2つの方法があります。

  1. reboot -fまたはを実行するとpoweroff -f、これがreboot(2)直接呼び出されます。

  2. (GUI端末エミュレーターではなく)実際のLinux仮想端末を使用している場合は、Ctrl+ Alt+を押しDeleteます。

キーボードショートカットは、一部のユーザー空間プログラム(通常はinit)によって無効にできることに注意してください。無効にすると、ショートカットは代わりにinitにシグナルを送信します。

上記のコマンドはすべて、すべてのディスクをアンマウントするか、読み取り専用として再マウントし、同期を実行した後に実行する必要があります。そうしないと、未書き込みのデータが失われる可能性があります。シェルが実行中の唯一のプロセスである場合、同期で十分な場合があります。


1

Magic SysRqキー(https://en.wikipedia.org/wiki/Magic_SysRq_key)を使用して、コンピューターの電源を切ることができます。

適切にシャットダウンするには、以下を使用できます(Wikipediaの引用フォーム)。

マジックSysRqキーの一般的な使用法は、他の方法でロックされたLinuxコンピューター(略してREISUB)を安全に再起動することです。これにより、fsck再起動時にが必要になるのを防ぎ、一部のプログラムに、保存されていない作業の緊急バックアップを保存する機会を与えます。[5]   ザQWERTY(又はAZERTY)ニーモニック: " R aising E lephants I S S O U tterly Bの和"、「R EBOOT E VEN I F S ystem U tterly Broken」または単に「BUSIER」という単語を逆に読んだ場合、次のSysRqキーシーケンスを覚えておくためによく使用されます。

  • un Raw(Xからキーボードの制御を取り戻す)、
  • t Erminate(SIGTERMをすべてのプロセスに送信し、正常に終了できるようにします)、
  • k Ill(SIGKILLをすべてのプロセスに送信し、プロセスを即座に強制終了します)、
  • Sync(データをディスクにフラッシュ)、
  • Unmount(すべてのファイルシステムを読み取り専用で再マウント)、
  • B起動します。

しかし、最後のBを"power O ff"の代わりにO(azerty / qwerty)に置き換えます


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.