소프트 RAID 1에 GRUB를 올바르게 설치하는 방법은 무엇입니까?

소프트 RAID 1에 GRUB를 올바르게 설치하는 방법은 무엇입니까?

내 설정에는 각각 다음과 같이 포맷된 두 개의 디스크가 있습니다.

(GPT)
1)  1MB   BIOS_BOOT
2)  300MB LINUX_RAID   
3)  *     LINUX_RAID   

부팅 파티션은 /dev/md0에 매핑되고 rootfs는 /dev/md1에 매핑됩니다. md0은 ext2를 사용하여 포맷되고 md1은 XFS를 사용하여 포맷됩니다. (포맷은 SD가 아닌 MD 장치에서 해야 한다는 것을 알고 있습니다. 이것이 잘못된 경우 알려주세요.)

한 드라이브에 장애가 발생해도 다른 드라이브가 계속 부팅되도록 GRUB를 올바르게 설정하려면 어떻게 해야 합니까? 확장하면 교체 드라이브에도 자동으로 GRUB가 포함되나요? 물론 그게 가능하다면 말이다.

답변1

/dev/sda두 디스크가 모두 AND 인 경우 /dev/sdbgrub-install /dev/sdaAND를 동시에 실행합니다 grub-install /dev/sdb. 그런 다음 두 드라이브를 독립적으로 부팅할 수 있습니다.

Grub 구성이 디스크를 이와 같이 하드코딩하지 않고 (hd0)대신 부팅 및 루트 파일 시스템의 UUID를 검색하는지 확인하세요.

grub-installGrub이 두 개의 디스크를 RAID-1 배열로 선언하여 두 디스크에 모두 자동으로 쓰는 것을 지원한다는 사실을 몰랐습니다 . 이는 grub-install디스크를 교체하는 경우 RAID 어레이에 새 구성원을 추가하는 것 외에 추가로 수행해야 하는 작업이 있음을 의미합니다.

답변2

다른 답변(제안 grub-install /dev/sdagrub-install /dev/sdb)은 레거시 BIOS로 부팅할 때 작동하지만 UEFI를 사용할 때는 작동하지 않습니다. 1 (UEFI로 부팅하는지 확인하려면 UEFI가 /sys/firmware/efi있는지 확인하세요.)


UEFI를 사용하는 경우, ESP(EFI 시스템 파티션)는 소프트웨어 RAID가 초기화되기 전에 부팅에 사용되므로 소프트웨어 RAID의 일부가 될 수 없습니다.

두 디스크 모두에 동일한 콘텐츠가 있어야 하지만 RAID의 일부가 아닌 두 개의 별도(FAT32) 파티션이 됩니다.

첫 번째 ESP가 /dev/sda1(디렉토리를 포함하는 FAT32 파티션 EFI)이라고 가정하면 두 번째 디스크(예: /dev/sdb)는 중복성을 위해 동일한 위치에 파티션과 콘텐츠가 있어야 합니다.

일반적으로 기본적으로 /dev/sda1하나는 설치되고 /boot/efi다른 하나는 설치되지 않습니다(또는 방금 RAID를 설정한 경우에는 있을 수도 있습니다). FAT32 파티션 /dev/sdb1과 일치하는 파티션이 있는지 확인 /dev/sda1하고 해당 파티션에 내용을 복사하세요.

이것UEFI에 대한 Debian Wiki 항목/boot/efi2두 번째 것을 설치 하고 후크를 사용하여 자동으로 복사하는 것이 좋습니다 update-grub.

두 번째 마운트 지점( )을 생성 mkdir /boot/efi2하고 이에 따라 두 번째 ESP를 추가 해야 합니다 /etc/fstab(Debian Wiki에서는 이것을 추가하는 것이 좋습니다 nofail). 예를 들어:

# You can find the partitions UUIDs using blkid
UUID=7F49-3985  /boot/efi       vfat    umask=0077,errors=remount-ro,nofail      0       0
UUID=8D57-95E5  /boot/efi2      vfat    umask=0077,errors=remount-ro,nofail      0       0

