재부팅 시간

재부팅 시간

예를 들어 커널 업데이트 후 또는 재부팅이 필요한 일부 설정을 테스트할 때 Ubuntu 사용자가 빠른 재부팅을 수행해야 하는 경우가 종종 있습니다.

재부팅을 수행하는 데 최대한 많은 시간을 절약할 수 있는 방법(예: 스크립트)이 필요합니다.

사용자 세션이 준비될 때까지 재부팅 시간을 줄이기 위해 피할 수 있는 사항은 다음과 같습니다.

  • 가능하다면 BIOS/UEFI/펌웨어 초기화 및 POST를 건너뛰세요.
  • GRUB 메뉴 건너뛰기(원하는 항목을 한 번 미리 선택하고 시간 초과 없이 직접 부팅)
  • 로그인 화면 건너뛰기(비밀번호 없는 자동 로그인을 한 번 사용)

어쩌면 빠른 재부팅을 위해 건너뛸 수 있는 항목이 더 있을 수도 있습니다.

나는 본 적이있다신속한 재부팅사양은 Ubuntu Wiki에 있지만 페이지는 2010-02-03에 마지막으로 편집되었습니다.

그러나 아직 이 설명을 제대로 사용하여 kexec펌웨어 초기화 등을 건너뛸 수 없더라도 일시적으로 GRUB 항목을 사전 선택하고 정확히 한 번의 재부팅에 자동 로그인을 사용할 수 있어야 합니다. 어떻게 설정할 수 있나요?

저는 UEFI가 포함된 Acer Aspire E5-773G 시스템에서 Windows 10(및 곧 더 많은 Linux 배포판)을 사용한 이중 부팅에서 Unity DE, lightdm 및 GRUB와 함께 Ubuntu 16.04, 64비트를 사용하고 있습니다.

답변1

재부팅 시간

우리는 "과도하게 바쁜" 세상에서 5~15초를 낭비하고 싶지 않아 재부팅을 미룰 수도 있습니다. 이 질문을 처음 봤을 때 SSD와 systemd조정을 통해 부팅 시간이 45초에서 14초로 단축되었습니다.

최근에 저는 3.4GB/s Windows 읽기 속도와 2GB/s 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

이번에는 실제로~ 후에조정. nVidia와 Dell이 HDMI 포트를 구동하는 nVidia GTX970M 그래픽 카드에서 HDMI 오디오의 전원을 차단하기로 결정했기 때문에 80초는 훨씬 더 나빴습니다. 따라서 setpci"낮은 그래픽 오류" 메시지를 발생시키는 명령이 필요했으며 마우스 포인터가 계속 작동할 때까지 20초를 기다려야 했습니다. 그런 다음 모든 그래픽 드라이버를 다시 로드하고 lightdm을 다시 시작합니다.

"현대적인" 노트북의 또 다른 문제는 BIOS POST에 15초가 걸린다는 것입니다. BIOS를 조정하여 하드웨어 오류 검사를 끄고, NIC용 부팅 드라이버 로드를 끄고, 기타 조정을 하여 BIOS POST 시간을 6초로 변경한 기억이 나지 않습니다. 이에 비해 "기존" 노트북 BIOS POST 시간은 레거시 BIOS CSM을 사용하고 BIOS 조정 없이 단 몇 초밖에 걸리지 않았습니다.


RapidReboot2010년 우분투 프로젝트

우분투신속한 재부팅ByteCommander 게시물의 프로젝트 언급은 2010년부터입니다. 프로젝트의 근거는 다음과 같이 요약됩니다.

이론적 해석

사용자가 부트로더를 보고 싶어하지 않는다고 안전하게 가정할 수 있는 몇 가지 경우가 있습니다. 이러한 경우 긴 재부팅, BIOS POST 및 부트 로더 시간을 방지하려면 kexec를 사용해야 합니다. 최적의 상황에서는 10초 정도 걸릴 수 있습니다. 그러나 SCSI 또는 RAID BIOS 및 네트워크 부팅 ROM을 사용하면 커널 로드부터 로그인 화면 표시까지의 시간이 30~60초인 경우에도 시간이 20초, 30초, 심지어 60초 이상까지 늘어날 수 있습니다.

프로젝트 사용 예:

사용 사례

  • Bob은 방금 커널을 업그레이드했습니다. update-notifier는 변경 사항을 적용하려면 재부팅해야 한다고 알리고 '다시 시작' 버튼은 kexec를 사용하여 이를 더 빠르게 만듭니다.
  • Alice는 방금 dbus를 업그레이드했습니다. update-notifier는 그녀에게 다시 시작하라고 지시하고 kexec를 사용합니다.
  • Seveas는 지난 달에 여러 가지 업데이트를 수행했으며 현재는 서로 다른 공유 라이브러리 복사본을 사용하는 서로 다른 프로그램으로 인해 메모리 압박이 3배 더 낮습니다. 그는 이 문제를 해결하기 위해 재부팅하기로 결정하고 더 빠르게 만들기 위해 "빠른 재부팅"을 사용합니다.
  • Keybuk은 방금 Ubuntu Edgy를 설치했고 부팅하려고 합니다. LiveCD는 kexec를 사용하여 대상 커널과 initrd를 로드합니다. 모든 디스크 기반 파일 시스템을 마운트 해제합니다. 동조; 그런 다음 재부팅하는 대신 kexec를 사용하여 새 시스템을 시작합니다.

