web-dev-qa-db-ja.com

超高速で再起動するにはどうすればよいですか?

Ubuntuユーザーは、多くの場合、クイックリブートを行う必要があります。カーネルの更新後、または再起動が必要な設定をテストするとき。

再起動を実行する時間を可能な限り節約できるメソッド(スクリプトなど)が必要です。

これらは、ユーザーセッションの準備ができるまで再起動時間を短縮するためにおそらく回避できるものです。

  • 可能であれば、BIOS/UEFI /ファームウェアの初期化とPOSTをスキップします
  • GRUBメニューをスキップします(目的のエントリを一度選択して、タイムアウトなしで直接起動します)
  • ログイン画面をスキップ(パスワードなしの自動ログインを1回使用)

すぐに再起動するためにスキップできるものがもっとあるかもしれません。

Ubuntu Wikiで RapidReboot 仕様を確認しましたが、ページは最後に編集されました2010-02-03。

しかし、まだ説明されているkexecを使用してファームウェアの初期化などをスキップできない場合でも、GRUBエントリを一時的に事前選択し、1回の再起動に自動ログインを使用できます。これを設定するにはどうすればよいですか?

UEFIを搭載したAcer Aspire E5-773Gマシンで、Windows 10(およびまもなくいくつかのLinuxディストリビューション)とのデュアルブートで、Unity DE、lightdm、およびGRUBとともに64ビットUbuntu 16.04を使用しています。

6
Byte Commander

再起動時間

この「非常に忙しい」世界では、再起動を先延ばしにして、5秒または15秒を無駄にしたくないことがあります。この質問を初めて見たとき、SSDとsystemdの調整により、起動時間が45秒から14秒になりました。

最近、3.4 GB /秒のWindows読み取り速度と2 GB /秒のLinux読み取り速度を備えたNVMe M.2 Gen 3.0 x 4 SSDを搭載した「モダンな」ラップトップを購入しました。それで、速くなるはずですよね?いいえ。それは痛々しいほど遅いです:

$ systemd-analyze
Startup finished in 6.823s (firmware) + 4.447s (loader) + 3.467s (kernel) + 8.412s (userspace) = 23.151s

この時間は実際にはafter調整です。 nVidiaとDellは、HDMIポートを駆動するnVidia GTX970MグラフィックスカードでHDMIオーディオへの電力をカットすることを選択したため、80秒はさらに悪化しました。そのため、「低グラフィックエラー」メッセージの原因となるsetpciコマンドが必要であり、マウスポインターが進むまで20秒待機する必要がありました。次に、すべてのグラフィックドライバーをリロードし、lightdmを再起動します。

「現代の」ラップトップのもう1つの問題は、BIOS POSTが15秒かかっていたことです。 BIOSを微調整して、ハードウェアエラーチェックをオフにし、NICのブートドライバーのロードをオフにして、BIOS POST時間を6秒に変更したことを思い出せない他の微調整。比較すると、「古い」ラップトップBIOS POST時間は、レガシBIOS CSMを使用し、BIOS調整を行わなかった場合、ほんの数秒でした。


2010年のUbuntu RapidRebootプロジェクト

Ubuntu RapidReboot ByteCommanderの投稿で言及されているプロジェクトは2010年のものです。プロジェクトの原理は次のようにまとめられています。

根拠

ユーザーがブートローダーを見たくないと安全に想定できる場合がいくつかあります。このような場合、長い再起動、BIOS POST、およびブートローダー時間を避けるために、kexecを使用する必要があります。最適な状況では10秒かかります。ただし、SCSIまたはRAID BIOSおよびネットワークブートROMを使用すると、カーネルのロードからログイン画面の表示までの時間が30〜60秒の場合でも、時間が20、30、または60秒を超えることがあります。

プロジェクトの使用例:

