CentOS를 다시 시작한 후 LVM 볼륨이 비활성화됩니다.

CentOS를 다시 시작한 후 LVM 볼륨이 비활성화됩니다.

CentOS 6에서 7로 Linux 서버를 다시 설치했습니다. 서버에는 3개의 드라이브, 즉 시스템 SSD 드라이브(호스팅하는 드라이브를 제외한 모든 것을 호스팅함 /home)와 호스팅된 4TB HDD 드라이브 2개가 있습니다 /home. 모든 것은 LVM을 사용합니다. 2개의 4TB 드라이브가 미러링되었으며(LVM 자체 내 RAID 옵션 사용) /home 파티션으로 완전히 채워졌습니다.

문제는 4TB 디스크는 잘 인식되고 LVM에서도 볼륨은 잘 인식되는데 자동으로 활성화가 되지 않는다는 점입니다. 다른 모든 것은 자동으로 활성화됩니다. 수동으로 활성화하면 작동합니다.

/home에 이전 시스템 드라이브의 이미지가 있습니다. LVM 볼륨도 포함됩니다. 마운트하면 kpartxLVM이 이를 선택하여 활성화합니다. 그러나 이러한 볼륨과 비활성 볼륨 사이에는 아무런 차이가 없습니다.

루트 파일 시스템도 LVM이며 정상적으로 활성화됩니다.

그런데 이상한 점을 발견했습니다. Execution에서는 lvchange -aay활성화할 드라이브를 지정해야 한다고 말했습니다. 이 작업도 자동으로 수행되지 않습니다. 내가 지정하면 lvchange -ay lv_home작동합니다.

이 동작을 일으킬 수 있는 항목을 찾을 수 없습니다.

다음에 추가:vgchange -aay --sysinit이전 시스템의 시작 스크립트(init 사용)에서 이 사실을 발견했습니다 . systemd를 처음 사용하는 경우 vgchange스크립트에서 해당 호출을 볼 수 없습니다. 하지만 어디에 두어야 할지 모르겠습니다.

2를 추가하세요:systemd를 알아내기 시작하세요. 나는 스크립트가 어디에 있는지 발견하고 스크립트가 어떻게 호출되는지 이해하기 시작했습니다. 또한 실행된 스크립트를 볼 수 있다는 것을 발견했습니다 systemctl -al. 이는 시작 시 알려진 모든 udev 블록 장치를 호출한다는 lvmetad의미 입니다. pvscan그러나 현재 등록된 udev 블록 장치는 인식된 lvm 볼륨 중 하나뿐입니다. 하드 드라이브도 있지만 경로가 다르고 이름이 더 깁니다. 블록 장치도 비슷한 것으로 인식되고 8:3, 하드 드라이브도 비슷한 것으로 인식됩니다 /device/something/. 저는 더 이상 서버에 있지 않기 때문에 정확하게 작성할 수 없습니다(나중에 수정하겠습니다).

나는 이것이 udev 및 장치 감지/매핑과 관련이 있다고 생각합니다. 저녁에 계속해서 udev를 배우세요.

다른 모든 방법이 실패하면 호출된 스크립트를 찾아서 pvscan항상 모든 장치를 검사하도록 수정할 수 있는지 확인했습니다. 이로써 문제가 해결되었지만 꽤 보기 흉한 해킹처럼 보이므로 실제 근본 원인을 알아내도록 노력하겠습니다.

3개 추가됨: 글쎄, 아직은 잘 모르겠어이런 일이 발생하지만 적어도 나는 꽤 괜찮은 해결 방법을 만들었습니다. pvscan시작 직후 한 번 호출되는 또 다른 시스템 서비스를 만들었습니다 lvmetad. 특정 장치에 대한 또 다른 호출이 여전히 존재합니다. 제 생각에는 실제로 udev호출하고 있는 것 같습니다(이 장치를 참조한 유일한 곳은 여기입니다). 왜 다른 하드 드라이브를 호출하지 않는지 모르겠습니다.

답변1

내가 해냈어! 내가 해냈어! 올바르게 고쳤습니다(제 생각에는).

이야기는 다음과 같습니다.

