저는 HomeServer에서 Gentoo를 사용하고 있습니다. 내 HDD는 mdadm을 통해 미러링되는 raid1입니다.
내 질문은 /boot 파티션을 올바르게 부팅하는 방법입니다.
/dev/md1 consists of /dev/sdc2 & /dev/sdd2 mounted on /boot
내 시스템에는 grub.cfg
uuid가 있지만 /dev/md1
물론 부팅 시 어레이가 아직 준비되지 않았습니다.
가장 쉬운 방법은 /boot 파티션에 대한 공격을 취소하는 것이지만, 제가 원하는 것은 아닙니다.
그렇다면 공격대원의 UUID는 어떻게 알 수 있을까요? ls -l /dev/disk/by-uuid
uuid만 표시됩니다 /dev/md1
. 디스크 어레이를 마운트 해제하면 UUID를 얻기 위해 마운트할 수 없습니다.mount: unknown filesystem type 'linux_raid_member'
그렇다면 Grub2가 이러한 디스크를 부팅하도록 하려면 어떻게 해야 합니까? Grub2가 RAID에 들어가기 전에 내용을 확인할 수 있습니까? (실제로는 ext2입니다).
gpt 파티션 테이블을 사용한다는 점을 추가해야 하므로 /dev/sdc1 and /dev/sdd1
bios_grub 파티션을 호스팅하는 두 드라이브 모두에 작은 파티션이 있습니다. 그 ATM은 급습된 ATM이 아닙니다.
Giles의 답변 아래 의견에서 지적했듯이 내 문제는 남아 있습니다. Grub이 장치를 찾을 수 없습니다. 알려주세요.
error: no such device: 9f81a-(device uuid)-5580.
entering rescue mode...
grub rescue>
그 후 몇 줄을 추가했습니다.
insmod part_msdos
insmod part_gpt
insmod raid
insmod mdraid
루트를 정의하는 줄 바로 위에 있는 grub.cfg로 복사했는데 root='(md0)'
여전히 같은 오류가 발생합니다.
좀 더 조사해본 결과 이것이 uuid 관련 버그인 것 같습니다.
# grub-probe -d --target=fs_uuid /dev/md1
9f81a35d-0813-481f-9ae0-e4fba57c5580
# blkid
/dev/sdc2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="88826c5e-d12b-307d-6e54-556d1ebb2458" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/sdd2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="15150fb2-5066-edba-d39b-08b63219453c" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/md1: UUID="9f81a35d-0813-481f-9ae0-e4fba57c5580" TYPE="ext2"
(I cut away the other drives here)
보시다시피 두 파티션의 UUID가 동일했기 때문에 grub.cfg에서 드라이브의 UUID를 편집하고 grub-install /dev/sdx
다시 수행했지만 여전히 "이전" /dev/md1 UUID에 대한 오류가 발생했습니다.
답변1
이것젠투 위키Grub 1과 Grub 2에 대한 정보가 있습니다. Grub 1과 Grub 2에서는 상황이 완전히 다릅니다. Grub 1은 RAID에 대해 아무것도 모르지만 RAID-1 장치 중 하나를 읽어서 RAID-1 장치에서 읽기를 가짜로 만들 수 있습니다. 디스크(1.1 또는 1.2가 아닌 0.9 또는 1.0 mdraid 슈퍼블록 형식이 필요함) Grub 2는 기본적으로 Linux mdraid 볼륨을 지원합니다.
Grub 2는 세 단계로 작동합니다(참조:여기자세한 내용은):
- 부트 섹터.
install-grub
에서 생성된 핵심 이미지로/boot/grub/core.img
, 구조 메시지를 표시하고 모듈을 로드할 수 있지만 그 이상은 아닙니다.- 로드 가능한 모듈이 있는 전체 시스템은 일반적으로 (모듈을 통해
normal
) 에 설명된 부팅 메뉴를 표시합니다/boot/grub/grub.cfg
.
코어 이미지 생성
실행하여 grub-install /dev/sda
코어 이미지를 빌드하고 /boot/grub
모듈 파일을 채웁니다. grub-install
또한 표시된 장치에 부트 섹터를 설치합니다. 두 드라이브 모두에 부트 섹터를 갖고 싶다면 grub-install /dev/sdc
둘 다 실행하십시오.grub-install /dev/sdd
grub-install
드라이브가 올바르게 감지되지 않으면 다음 스크립트를 생성 하고 /usr/local/sbin/grub-probe-verbose
실행하여 grub-install --grub-probe=/usr/local/sbin/grub-probe-verbose
무슨 일이 일어나고 있는지 확인하십시오.
#!/bin/sh
exec /usr/sbin/grub-probe "$@" | tee /dev/stderr
로그에 따르면 RAID 어레이로 감지되지 않고 아무것도 반환하지 않는 bash -x /sbin/grub-install /dev/sdc
것으로 나타납니다 . 문제가 부팅 코드 에만 존재하고 부팅 코드에는 존재하지 않는 경우 해당 결정을 재정의해 보십시오.grub-probe
/dev/md1
/sbin/grub-probe --device-map=/boot/grub/device.map --target=partmap --device /dev/md1
/sbin/grub-probe --device-map=/boot/grub/device.map --target=abstraction --device /dev/md1
grub-probe
grub-install --modules='biosdisk ext2 msdos raid mdraid' /dev/sdc
mdraid 1.x 슈퍼블록에 대한 지원은 아직 매우 최신입니다. Grub 1.98에는 없습니다. 최소한 필요합니다.바자 개정 2550 날짜 2010-07-20(이 코드는 다음 위치에 있습니다.나뭇가지몇달 전). Debian squeeze와 Ubuntu 10.10은 1.x 슈퍼블록을 지원합니다. Gentoo는 지금쯤 1.99가 될 것으로 예상합니다.
grub.cfg 생성
grub-mkconfig -o /boot/grub/grub.cfg.grub-mkconfig
임시 Grub 구성 파일을 생성하려면 실행하세요 . 확인하고 올바른 것으로 보이면 이름을 /boot/grub/grub.cfg
.
장비 다이어그램
/boot/grub/device.map
올바른 출력을 얻으려면 조정이 필요할 수도 있습니다 grub-mkconfig
. grub-mkdevicemap
파일이 없으면 자동으로 생성되지만 여러 디스크를 사용하는 설정에서는 파일이 엉망이 되는 경향이 있습니다. 나는 그것이 다음과 같은 것을 포함하고 싶다
(md0) /dev/md1
(hd0) /dev/sdc
(hd1) /dev/sdd
Linux에서의 이름인 md0
Grub 볼륨 이름 은 어디에 있습니까? /dev/md1
Grub은 다음 두 가지에 액세스해야 합니다 /boot/grub
.
- Grub의 부트 섹터는 BIOS가 지원하는 디스크의 고정 위치에서 코어 이미지를 읽습니다(선택의 여지가 많지 않음). PC BIOS의 경우
(hd0)
BIOS가 부팅 섹터를 읽는 디스크(부트 섹터가 포함된 디스크)이고(hd1)
다른 디스크(항상 선택의 여지가 없음)입니다.(hd0)
디스크(또는 RAID-1 배열이 있는 디스크) 에/boot/grub
. - 코어 이미지는 결정된 파일 시스템 위치(일반적으로 Grub에서 지원하는 RAID 배열 또는 기타 볼륨 유형)에서 모듈과 Linux 커널을 로드합니다
grub.cfg
.grub-install
/grub
/boot/grub
변경되면 다시 실행 device.map
해야 합니다 grub-install
. grub-mkconfig
모든 작업을 완료하기 위해 명령을 사용하지 않는 경우 해당 명령을 다시 실행해야 할 수도 있습니다 search
.
답변2
UUID에 대한 질문에 답하려면 다음을 사용하세요.blkid
답변3
라이브~#mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdc2 /dev/sdd2
라이브~#유충
유충>루트(hd0,1)
Filesystem type is ext2fs, partition type 0xfd
유충>설정(hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes Checking if
"/boot/grub/e2fs_stage1_5" exists... yes Running "embed
/boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p
(hd0,0)/boot/grub/stage2 /boot/ grub/menu.lst"... succeeded Done.