다음을 통해 공유


Linux 가상 머신이 GRUB 구조로 부팅

참고

이 문서에서 참조하는 CentOS는 Linux 배포판이며 EOL(수명 종료)에 도달합니다. 사용을 고려하고 그에 따라 계획하십시오. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.

이 문서에서는 GRUB 구조 문제를 일으키는 여러 조건에 대해 설명하고 문제 해결 지침을 제공합니다.

부팅 프로세스 중에 부팅 로더는 Linux 커널을 찾아 부팅 컨트롤을 전달하려고 시도합니다. 이 핸드오프를 수행할 수 없는 경우 VM(가상 머신)이 GRUB 구조 콘솔에 들어갑니다. GRUB 복구 콘솔 프롬프트는 Azure 직렬 콘솔 로그에 표시되지 않지만 Azure 부팅 진단 스크린샷에 표시될 수 있습니다.

GRUB 구조 문제 식별

Azure Portal VM 부팅 진단 페이지에서 부팅 진단스크린샷을 봅니다. 이 스크린샷은 GRUB 복구 문제를 진단하고 부팅 오류로 인해 문제가 발생하는지 확인하는 데 도움이 됩니다.

다음 텍스트는 GRUB 구조 문제의 예입니다.

error: file '/boot/grub2/i386-pc/normal.mod' not found.  
Entering rescue mode...  
grub rescue>

오프라인에서 GRUB 구조 문제 해결

  1. GRUB 구조 문제를 해결하려면 구조/복구 VM이 필요합니다. vm 복구 명령을 사용하여 영향을 받는 VM의 OS 디스크 복사본이 연결된 복구 VM을 만듭니다. chroot를 사용하여 복구 VM에 OS 파일 시스템의 복사본을 탑재합니다.

    참고

    또는 Azure Portal 사용하여 구조 VM을 수동으로 만들 수 있습니다. 자세한 내용은 Azure Portal 사용하여 OS 디스크를 복구 VM에 연결하여 Linux VM 문제 해결을 참조하세요.

  2. GRUB 구조 문제를 식별합니다. 다음 GRUB 구조 문제 중 하나가 발생하면 해당 섹션으로 이동하여 resolve.

  3. GRUB 구조 문제가 해결된 후 다음 작업을 수행합니다.

    1. 복구/복구 VM에서 파일 시스템의 복사본을 분리합니다.

    2. az vm repair restore 명령을 실행하여 복구된 OS 디스크를 VM의 원래 OS 디스크로 교환합니다. 자세한 내용은 Azure Virtual Machine 복구 명령을 사용하여 Linux VM 복구의 5단계를 참조하세요.

    3. VM이 Azure 직렬 콘솔을 살펴보거나 VM에 연결하여 시작할 수 있는지 확인합니다.

  4. 전체 /boot 파티션 또는 기타 중요한 콘텐츠가 누락되어 복구할 수 없는 경우 백업에서 VM을 복원하는 것이 좋습니다. 자세한 내용은 Azure Portal Azure VM 데이터를 복원하는 방법을 참조하세요.

자세한 오류, 가능한 원인 및 해결 방법은 다음 섹션을 참조하세요.

참고

다음 섹션에 언급된 명령에서 를 해당 OS(운영 체제) 디스크 디바이스로 바꿉 /dev/sdX 니다.

오류: 알 수 없는 파일 시스템

다음 스크린샷은 오류 메시지를 보여줍니다.

grub 알 수 없는 파일 시스템 오류의 스크린샷

이 오류는 다음 문제 중 하나와 관련될 수 있습니다.

/boot 파일 시스템 손상 수정

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다.

  2. Azure Linux의 파일 시스템 손상 오류 문제 해결을 참조하여 해당 /boot 파티션의 손상 문제를 resolve.

  3. 오프라인으로 GRUB 복구 문제 해결 의 3단계로 이동하여 OS 디스크를 교환합니다.