kexec를 사용하여 재부팅

kexecBIOS 포스트나 RAID 설정과 같은 다른 낮은 수준의 검색 메커니즘 없이 재부팅하기 위해 시전하는 마법 주문입니다.

CONFIG_KEXEC커널은 플래그를 사용하여 컴파일되어야 합니다.

첫 번째 단계는 커널이 다음 CONFIG_KEXEC=y옵션으로 컴파일되었는지 확인하는 것입니다.

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

첫 번째 명령은 uname -r부팅한 커널을 표시하기 위한 선택 사항입니다. 두 번째 명령에서 볼 수 있듯이 커널은 필요한 플래그 세트를 사용하여 Ubuntu 팀에 의해 컴파일됩니다. 언제 추가되었는지는 확실하지 않지만 <= 2012년일 가능성이 높습니다.

설치하다kexec-tools

다음 단계는 kexec사용자 공간을 위한 도구를 설치하는 것입니다.

$sudo apt install kexec-tools

일반적인 바이너리 다운로드 후에는 다음 화면이 나타납니다.

kexec-도구 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 배포판에는 마사지가 필요합니다.

기본 사용법은 두 가지 명령을 사용합니다.

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

다음 kexec에 대해 다른 커널(예: 4.12.2-041202-generic)을 로드하려면 현재 커널에 대한 서비스를 비활성화하고 새 커널에 대한 서비스를 활성화합니다.

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

앞으로 더 많이

이제 부팅하고, 수정하고, 부팅하고, 수정하고, 반복할 시간이므로 이 답변을 게시해야 합니다. 언로드해야 하는 systemd5개의 드라이버를 로드하고 , hdmi에 대한 오디오 전원을 켜고, nVidia 드라이버를 다시 로드하고, lightdm을 다시 시작하는 복잡한 설정이 있습니다 . 운동하는 데 시간이 좀 걸릴 수 있습니다.nVidiasetpci

방법이 작동 하도록 한 후 암호 프롬프트를 cli사용하여 원클릭 재부팅을 위한 바탕화면 바로가기를 만들겠습니다 . 그런 다음 설치된 커널 중에서 선택하여 재부팅할 수 있는 대화 상자 sudo에 대한 바탕 화면 바로 가기를 만듭니다 . yadGrub의 고급 옵션 메뉴와 유사합니다.

답변2

Linux 시스템을 매우 빠르게 재부팅하려면 재부팅 커널 함수를 호출하세요. 디스크를 플러시하고(적어도 커널 버전 3.x에서는) 즉시 재부팅합니다. 그 사이에는 아무 것도 없고, OS 기능, 스크립트 등도 없습니다. 단지 커널 호출만 있을 뿐입니다.

어떻게?

다음 내용으로 재부팅.c를 생성합니다.

#include <stdio.h>
#include <sys/reboot.h>


int
main (int argc, char **argv)
{
    if (reboot (RB_AUTOBOOT) < 0) {
        fprintf (stderr, "%s: call to reboot() system call failed.\n",
             argv[0]);
    }

    return 0;
}

Reboot.c를 재부팅으로 컴파일합니다.

gcc reboot.c -o reboot

재부팅을 실행합니다(데이터를 디스크로 플러시하고 재부팅합니다. 그게 전부입니다!):

./reboot

재부팅 잘 하세요!

https://github.com/masikh/reboot

답변3

컴퓨터를 부분적으로 다시 시작하고 부팅 속도를 높이지 않으려는 경우 다음과 같이 이해합니다. Linux 부팅에는 세 가지 주요 부분이 있습니다.

  1. 1 단계: 부팅 관리자/OS 선택(rEFInd, Grub, ...)까지 컴퓨터 부팅
  2. 2 단계: Linux 및 주요 서비스 시작
  3. 3단계: 세션 시작
    • 사용자 로그인
    • Cinnamon, KDE, Gnome 등과 같은 창 관리자...)

3단계만 다시 시작하세요.

  • 유형Alt-F2그리고아르 자형
  • 또는sudo 서비스 $(cat /etc/X11/default-display-manager) 재시작

2단계와 3단계만 다시 시작하세요.

부팅 관리자에서 Linux를 다시 시작하는 방법을 모르겠습니다.


모든 단계를 다시 시작하세요

  • 메인 메뉴에서 "를 선택하세요.재시작"
  • 명령줄에서 다음을 입력하세요.sudo 재부팅

관련 정보