GRUB 및 sysrq에 대한 액세스 권한을 사전에 보장하면 많은 가동 중지 시간을 절약할 수 있습니다.

직렬 콘솔 및 GRUB에 액세스하면 대부분의 경우 IaaS Linux Virtual Machine의 복구 시간이 향상됩니다. GRUB는 VM을 복구하는 데 더 오래 걸리는 복구 옵션을 제공합니다.

VM 복구를 수행하는 이유는 많으며 다음과 같은 시나리오에 기인할 수 있습니다.

  • 손상된 파일 시스템/커널/MBR(마스터 부팅 레코드)
  • 실패한 커널 업그레이드
  • 잘못된 GRUB 커널 매개 변수
  • 잘못된 fstab 구성
  • 방화벽 구성
  • 암호 분실
  • sshd 구성 파일이 손상됨
  • 네트워킹 구성

여기에 자세히 설명된 다른 많은 시나리오

Azure에 배포된 VM에서 GRUB 및 직렬 콘솔에 액세스할 수 있는지 확인합니다.

직렬 콘솔을 사용하는 경우 이 링크를 참조하세요.

변경하기 전에 파일을 백업해야 합니다.

GRUB에 액세스할 수 있는 경우 Linux VM을 신속하게 복구하는 방법을 보려면 아래 비디오를 시청하세요.

Linux VM 비디오 복구

Linux VM을 복구하는 데 도움이 되는 여러 가지 방법이 있습니다. 클라우드 환경에서는 이 프로세스가 어려웠습니다. 서비스가 신속하게 복구될 수 있도록 도구 및 기능에 대한 진행이 지속적으로 진행되고 있습니다.

Azure 직렬 콘솔을 사용하면 마치 시스템 콘솔에 있는 것처럼 Linux VM과 상호 작용할 수 있습니다.

커널이 부팅되는 방법을 포함하여 많은 구성 파일을 조작할 수 있습니다.

경험이 많은 Linux/Unix sys 관리자는 Azure 직렬 콘솔을 통해 액세스할 수 있는 단일 사용자응급 모드 를 높이 평가하여 많은 복구 시나리오에 대해 디스크 교환 및 VM 삭제를 중복합니다.

복구 방법은 발생하는 문제에 따라 달라집니다. 예를 들어 암호 재설정 옵션인> Azure Portal 통해 암호 분실 또는 잘못된 암호를 재설정할 수 있습니다. 암호 재설정 기능을 확장이라고 하며 Linux 게스트 에이전트와 통신합니다.

사용자 지정 스크립트와 같은 다른 확장을 사용할 수 있습니다. 그러나 이러한 옵션을 사용하려면 Linux waagent 가 정상 상태여야 하며 항상 그렇지는 않습니다.

Azure Portal 속성 페이지의 에이전트 상태 스크린샷

Azure 직렬 콘솔 및 GRUB에 액세스할 수 있도록 하는 것은 암호 변경 또는 잘못된 구성이 시간 대신 몇 분 안에 수정될 수 있음을 의미합니다. 기본 커널이 손상되는 시나리오에서 디스크에 여러 커널이 있는 경우 VM이 대체 커널에서 부팅되도록 강제할 수도 있습니다.

여러 커널을 선택할 수 있는 GRUB의 부팅 선택한 OS 화면 스크린샷

제안된 복구 방법 순서

디스크 교환 비디오

비디오를 watch GRUB에 액세스할 수 없는 경우 디스크 교환 절차를 쉽게 자동화하여 VM을 복구하는 방법을 확인하세요.

도전

모든 Linux Azure VM이 GRUB 액세스에 대해 기본적으로 구성된 것은 아니며 모두 sysrq 명령으로 중단되도록 구성되지도 않습니다. SLES 11과 같은 일부 이전 배포판은 Azure 직렬 콘솔에 로그인 프롬프트를 표시하도록 구성되지 않았습니다.

이 문서에서는 GRUB를 사용할 수 있도록 하는 방법에 대한 다양한 Linux 배포판 및 문서 구성을 검토합니다.

SysRq 키를 수락하도록 Linux VM을 구성하는 방법

sysrq 키는 기본적으로 일부 최신 Linux 배포판에서 사용하도록 설정되지만 다른 경우에는 특정 SysRq 함수에 대해서만 값을 수락하도록 구성될 수 있습니다. 이전 배포판에서는 완전히 사용하지 않도록 설정되었을 수 있습니다.

SysRq 기능은 Azure 직렬 콘솔에서 크래시되거나 응답하지 않는 VM을 직접 다시 부팅하는 데 유용하며, GRUB 메뉴에 대한 액세스 권한을 얻는 데도 도움이 되며, 다른 포털 창 또는 ssh 세션에서 VM을 다시 시작하면 현재 콘솔 연결이 끊어지므로 GRUB 메뉴를 표시하는 데 사용되는 GRUB 시간 제한이 만료될 수 있습니다. 다시 부팅/poweroff를 허용하는 sysrq 또는 128의 모든 함수를 사용할 수 있도록 커널 매개 변수에 대해 1 값을 허용하도록 VM을 구성해야 합니다.