GRUB 다시 설치 및 GRUB 구성 파일 다시 생성

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다. 구조/복구 VM에서 /및 /boot를 포함하여 필요한 모든 파일 시스템을 탑재한 다음 , chroot 환경을 입력합니다.

  2. 다음 명령 중 하나를 사용하여 GRUB를 다시 설치하고 해당 GRUB 구성 파일을 다시 생성합니다.

    • UEFI가 없는 RHEL/CentOS/Oracle 7.x/8.x Linux VM(BIOS 기반 - Gen1)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • UEFI를 사용하는 RHEL/CentOS/Oracle 7.x/8.x Linux VM(Gen2)

      yum reinstall grub2-efi-x64 shim-x64
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
      

      VM이 CentOS를 실행하는 경우 를 grub.cfg 파일 절대 경로 /boot/efi/EFI/centos/grub.cfg에서 로 바꿉 redhatcentos 있습니다.

    • SLES 12/15 Gen1 및 Gen2

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Ubuntu 18.04/20.04

      grub-install /dev/sdX
      update-grub
      
  3. 오프라인으로 GRUB 복구 문제 해결 의 3단계로 이동하여 OS 디스크를 교환합니다.

오류 15: 파일을 찾을 수 없음

다음 스크린샷은 오류 메시지를 보여줍니다.

grub 오류 15 파일을 찾을 수 없는 스크린샷

이 문제를 resolve 다음 단계를 수행합니다.

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다. 구조/복구 VM에서 /및 /boot 를 포함하여 필요한 모든 파일 시스템을 탑재한 다음 , chroot 환경을 입력합니다.

  2. /boot 파일 시스템 콘텐츠를 검사하고 누락된 내용을 확인합니다.

  3. GRUB 구성 파일이 없는 경우 GRUB를 다시 설치하고 GRUB 구성 파일을 다시 생성합니다.

  4. /boot 파일 시스템의 파일 권한이 정상인지 확인합니다. 동일한 Linux 버전을 실행하는 다른 VM을 사용하여 사용 권한을 비교할 수 있습니다.

  5. 전체 /boot 파티션 또는 기타 중요한 콘텐츠가 누락되어 복구할 수 없는 경우 백업에서 VM을 복원하는 것이 좋습니다. 자세한 내용은 Azure Portal Azure VM 데이터를 복원하는 방법을 참조하세요.

  6. 문제가 해결된 후 오프라인으로 GRUB 복구 문제 해결 의 3단계로 이동하여 OS 디스크를 교환합니다.

오류: '/boot/grub2/i386-pc/normal.mod' 파일을 찾을 수 없음

다음 스크린샷은 오류 메시지를 보여줍니다.

grub 오류 normal.mod를 찾을 수 없는 스크린샷

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 생성되지 않은 경우 오프라인으로 GRUB 구조 문제 해결 의 1단계를 수행하여 만듭니다. 구조/복구 VM에서 /및 /boot를 포함하여 필요한 모든 파일 시스템을 탑재한 다음 , chroot 환경을 입력합니다.

  2. 손상 오류로 인해 /boot 파일 시스템을 탑재할 수 없는 경우 /boot 파일 시스템 손상을 수정합니다.

  3. chroot 내에 있는 경우 /boot/grub2/i386-pc 디렉터리의 내용을 확인합니다. 콘텐츠가 누락된 경우 /usr/lib/grub/i386-pc에서 콘텐츠를 복사합니다. 이렇게 하려면 다음 명령을 사용합니다.

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. 파티션의 /boot 내용이 비어 있는 경우 다음 명령을 사용하여 다시 만듭니다.

    참고

    다음 단계는 UEFI가 없는 RHEL/CentOS/Oracle 7.x/8.x Linux VM에 적용됩니다(BIOS 기반 - Gen1).

    1. 크로트 프로세스에서 grub을 다시 설치합니다. 그에 따라 복구/구조 VM에 연결된 OS 디스크의 해당 복사본으로 바꿉 /dev/sd[X] 다.

      grub2-install /dev/sd[X]
      
    2. 리포지토리의 이름을 resolve 위해 유효한 DNS 항목이 있는지 확인 /etc/resolv.conf 합니다.

      cat /etc/resolv.conf
      
    3. 커널을 다시 설치합니다.

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. grub.cfg 파일을 Create.

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. OS 디스크를 교환하려면 GRUB 복구 문제 해결의 3단계를 오프라인 으로 진행합니다.

오류: 이러한 파티션 없음

다음 스크린샷은 오류 메시지를 보여줍니다.

