Twitterで、「Linuxでもシャットダウンとリブートは違うよ」という話をしたら、若干の反響があったので、軽く解説。

なお、私はこのあたりのことはそこまで詳しくないので、詳しい解説をすると多分間違えることからほどほどにしておく。

Linux上の仕組み

実は私が行っているのはLinux上でどうこうということではなかったりするのだけど、けれど若干違いはある。

Systemdの場合はsystemd-reboot.service

After=shutdown.target umount.target final.target

となっており、reboot.target

After=systemd-reboot.service

となっている。 でもって、じゃあsystemd-reboot.serviceはなにをしているかというと…

ExecStart=/usr/bin/systemctl --force reboot

そう、再起動はSystemdの場合組み込みである。

shutdownのほうは割と単純で、Conflicts=shutdown.targetBefore=shutdown.targetがあるので色々終了処理を行う。 shutdown.targetはそれだけの存在で、shutdown.servicesystemd-shutdown.serviceはない。

シャットダウン自体はSystemdに組み込みで存在し、reboot同様systemctl shutdownで良い。

ただ少なくとも、rebootとshutdownが分けられている、というのはわかる。

ハードウェア的に

ここからが私が言っていた話になる。

実際に再起動してみるとわかると思うのだが、普通のパソコンでは再起動しても電源が切れることはない。 そして、電源を入れるのと比べて速く立ち上がる。

ワークステーションや、一部の業務用PC(法人向けのモデル)だと再起動時に電源を切ったりするのだが。

そもそもシャットダウンした時点でプロセスはほとんど残っていないのだから、OS側から「電源を切ったら起動する」のような制御をすることはできない。 当然ながらこれはファームウェア的な動作であり、ファームウェア的にシャットダウンの状態とリブートの状態を分けていることがわかる。

一般的には再起動時はPOSTが省略される。 そのため、デバイス認識がバグっている状態(例えば接続されているキーボードが認識されていないとか)では再起動では修復されなかったりする。

ただし、BIOS/UEFI設定に言ってsave changesした場合は(通常は変更があったかどうかにかかわらず)POSTからやり直すようになっている。

電源を切るかどうかについては、メモリ(DIMMに限らず)に影響を及ぼすことから、違いがでる、かもしれない。

英語で、ものすごーーーーく詳しい説明を見つけたのだけど、再度見つけることができず掲載できない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください