배경
저는 Centos 7을 사용하고 있습니다. 처음에는 다음과 같이 단일 디스크에서 실행됩니다.
1 200M EFI System (/boot/efi)
2 500M Microsoft basic (/boot)
3 465.1G Linux LVM
LVM VG centos
- LVM LV ext4 centos-root (/)
- LVM LV swap centos-swap (swap)
처음에는 Linux 소프트웨어 RAID1 어레이에 설치해야 하므로 이는 임시 솔루션일 뿐입니다. 오늘 시간을 내어 마이그레이션해 봤습니다. 현재 모습은 다음과 같습니다.
Both new disks have this partition layout:
1 200M EFI System (/boot/efi)
2 457.6G Linux RAID /dev/md0 RAID1 (for boot and LVM)
3 8G Linux RAID /dev/md1 RAID0 (so 16GB total, for swap)
/dev/md0 looks like this:
1 500M Linux filesystem (/boot)
2 457G Linux LVM (centos-root is migrated to this)
LVM now has only one LV, centos-root
/etc/mdadm.conf
다음과 같습니다.
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=main.centos.local:0 UUID=5b5057b4:4235ba4b:5342dfda:acf63302
devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md1 level=raid0 num-devices=2 metadata=1.2 name=main.centos.local:1 UUID=f82a8c99:9b391d83:4efc9456:9e9bad98
devices=/dev/sda3,/dev/sdb3
/etc/fstab
다음과 같습니다.
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fcb5f82f-ce6b-460b-800f-329e010bc403 /boot xfs defaults 0 0
UUID=C532-14AE /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/md1 swap swap defaults 0 0
blkid
다음을 출력합니다(관련 항목만):
/dev/sdb1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="ed301bbd-c15c-40af-ae75-bf238d0e6270"
/dev/sda1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="f3a76412-41a0-4e04-9b04-ad1c159133cf"
/dev/md0p1: LABEL="boot" UUID="fcb5f82f-ce6b-460b-800f-329e010bc403" TYPE="xfs" PARTLABEL="primary" PARTUUID="df8d6481-c6ce-423a-b5d5-205d355e5653"
/dev/md0p2: UUID="7LfywM-oPHy-MTEt-swlI-EVbZ-opTo-m82E6R" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="19e7f9d5-a955-4036-8338-03a748faa1f6"
/dev/mapper/centos-root: UUID="deaa9788-b487-4991-adf7-2945788fb6cd" TYPE="xfs"
/boot/efi_[device]
커널이 업데이트될 때 모든 것을 동기화 상태로 유지하기 위해 grub.cfg가 해당 파티션에 복사되는 다른 EFI 파티션을 자동으로 마운트하는 스크립트가 있습니다 .
/dev/sda1
스크립트를 통해 동기화가 유지 되므로 /dev/sdb1
(확인했습니다) 둘 중 하나를 fstab에 마운트하는 것은 문제가 되지 않습니다 /boot/efi
. 이는 또한 오류로 인해 하나의 드라이브가 제거되더라도 시스템이 계속 부팅된다는 것을 의미합니다. 작업을 단순화하기 위해 LV에 스왑을 넣을 수도 있었지만 RAID0은 (가치 있는 만큼) 더 나은 성능을 얻고 추가로 16GB의 공간을 얻습니다.
다음 명령을 사용하여 LV를 이전 드라이브에서 새 PV로 마이그레이션했습니다.
pvcreate /dev/md0p2
vgextend centos /dev/md0p2
pvmove /dev/sdg3
vgreduce centos /dev/sdg3
dracut
그런 다음 (원본 파일을 백업한 후) initramfs를 재생성하고 마지막으로 grub.cfg를 재생성했습니다. 그 후 새 /boot
파티션 을 마운트 /boot/efi
하고 모든 것을 복사했습니다.
질문
이전 드라이브의 연결을 끊고 부팅한 후 dracut은 내 RAID 배열을 찾을 수 없으며 확실히 /boot
파티션과 LVG도 찾을 수 없습니다. 합계를 전혀 mdadm --assemble
호출 하지 않는 것 같습니다 . 프롬프트에서 이 작업을 수행 하고 연결할 수 있는 LVG를 찾을 수 있으며 프롬프트를 종료하면 시스템이 문제 없이 계속 부팅됩니다. 모든 것이 있어야 할 곳에 있는 것 같습니다./dev/md0
/dev/md
dracut
lvm_scan
/dev/centos/root
/dev/root
사용 가능한 커널 업데이트가 있었기 때문에 설치를 시도했지만(initramfs 및 grub.cfg 파일을 처음으로 재생성할 때 뭔가를 망쳤다고 가정) 성공하지 못했습니다. 시스템은 여전히 똑같은 방식으로 실패합니다. EFI 파티션 중 하나에서 수동으로 부팅하는 경우입니다(둘 다 동일하므로 그래야 합니다).
내가 여기서 무엇을 놓치고 있는 걸까요? 어레이를 조립하기 위해 dracut을 어떻게 구합니까?
답변1
dracut 문서에는 모든 md raid 어레이가 자동으로 조립되어야 하며 rd.md.uuid
이 매개변수는 부팅 프로세스의 일부로 특정 어레이를 조립하려는 경우에만 사용해야 함을 암시합니다.
실제로 어레이는 자동으로 조립되지 않는 것처럼 보입니다. 실제로는 rd.md.uuid
매개변수가 설정될 때만 조립됩니다(어셈블해야 하는 각 어레이에 대해). rd.lvm.lv
매개변수가 이미 설정되어 있어서 왠지 방해가 될 수도 있지만 md
테스트할 시간이 없습니다.
즉, rd.md.uuid
두 배열의 매개변수를 GRUB_CMDLINE_LINUX
변수 에 추가한 /etc/default/grub
다음 grub 구성을 다시 생성하면 문제가 해결되었습니다.
답변2
rd.md=1
변수 에 rd.md.conf=1
및 rd.auto=1
매개변수를 추가한 다음 grub 구성을 다시 생성하면 비슷한 문제가 해결되었습니다. 이러한 매개변수의 기본값은 0입니다( 문서에는 명시적으로 나와 있지 않지만 그렇다고 나와 있습니다).GRUB_CMDLINE_LINUX
/etc/default/grub
dracut.cmdline
물론, rd.md.uuid
별도로 추가하는 것도 가능합니다. 이렇게 하면 필요한 배열이 명시적으로 시작되기 때문입니다. 하지만 저는 게으르고 일반적인 매개변수를 선호합니다. 이 rd.md.uuid
버전의 장점은 부팅 시 필요한 어레이만 시작된다는 것입니다.
답변3
나는 이것을 사용한다mdadm RAID CentOS 시작 가이드이 주제에 관해 누락된 정보가 많이 있는 것 같습니다.
명백한 단계 외에도 시작 문제를 해결하는 두 가지 단계가 더 있었습니다. 1.) /etc/default/grub에 rd.auto=1을 추가하고 grub.cfg grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg를 업데이트했습니다. 2.) 다음과 같이 initramfs를 다시 빌드해야 했습니다. : dracut --add="mdraid" /boot/initramfs-3.10.0-1127.13.1.el7.x86_64.img 3.10.0-1127.13.1.el7.x86_64 --force
그 후에는 부팅할 수 있지만 향후 모든 커널에 mdraid가 내장되도록 dracut.conf를 편집하여 mdraid를 추가하는 것을 잊지 마십시오.