카테고리 보관물: Server

Server

우분투 서버, gpt 파티션 테이블, mdadm, grub 부팅 실패 하나를 ext4로

기본 작업 시스템 세부 사항 :

Ubuntu 12.04 서버 CD를 사용하여 서버를 설치했습니다.

디스크가 4 개 있습니다. 모든 디스크 에서이 하우투 와 비슷한 것을 수행 했습니다 .

  • 2GB 스왑 파티션을 만들었습니다
  • 256GB / boot 파티션을 만들었습니다
  • 64GB RAID10 파티션 생성 (루트 용)
  • 나머지 공간을 차지하는 큰 RAID10 파티션을 만들었습니다.

부팅을 ext3으로 포맷했습니다. 루트 및 큰 파티션에 RAID10을 설정했습니다. 루트 하나를 ext4로 포맷했습니다. 큰 볼륨에 논리 볼륨을 만들어 ext4로 포맷했습니다.

결과 시스템이 정상적으로 작동하고 부팅됩니다.

문제 세부 사항 :

그런 다음 실패 절차를 문서화하기로 결정했습니다. 첫 번째 단계로 grub을 다시 설치하기로 결정했습니다.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

따라서 실패한 것처럼 보이지만 포기하고 변경하지 않은 것처럼 보입니다. 그래서 나는 재부팅했다. 부팅이 실패했습니다. 약 4 줄 아래로 깜박이는 커서가있는 검은 색 화면이 나타납니다. “Shift”를 누른 상태로 부팅하면 커서 왼쪽에 “GRUB”이라는 단어가 표시되지만 대화식 프롬프트는 표시되지 않습니다.

이 시점에서 boot-repair-disk 를 사용하여이 보고서를 생성했습니다.
http://paste.ubuntu.com/966531/

위의 보고서에서 부트 로더가 core.img의 올바른 섹터를 가리 키지 않는다고 말합니다. (sda는 가상 CD입니다. sdb는 부팅 디스크입니다. sdc는 sdb의 미러이지만 부트는 미러링되지 않습니다. 별도의 관련되지 않은 파티션이 있고 ext3으로 포맷되었습니다. sdd 및 sde에는 부팅 공간이 있지만 포맷되지 않았습니다)

그런 다음 우분투 서버 CD에서 부팅하고 복구 시스템을 시작한 다음 오류없이 완료된 다음 명령을 실행했습니다 (sda는 가상 CD이고 b, c, d, e는 a, b, c 인 디스크입니다) 이전 grub 명령에서, d) :

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

이 시점에서 boot-repair-disk 를 사용하여이 보고서를 생성했습니다.
http://paste.ubuntu.com/966561/

위의 보고서에서 core.img에 대한 문제는 사라졌습니다. 올바른 섹터를 가리키는 것 같습니다.

이제 부팅을 시도하면 grub 프롬프트가 나타납니다. “set”을 실행하면 루트가 발견되어 설정됩니다. “ls /”를 실행하면 vmlinuz 커널 파일을 포함하여 RAID 볼륨에서 루트 디렉토리를 볼 수 있습니다. “ls / vmlinuz”를 입력하면 “오류 : 파일을 찾을 수 없습니다.”라고 표시됩니다. “linux”명령을 사용하여 커널을로드하려고하면 같은 오류가 발생합니다. “ls -l /”를 사용하면 vmlinuz 파일이 표시되지 않습니다.

다음과 같은 경우에 대한 자세한 정보 :

/boot/grub/grub.cfg도 없다는 것을 알았으므로

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

그러나 문제는 여전히 남아 있습니다.

“gptsync”도구를 사용하면이 동작에는 아무런 변화가 없습니다.

boot-repair-disk는 EFI 지원 BIOS로 부팅하기 때문에 시스템을 복구하지 않습니다. 나는 이것을 간단히 살펴 보았지만 그것이 어떻게 작동하는지 모르겠습니다. 부팅 옵션에서 UEFI 셸을 찾았지만 그에 대한 정보가 없으며 시작을 변경하는 방법 (예 : 해당 EFI 셸에서 CD 부팅)을 보지 못했습니다.

이 페이지 도 읽었 지만 우분투에는 “grub”명령이 없으므로 정확히 따라갈 수 없습니다. 나는 단순히 그 명령을 설치할 수는 있지만 우분투 설치 프로그램이 다른 설정이 아닌 설치를 어떻게 관리했는지 궁금합니다. 차단 목록을 사용 했습니까?

다음은 boot-repair-disk 에서 부팅 하는 동안 parted의 출력입니다 (여기서 sdb는 첫 번째 하드 디스크이고 디스크에서 부팅 할 때 sda이며 두 번째 붙여 넣기 링크에서 “boot”가 “bios_grub”로 변경됨).

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

다음은 비교할 수없는 관련없는 오래된 가상 머신입니다 ( boot-repair-disk에 익숙하지 않은 사람을위한 ) :
http://paste.ubuntu.com/966799/

위의 grub-mkconfig를 실행하고 “bios_grub”을 “boot”로 다시 설정 한 후 문제 시스템의 최신 붙여 넣기가 있습니다.
http://paste.ubuntu.com/966808/

두 가지를 비교하면 흥미로운 것처럼 보입니다.

sdb2: __________________________________________________________________________

File system:
Boot sector type:  Grub2's core.img
Boot sector info:
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info:
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

RAID에 부팅 파일이 있고 sdb2가 포맷되지 않은 것 같습니다. (이것에도 불구하고 grub-install을 실행하기 전에 시스템이 부팅되었습니다). 복구 CD에서 “mount -t ext3 / dev / sdb2 / boot”가 실패합니다. 그러나 grub은 파티션 2를 명시 적으로 사용하기 때문에 (bios_grub을 설정하는 parted 명령의 2) 혼동 될 수 있습니다.

