Ubuntuユーザーは、多くの場合、クイックリブートを行う必要があります。カーネルの更新後、または再起動が必要な設定をテストするとき。
再起動を実行する時間を可能な限り節約できるメソッド(スクリプトなど)が必要です。
これらは、ユーザーセッションの準備ができるまで再起動時間を短縮するためにおそらく回避できるものです。
すぐに再起動するためにスキップできるものがもっとあるかもしれません。
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を使用しています。
この「非常に忙しい」世界では、再起動を先延ばしにして、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調整を行わなかった場合、ほんの数秒でした。
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
は、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
通常のバイナリダウンロードの後、次の画面が表示されます。
このバグレポートは、オプションが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ディストリビューションのマッサージが必要です。
Sudo kexec -l /boot/vmlinuz-`uname -r` --initrd=/boot/initrd.img-`uname -r` --reuse-cmdline
Sudo kexec -e
これ以降、再起動をクリックするたびに表示され、最後のカーネルが高速再起動モードで自動的にリロードされます。
ファイル/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の詳細オプションメニューに似ています。