sysrq 비디오 사용

Azure Portal SysRq 명령을 통해 다시 부팅을 허용하도록 VM을 구성하려면 커널 매개 변수 kernel.sysrq에 대해 1 값을 설정해야 합니다.

이 구성이 다시 부팅을 유지하려면 sysctl.conf 파일에 항목을 추가합니다.

echo kernel.sysrq = 1 >> /etc/sysctl.conf

커널 매개 변수를 동적으로 구성하려면

sysctl -w kernel.sysrq=1

루트 액세스 권한이 없거나 sudo가 끊어진 경우 셸 프롬프트에서 sysrq를 구성할 수 없습니다.

이 시나리오에서는 Azure Portal 사용하여 sysrq를 사용하도록 설정할 수 있습니다. sudoers.d/waagent 파일이 손상되었거나 삭제된 경우 이 메서드가 유용할 수 있습니다.

Azure Portal 작업 -> 명령 실행 -> RunShellScript 기능을 사용하려면 waagent 프로세스가 정상 상태여야 합니다. 그런 다음 이 명령을 삽입하여 sysrq를 사용하도록 설정할 수 있습니다.

sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf

여기에 표시된 대로:

명령을 삽입할 때 RunShellScript 창의 스크린샷

완료되면 sysrq 에 액세스하여 다시 부팅이 가능한지 확인할 수 있습니다.

단추 모음의 키보드 아이콘 아래에 있는 SysRq 명령 보내기 옵션의 스크린샷

다시 부팅SysRq 명령 보내기를 선택합니다.

SysRq 명령을 게스트로 보내기 대화 상자의 다시 부팅 옵션 스크린샷

시스템에서 다음과 같은 재설정 메시지를 기록해야 합니다.

명령줄 인터페이스의 다시 설정 메시지 로그 스크린샷

Ubuntu GRUB 구성

기본적으로 VM 부팅 중에 Esc 키를 누름으로써 GRUB에 액세스할 수 있어야 합니다. GRUB 메뉴가 표시되지 않으면 이러한 옵션 중 하나를 사용하여 Azure 직렬 콘솔에서 GRUB 메뉴를 강제로 화면에 유지할 수 있습니다.

옵션 1 - GRUB를 화면에 강제로 표시

지정된 시간 제한에 대해 GRUB 메뉴를 화면에 유지하도록 /etc/default/grub.d/50-cloudimg-settings.cfg 파일을 업데이트합니다. GRUB가 즉시 표시되므로 Esc 를 칠 필요는 없습니다.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

옵션 2 - 부팅하기 전에 Esc 를 누를 수 있습니다.

/etc/default/grub 파일을 변경하고 Esc에 충돌하는 3초 시간 제한을 관찰하여 비슷한 동작을 경험할 수 있습니다.

다음 두 줄을 주석으로 처리합니다.

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

다음 줄을 추가합니다.

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

Ubuntu 12.04는 직렬 콘솔에 대한 액세스를 허용하지만 상호 작용 기능을 제공하지는 않습니다. 로그인: 프롬프트가 표시되지 않음

12.04에서 로그인을 가져오는 경우: 프롬프트:

  1. 다음 텍스트를 포함하는 /etc/init/ttyS0.conf라는 파일을 만듭니다.

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. 시작에 게티를 시작하도록 요청

    sudo start ttyS0
    

Ubuntu 버전에 대한 직렬 콘솔을 구성하는 데 필요한 설정은 여기에서 찾을 수 있습니다.

Ubuntu 복구 모드

추가 복구 및 클린 업데이트 옵션은 GRUB를 통해 Ubuntu에 사용할 수 있습니다. 그러나 이러한 설정은 그에 따라 커널 매개 변수를 구성하는 경우에만 액세스할 수 있습니다. 이 커널 부팅 매개 변수를 구성하지 않으면 복구 메뉴가 Azure 직렬 콘솔이 아닌 Azure Diagnostics 전송됩니다. 다음 단계에 따라 Ubuntu 복구 메뉴에 액세스할 수 있습니다.

부팅 프로세스 중단 및 GRUB 액세스 메뉴

Ubuntu에 대한 고급 옵션을 선택하고 Enter 키를 누릅니다.

스크린샷은 Ubuntu에 대한 고급 옵션이 선택된 직렬 콘솔을 보여줍니다.

표시되는 줄 선택(복구 모드) 은 Enter 키를 누르지 않고 "e"를 누릅니다.

스크린샷은 복구 모드 버전이 선택된 직렬 콘솔을 보여줍니다.

커널을 로드할 줄을 찾고 마지막 매개 변수 nomodesetdestination=ttyS0으로 대체합니다.

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

스크린샷은 변경된 값이 있는 직렬 콘솔을 보여줍니다.

Ctrl-x를 눌러 커널을 시작하고 로드합니다. 모든 것이 잘 진행되면 다른 복구 옵션을 수행하는 데 도움이 될 수 있는 이러한 추가 옵션이 표시됩니다.

스크린샷은 추가 복구 옵션을 제공하는 복구 메뉴의 직렬 콘솔을 보여줍니다.