이러한 파티션이 없는 grub 오류의 스크린샷

이 오류는 다음 시나리오 중 하나에서 RHEL 기반 VM(Red Hat, Oracle Linux, CentOS)에서 발생합니다.

  • /boot 파티션은 실수로 삭제됩니다.
  • /boot 파티션은 잘못된 시작 및 끝 섹터를 사용하여 다시 생성됩니다.

해결 방법: /boot 파티션 다시 만들기

/boot 파티션이 누락된 경우 다음 단계에 따라 다시 만듭니다.

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다.

  2. 다음 명령을 사용하여 파티션 테이블이 dos 또는 GPT 형식으로 만들어지는지 확인합니다.

    sudo fdisk -l /dev/sdX
    
    • Dos 파티션 테이블

      스크린샷은 dos 형식 파티션 테이블이 있는 부팅을 보여줍니다.

    • GPT 파티션 테이블

      스크린샷은 GPT 형식 파티션 테이블이 있는 부팅을 보여줍니다.

  3. 파티션 테이블에 파티션 테이블 형식으로 dos 가 있는 경우 dos 시스템에서 /boot 파티션을 다시 만듭니다. 파티션 테이블에 GPT 가 파티션 테이블 형식인 경우 GPT 시스템에서 /boot 파티션을 다시 만듭니다.

  4. 적절한 디스크를 사용하여 GRUB 부팅 로더가 설치되어 있는지 확인합니다. GRUB 다시 설치 및 GRUB 구성 파일을 다시 생성하여 설치 및 구성의 단계를 수행할 수 있습니다.

  5. OS 디스크를 교환하려면 GRUB 복구 문제 해결의 3단계를 오프라인 으로 진행합니다.

dos 시스템에서 /boot 파티션 다시 만들기

  1. 다음 명령을 사용하여 /boot 파티션을 다시 만듭니다.

    sudo fdisk /dev/sdX
    

    번째 및 마지막 섹터 및 파티션 형식(83)의 기본값을 사용합니다. 다음 출력과 같이 도구의 옵션을 사용하여 a /boot 파티션 테이블이 fdisk 부팅 가능한 것으로 표시되어 있는지 확인합니다.

    sudo fdisk /dev/sdc
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    Partition number (1,3,4, default 1): 1
    First sector (2048-134217727, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199):
    Using default value 2099199
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2, default 2): 1
    Hex code (type L to list all codes): 83
    Changed type of partition 'Linux' to 'Linux'
    
    Command (m for help): a
    Partition number (1,2, default 2): 1
    
    Command (m for help): p
    
    Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disk label type: dos
    Disk identifier: 0x000b7179
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *        2048     2099199     1048576   83  Linux
    /dev/sdc2         2099200   134217727    66059264   8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
  2. 누락된 /boot 파티션을 다시 만든 후 /boot 파일 시스템이 검색되었는지 여부를 검사. (누락된 /boot 파티션)에 대한 /dev/sdX1 항목을 볼 수 있어야 합니다.

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. 파티션을 다시 만든 후 /boot 파일 시스템이 표시되지 blkid 않으면 /boot 데이터가 더 이상 존재하지 않음을 의미합니다. /boot 파일 시스템을 다시 만든 다음( /etc/fstab / boot 항목에 있는 것과 동일한 UUID 및 파일 시스템 형식을 사용하여) 백업에서 콘텐츠를 복원해야 합니다.

GPT 시스템에서 /boot 파티션 다시 만들기

  1. 다음 명령을 사용하여 /boot 파티션을 다시 만듭니다.

    sudo gdisk /dev/sdX
    

    다음 출력과 같이 번째 및 마지막 섹터 및 파티션 형식 (8300)의 기본값을 사용합니다.

    sudo gdisk /dev/sdc
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    
    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}:
    Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}:
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdc: 134217728 sectors, 64.0 GiB
    Model: Virtual Disk
    Sector size (logical/physical): 512/4096 bytes
    Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 134217694
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   8300  Linux filesystem
       2         2050048       134215679   63.0 GiB    8E00
      14            2048           10239   4.0 MiB     EF02
      15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdc.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    
  2. 다음 명령을 사용하여 시스템에서 /boot 파일 시스템을 검색하는지 확인합니다.

    sudo blkid /dev/sdX1
    

    (누락된 /boot 파티션)에 대한 /dev/sdX1 항목을 볼 수 있어야 합니다.

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. 파티션을 다시 만든 후 /boot 파일 시스템이 표시되지 않으면 /boot 데이터가 더 이상 존재하지 않습니다. /etc/fstab /boot 항목에 있는 동일한 UUID를 사용하여 /boot 파일 시스템을 다시 만든 다음 백업에서 콘텐츠를 복원해야 합니다.