그런 다음 후크를 추가 /etc/grub.d/90_copy_to_boot_efi2하고 실행 가능하게 만듭니다. 이 작업은 다음 실행 시 실행됩니다 update-grub. 다음은 Debian Wiki 스크립트를 약간 수정한 버전입니다:

#!/bin/sh
set -e

if mountpoint -q /boot/efi && mountpoint -q /boot/efi2 ; then
        rsync -t --recursive --delete /boot/efi/ /boot/efi2/
fi
exit 0

참고(실패한 경우 sda):sda오류가 발생하여 디스크를 교체해야 한다고 가정하면 다음을 기억하세요.그 후크를 제거, 내용을 /boot/efi2새 디스크에 복사합니다 /boot/efi. 그렇지 않으면 /boot/efi(새 디스크에서) 비어 있는 및당신의피복재 /boot/efi2지워질 것이다( rsync --recursive --delete무자비할 수 있습니다).


1 : 이 내용은 널리 문서화되지 않은 것 같습니다.아치 리눅스 위키), 그러나 EFI Grub을 사용하여 설치하는 경우 이 INSTALL_DEVICE매개변수(예 /dev/sda: )는 무시됩니다. 실제로 grub-install /dev/non_existent_device실패하지도 않습니다.

# grub-install /dev/non_existent_device
Installing for x86_64-efi platform.
Installation finished. No error reported.

답변3

나는 과거에 꽤 많은 서버에서 이 작업을 수행했으며 때때로 문제를 발견했습니다. 일반적으로 내가 하는 일은 다음 명령을 실행하는 것입니다.

sudo grub-install /dev/sdb
sudo update-grub /dev/sdb

내가 겪고 있는 문제는 일반적으로 다음과 같은 오류 메시지를 표시합니다.

update-grub … update-grub failed with no such disk …

이 문제를 해결하기 위해 다음을 실행했습니다.

sudo mv /boot/grub/device.map /boot/grub/device.map.old 
sudo update-grub 

이로 인해 문제가 해결된 것 같습니다. 어떤 경우에는 테스트를 위해 제거 /sdv/sda하고 /dev/sdb부팅하는 데 사용했지만 이는 이상적이지 않으며 대부분의 프로덕션 환경에서는 불가능할 가능성이 높습니다!

답변4

CentOS 5 및 CentOS 6을 설치한 경험에 따르면 설치 단계에서 RAID-1을 구성했습니다. 설치 시 이를 수행할 수 있는 옵션이 제공됩니다. 결과는 다음과 같습니다. 1. /dev/sda1을 1GB로 RAID 파티션으로 정의합니다. 2. /dev/sdb1을 1GB로 RAID 파티션으로 정의합니다. 3. /dev로 구성된 RAID 장치 /dev/md0 및 /dev를 생성합니다. /sda1 /sdb1 4. /dev/md0을 사용하여 /boot 파티션을 생성합니다. 5. 추가 파티션을 생성하려면 1~3단계를 사용합니다. 6. 지침에 따라 5단계에서 생성된 파티션에 LVM을 구현합니다.

초기 시스템 부팅 후 grub.conf에서 /dev/sda1 항목을 /dev/md0으로 변경했습니다. 그런 다음 flashimage 줄(hd0,0)에 대한 항목을 복사하고 시작 부분에 #을 추가하고 (hd0,0)을 (hd1,0)으로 변경했습니다. grub을 /dev/sdb에 설치하는 방법은 위의 답변을 확인하고 따르십시오. 부팅 마운트 지점이 /dev/md0을 사용하도록 fstab을 수정합니다. 이렇게 하면 yum 업데이트를 수행하고 /boot 파티션에 일부 업데이트가 있을 때 /dev/sda1 및 /dev/sdb1에 기록됩니다. /dev/sda 하드 드라이브에 오류가 발생하면 복구 부팅을 사용하여 (hd0,0) 줄을 주석 처리하고 (hd1,0) 줄의 주석 처리를 제거해야 합니다. 시스템이 부팅 가능해야 합니다.

관련 정보