Red Hat GRUB 구성

Red Hat 7.4+ GRUB 구성

이러한 버전의 기본 /etc/default/grub 구성이 적절하게 구성됨

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

SysRq 키 사용

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 7.2 및 7.3 GRUB 구성

수정할 파일은 /etc/default/grub이며 기본 구성은 다음 예제와 같습니다.

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

/etc/default/grub에서 다음 줄을 변경합니다.

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

또한 다음 줄을 추가합니다.

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub은 이제 다음 예제와 유사하게 표시됩니다.

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

를 사용하여 grub 구성 완료 및 업데이트

grub2-mkconfig -o /boot/grub2/grub.cfg

SysRq 커널 매개 변수를 설정합니다.

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

또는 셸에서 또는 실행 명령을 통해 한 줄을 사용하여 GRUB 및 SysRq를 구성할 수 있습니다. 다음 명령을 실행하기 전에 파일을 백업합니다.

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Red Hat 6.x GRUB 구성

수정할 파일은 /boot/grub/grub.conf입니다. 값은 timeout GRUB가 표시되는 기간을 결정합니다.

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

마지막 줄 터미널 –-timeout=5 직렬 콘솔계속하려면 아무 키나 누르기를 표시하는 5초의 프롬프트를 추가하여 GRUB 시간 제한을 더욱 높입니다.

스크린샷은 출력이 있는 콘솔을 보여줍니다.

Esc 키를 누를 필요 없이 구성된 timeout=15에 대한 GRUB 메뉴가 화면에 표시됩니다. 브라우저에서 콘솔을 클릭하여 메뉴를 활성화하고 필요한 커널을 선택해야 합니다.

스크린샷은 두 가지 Linux 옵션이 있는 콘솔을 보여줍니다.

Suse

SLES 12 sp1

공식 문서에 따라 YaST 부트로더를 사용합니다 .

또는 다음 매개 변수를 /etc/default/grub에 추가/변경합니다.

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

grub.cfg 다시 만들기

grub2-mkconfig -o /boot/grub2/grub.cfg

SLES 11 SP4

직렬 콘솔이 나타나고 부팅 메시지가 표시되지만 로그인은 표시되지 않습니다. 프롬프트

VM에 ssh 세션을 열고 다음 줄을 주석 처리 해제하여 /etc/inittab 파일을 업데이트합니다.

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

다음으로 명령을 실행합니다.

telinit q

GRUB를 사용하도록 설정하려면 /boot/grub/menu.lst를 다음과 같이 변경해야 합니다.

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

이 구성을 사용하면 아무 키나 누르 기 메시지가 콘솔에 5초 동안 계속 표시될 수 있습니다.

그런 다음, 추가 5초 동안 GRUB 메뉴를 표시합니다. 아래쪽 화살표를 누르면 카운터를 인터럽트하고 부팅하려는 커널을 선택하여 루트 암호를 설정해야 하는 단일 사용자 모드에 키워드(keyword) 단일을 추가합니다.

init=/bin/bash 명령을 추가하면 커널이 로드되지만 init 프로그램이 bash 셸로 대체됩니다.

암호를 입력하지 않고도 셸에 액세스할 수 있습니다. 그런 다음, Linux 계정의 암호를 업데이트하거나 다른 구성을 변경할 수 있습니다.

커널을 bash 프롬프트에 강제 적용

GRUB에 액세스하면 초기화 프로세스를 중단할 수 있습니다. 이 상호 작용은 많은 복구 프로시저에 유용합니다. 루트 암호가 없으며 단일 사용자에게 루트 암호가 있어야 하는 경우 init 프로그램을 bash 프롬프트로 바꾸는 커널을 부팅할 수 있습니다. 이 인터럽트는 커널 부팅 라인에 init=/bin/bash를 추가하여 수행할 수 있습니다.

스크린샷은 업데이트된 부팅 라인이 있는 콘솔을 보여줍니다.

명령을 사용하여 /(루트) 파일 시스템 RW 다시 탑재

mount -o remount,rw /

스크린샷은 다시 탑재 작업이 있는 콘솔을 보여줍니다.

이제 루트 암호 변경 또는 다른 많은 Linux 구성 변경 작업을 수행할 수 있습니다.

스크린샷은 루트 암호 및 기타 구성을 변경할 수 있는 콘솔을 보여줍니다.

를 사용하여 VM 다시 시작

/sbin/reboot -f

단일 사용자 모드

또는 단일 사용자 또는 응급 모드에서 VM에 액세스해야 할 수 있습니다. 화살표 키를 사용하여 부팅하거나 중단하려는 커널을 선택합니다. 커널 부팅 라인에 키워드(keyword) 단일 또는 1을 추가하여 원하는 모드로 전환합니다. RHEL 시스템에서 rd.break를 추가할 수도 있습니다.

단일 사용자 모드에 액세스하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.

GRUB에서 선택한 OS 화면을 부팅하는 *Ubuntu 항목의 스크린샷.

다음 단계

Azure 직렬 콘솔에 대해 자세히 알아보기

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.