오류: 기호 'grub_efi_get_secure_boot'을(를) 찾을 수 없음

다음 스크린샷은 오류 메시지를 보여줍니다.

grub 오류 'grub_efi_get_secure_boot'을(를) 찾을 수 없습니다.

Linux 커널 버전 4.12.14(SLES 12 SP5에서 사용됨)는 보안 부팅 옵션을 지원하지 않습니다. 따라서 VM을 배포하는 동안 보안 부팅이 사용하도록 설정된 경우(즉, 보안 유형 필드가 신뢰할 수 있는 시작 가상 머신으로 설정됨) 가상 머신은 Gen2 VM 이미지에서 이 SUSE 커널 버전을 사용하여 시작하려고 할 때 콘솔을 통해 보안 부팅 오류를 생성합니다.

해결 방법

부팅 오류를 resolve 다음 단계를 수행합니다.

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다. /및 /boot를 비롯한 모든 필수 파일 시스템을 탑재한 다음 , chroot 환경을 입력합니다.

  2. chroot 환경에서 다음 YaST 명령을 실행합니다.

    yast2 bootloader
    
  3. 보안 부팅 지원 사용 옵션에서 "x"를 지우고 F10을 선택하여 변경 사항을 저장합니다.

    SUSE 콘솔의 YaST2 부팅 로더 설정 스크린샷

  4. 오프라인으로 GRUB 복구 문제 해결의 3단계에 따라 OS 디스크를 교환합니다.

기타 GRUB 구조 오류

다음 스크린샷은 오류 메시지를 보여줍니다.

다른 grub 구조 문제의 스크린샷.

이러한 종류의 오류는 다음 시나리오 중 하나에서 트리거됩니다.

  • GRUB 구성 파일이 없습니다.
  • 잘못된 GRUB 구성이 사용됩니다.
  • /boot 파티션 또는 해당 콘텐츠가 없습니다.

이 오류를 resolve 다음 단계를 수행합니다.

  1. 구조/복구 VM이 만들어졌는지 확인합니다. 만들어지지 않은 경우 오프라인으로 GRUB 복구 문제 해결 의 1단계에 따라 VM을 만듭니다. /및 /boot를 비롯한 모든 필수 파일 시스템을 탑재한 다음 , chroot 환경을 입력합니다.

  2. /etc/default/grub 구성 파일이 구성되어 있는지 확인합니다. 보증된 Azure Linux 이미지에는 이미 필요한 구성이 있습니다. 자세한 내용은 다음 문서를 참조하세요.

  3. GRUB를 다시 설치하고 GRUB 구성 파일을 다시 생성합니다.

    참고

    누락된 파일이 /boot/grub/menu.lst인 경우 이 오류는 이전 OS 버전(RHEL 6.x, Centos 6.x 및 Ubuntu 14.04)에 대한 오류입니다. GRUB 버전 1이 해당 시스템에서 대신 사용되므로 명령이 다릅니다. GRUB 버전 1은 이 문서에서 다루지 않습니다.

  4. 전체 /boot 파티션이 누락된 경우 오류: 이러한 파티션 없음의 단계를 수행합니다.

  5. 문제가 해결된 후 오프라인으로 GRUB 복구 문제 해결 의 3단계로 이동하여 OS 디스크를 교환합니다.

다음 단계

특정 부팅 오류가 GRUB 복구 문제가 아닌 경우 추가 문제 해결 옵션은 Azure Linux Virtual Machines 부팅 오류 문제 해결을 참조하세요.

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

타사 연락처 고지

Microsoft는 이 항목에 대한 추가 정보를 찾는 데 도움이 되는 타사 연락처 정보를 제공합니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보장하지 않습니다.

도움을 요청하십시오.

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