그래서 나는 이런 식으로했다 :

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

그런 다음 다시 부팅하면 검은 화면이 다시 나타납니다.
http://paste.ubuntu.com/966848/

따라서이 시점에서 내 생각에 bios_grub을 설정하면 grub이 MBR에 설치되지 않고 ext3의 ext3 파일 시스템이 아니라 파티션 자체에 EFI 인 것처럼 파티션 자체에 설치됩니다. 거기에 ext3 파일 시스템. EFI에 대한 나의 짧은 독서에서, EFI는 첫 번째 파티션이 부팅이라고 가정하지만, 첫 번째 파티션은 스왑이며, 첫 번째 파티션은 스왑이며, 마운트 할 수없는 것이 아니라 FAT이어야합니다. 감각, 나는 단서없이 여전히 완전히 길을 잃었습니다. [편집 : 이제 단서가 있습니다 … 업데이트를 위해 조금 건너 뛰십시오]

이제 boot-repair-disk 에서 복구를 클릭하면 다른 것을 묻습니다. 마지막으로 오류가 창 아래에 숨겨져 있었고 다른 것을 드래그하여보아야했습니다. 이번에는 기본 창이 사라지고 새 창이 나타납니다.

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

그래서 예를 클릭하면 성공적으로 복구되었다고 말하고 다른 페이스트를 만듭니다 :
http://paste.ubuntu.com/966862/

그러나 여전히 깜박이는 커서가있는 검은 색 화면이 있습니다.

이제 내 이론은 부팅이 0-63의 섹터에 있었던 지방 코드가 아닌 비 EFI에 의해 덮어 씌워 졌다는 것입니다. 운 좋게도이 페이지에서 매우 분명한 진술에 부딪 쳤는데, 아마도이 모든 것이 의미하는 바에 대한 나의 이해를 완성했을 것입니다. 그리고 나서 나는 Jeremy가 답을 게시했는데 이것이 사실이라면 이것이 누락 된 핵심 개념임을 확인시켜줍니다.
http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

질문 :

무슨 일이야? grub이 부팅되지 않는 이유는 무엇입니까? 왜 “파일을 찾을 수 없습니다”라고 표시됩니까?

왜 parted (Ubuntu 설치 프로그램에서 설정하지 않은)로 설정 한이 설정없이 GRUB을 설치하고 싶지 않습니까? 루트에 RAID가 있고 파티션 테이블이 GPT이므로 LVM이나 소프트웨어 RAID에없는 별도의 / boot라고 생각했습니다.

Ubuntu CD 설치 프로그램은이 문제와 bios_grub 설정없이 어떻게 설치합니까?

또한 EFI 사용을 고려할 것입니다. 이것이 좋은 아이디어이고 그것을 설정하는 표준적인 방법이 있다면, 나는 항상 새로운 것을 배우기 위해 노력합니다.

모든 질문에 대답하지 않아도 행복하게 해줄 수있는 가장 빠른 대답은 설치 CD와 동일한 방식으로 부트 로더를 수정하기 위해 복구 CD에서 실행할 수있는 일련의 명령 일 것입니다. CD 대신 부팅 시스템으로 실행할 수 있다면 더 좋을 것입니다.



답변

해결책은 / boot 파티션과 동일하지 않은 bios_grub 파티션을 사용하는 것입니다.

기본적으로 bios_grub 파티션은 1MiB이며 bios_grub으로 플래그되어야합니다. 내 디스크의 첫 번째 파티션입니다. 파티션 2가 실제로 / boot가 부분적으로 제안한 것처럼 정확하지 않은 경우 이는 정확하지 않으므로 다른 1MiB 파티션을 만들어야합니다.

GPT 및 GRUB2를 사용하면 최소 파일 시스템에는 bios_grub, root, swap의 세 가지 파티션이 있습니다. (스왑이 필요한지 확실하지 않음)

단순히 “grub-install”을 실행 한 후 왜 grub이 부팅되지 않습니까?

알 수 없음 … 포함 할 수 없어서 작동하지 않는다고 명확하게 표시하면 아무 것도 수정하지 않을 것이라고 생각할 것입니다.

왜 “파일을 찾을 수 없습니다”라고 표시됩니까?

/ vmlinuz는 부팅 파티션을 사용하는 심볼릭 링크이며 부팅 파티션이 손상되었습니다. bios_grub 코드는 ext3 구조 위에 작성되었습니다. 이것은 아마도 / boot가 마운트되지 않았고 grub 파일이 실제로 루트 시스템에 있고 커널을 포함하지 않았 음을 의미합니다.

왜이 설정없이 GRUB을 설치하고 싶지 않습니까?

GPT 파티션 테이블에는 MBR과 달리 부트 로더를위한 공간이 없습니다. 따라서 부트 코드를 보유 할 특정 파티션을 작성해야합니다. “grub-install”을 실행하기 전에 다음 명령으로이 파티션을 지정하십시오 :

    parted /dev/sda set 1 bios_grub on

필요한 것은 별도의 / boot라고 생각했습니다. Ubuntu CD 설치 프로그램은 bios_grub 설정없이 어떻게 설치합니까?

이 요구 사항은 Ubuntu 설치 프로그램에 필요한 모든 것 같지만 쉽게 고장난 비표준 시스템을 만듭니다.

GRUB에 “이 GPT 파티션 레이블에 BIOS 부트 파티션 이 없습니다 “라고 표시되면 / boot가 아니라 bios_grub 파티션을 의미합니다.


답변