얼마 후 서버가 오작동하여 폐기해야 했습니다. 나는 디스크를 보관하고 다른 새로운 것들을 얻었습니다. 그런 다음 SSD에 CentOS를 다시 설치하고 HDD를 연결했습니다. LVM이 제대로 실행되고 디스크가 인식되며 구성이 변경되지 않은 상태로 유지됩니다. 하지만같은 문제다시 발생합니다. 재부팅 후 볼륨이 비활성화됩니다.

그러나 이번에는 우연히 다른 점을 발견했습니다. 부트로더가 다음 매개변수를 커널에 전달합니다.

충돌 커널=자동rd.lvm.lv=centos/루트 rd.lvm.lv=centos/exchange조용한

자, 잠깐만요, 저 표정은요친숙한!

빠른 Google 쿼리 및우리는 거기 있다:

rd.lvm.lv=

주어진 이름을 가진 논리 볼륨만 활성화하십시오. rd.lvm.lv는 커널 명령줄에서 여러 번 지정할 수 있습니다.

지금은 괜찮아요. 그게 설명이에요!

따라서 해결책은 다음과 같습니다(더 많은 Google 검색어에서 수집).

  1. /etc/defaults/grub매개변수에 추가 볼륨을 포함하도록 수정합니다 .crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swaprd.lvm.lv=vg_home/lv_homerhgb quiet
  2. 그럽 재구성grub2-mkconfig -o /boot/grub2/grub.cfg
  3. initramfs 재구성을 사용하십시오 mkinitrd -f -v /boot/initramfs-3.10.0-327.18.2.el7.x86_64.img 3.10.0-327.18.2.el7.x86_64.노트:귀하의 가치는 다를 수 있습니다. uname -r커널 버전을 얻는 데 사용됩니다 . 아니면 그냥 읽어보세요 mkinitrd. (솔직히 이 단계가 왜 필요한지는 모르겠지만 분명히 그렇습니다. 없이 시도했지만 작동하지 않았습니다.)
  4. 마지막으로 grub을 다시 설치하십시오.grub2-install /dev/sda
  5. 자연스럽게 다시 시작하세요.

다다이즘! 재부팅 시 볼륨이 활성화됩니다. 그것을 추가 fstab하고 즐기십시오! :)

답변2

나에게도 이 문제가 있다. 내 경우에는 iscsi, 다중 경로 지정, lvm 및 세션 생성 순서 등의 조합이었습니다. /sbin/vgchange -a y쌍을 추가했습니다 /etc/rc.local.

답변3

사소한 업데이트(EFI의 RHEL 7용)(비BIOS)기계):

다음 단계를 수행하여 성공했습니다.

  1. /etc/defaults/grub매개변수에 추가 볼륨을 포함하도록 수정되었습니다 . ( 및 rd.lvm.lv=rhel/home에 추가로 )rhel/rootrhel/swap
  2. 그럽 재구성

    grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    

    (노트:또 다른 방법! )

  3. initramfs 재구성

    mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
    
  4. 뛰어 넘다grub을 다시 설치하십시오. ( grub2-install /dev/sda빈 디렉토리가 있기 때문에 /usr/lib/grub/)
  5. 자연스럽게 다시 시작하세요.

답변4

그래서 /etc/default/grub에서 rd.lvm.lv= 설정을 시도했지만 작동하지 않았습니다.

부팅 시 활성화되려면 ssd_vg 볼륨 그룹의 두 논리 볼륨이 모두 필요합니다. kubuntu-vg의 논리 볼륨 home_lv가 활성화되어 있습니다.

수행된 작업은 /etc/lvm/lvm.conf를 편집하고 볼륨 목록 섹션에 Volume_list = [ "ssd_vg", "kubuntu-vg/home_lv" ]를 입력하는 것이었습니다.

다시 시작한 후의 결과

$ sudo lvscan 비활성 원본 '/dev/kubuntu-vg/root' [50.00 GiB] 상속됨

inactive          '/dev/kubuntu-vg/swap_1' [7.88 GiB] inherit

ACTIVE            '/dev/kubuntu-vg/home_lv' [1000.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap11' [50.00 GiB] inherit

inactive Snapshot '/dev/kubuntu-vg/root_snap12' [50.00 GiB] inherit

ACTIVE            '/dev/ssd_vg/root' [224.02 GiB] inherit

ACTIVE            '/dev/ssd_vg/swap_1' [7.88 GiB] inherit

관련 정보