ユースケース

  • ボブはカーネルをアップグレードしました。 update-notifierは、変更を有効にするためにリブートする必要があることを彼に通知し、「Restart」ボタンはkexecを使用してこれを高速化します。
  • Aliceはdbusをアップグレードしました。 update-notifierは再起動するように彼女に指示し、kexecを使用します。
  • Seveasはこの1か月間にいくつかの更新を行いましたが、現在は共有ライブラリの異なるコピーを使用する異なるプログラムにより、3倍のメモリ負荷がかかっています。彼はこれを解消するために再起動することを決定し、「クイック再起動」を使用してこれを高速化します。
  • KeybukはUbuntu Edgyをインストールしたばかりで、起動したいと考えています。 LiveCDは、kexecを使用してターゲットカーネルとinitrdをロードします。すべてのディスクベースのファイルシステムをアンマウントします。同期;そして、kexecを使用して、リブートするのではなく、新しいシステムを開始します。

Kexecを使用して再起動する

kexecは、BIOSポストおよびRAIDセットアップなどの他の低レベル検出メカニズムなしで再起動するために私たちがかける魔法です。

カーネルはCONFIG_KEXECフラグを使用してコンパイルする必要があります

最初のステップは、CONFIG_KEXEC=yオプションを使用してカーネルがコンパイルされたことを確認することです。

$ uname -r
4.14.2-041402-generic
$ grep KEXEC= /boot/config-`uname -r`
CONFIG_KEXEC=y

最初のコマンドuname -rは、ブートしたカーネルを表示するためだけのオプションです。 2番目のコマンドでわかるように、カーネルは必要なフラグが設定されたUbuntuチームによってコンパイルされます。これがいつ追加されたかはわかりませんが、2012年以降になる可能性があります。

インストールkexec-tools

次のステップは、ユーザースペース用のkexecツールをインストールすることです:

$Sudo apt install kexec-tools

通常のバイナリダウンロードの後、次の画面が表示されます。

kexec-tools install.png

このバグレポートは、オプションがNoに関連していないという理由で、systemdと答えました。

その後、インストールが続行されます(以下のスニペット):

Unpacking kexec-tools (1:2.0.10-1ubuntu2.4) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21) ...
Setting up kexec-tools (1:2.0.10-1ubuntu2.4) ...
Generating /etc/default/kexec...
Generating grub configuration file ...
  (... CUT ...)
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Windows Boot Manager on /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Processing triggers for systemd (229-4ubuntu21) ...

kexecの構成

ArchLinuxのコホートには kexecの優れたドキュメント がありますが、Ubuntu/Debianディストリビューションのマッサージが必要です。

基本的な使用法は次の2つのコマンドを使用する場合です。

Sudo kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initrd.img-`uname -r` --reuse-cmdline
Sudo kexec -e

これ以降、再起動をクリックするたびに表示され、最後のカーネルが高速再起動モードで自動的にリロードされます。

Systemdを使用してkexecをロードする

ファイル/etc/systemd/system/[email protected]を作成します。

[Unit]
Description=load %i kernel into the current kernel
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/usr/bin/kexec -l /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline

[Install]
WantedBy=kexec.target

次に、ロードするカーネルのサービスファイルを有効にします。たとえば、現在のカーネルuname -rを単純に設定します。

$ Sudo systemctl enable kexec-load@`uname -r`
Created symlink from /etc/systemd/system/kexec.target.wants/[email protected] to /etc/systemd/system/[email protected].

それからkexecに:

$ Sudo systemctl kexec

youtubeを実行している場合、再起動を妨げるシステム阻害剤が存在する可能性があります。

$ Sudo systemctl kexec -i

4.12.2-041202-genericなど、次のkexecに別のカーネルをロードする場合は、現在のカーネルのサービスを無効にし、新しいカーネルのサービスを有効にします。

$ Sudo systemctl disable kexec-load@`uname -r`
$ Sudo systemctl enable [email protected]

もっと来る

起動、修正、起動、修正、繰り返しの時間ですので、この回答を今すぐ投稿する必要があります。 systemdが5つのnVidiaドライバーをロードし、アンロードする必要があるsetpciを実行してオーディオをhdmiにパワーオンし、nVidiaドライバーをリロードしてlightdmを再起動する複雑なセットアップがあります。解決するには時間がかかる場合があります。

cliメソッドが機能するようになったら、Sudoパスワードプロンプトでワンクリックで再起動するためのデスクトップショートカットを作成します。その後、yadダイアログボックスへのデスクトップショートカットを作成し、インストールされたカーネルから選択して再起動できるようにします。 grubの詳細オプションメニューに似ています。

2