부팅시 논리 볼륨이 비활성화됩니다


10

논리 볼륨과 파일 시스템의 크기를 조정했으며 모두 원활하게 진행되었습니다. 새 커널을 설치했으며 재부팅 후 현재 또는 이전 버전으로 부팅 할 수 없습니다. grub (2) 옵션을 선택한 후 볼륨 그룹을 찾을 수 없습니다. 오류가 발생합니다. 통화 중 상자에서 검사하면 볼륨이 장치 매퍼에 등록되지 않았으며 비활성화 된 것으로 나타납니다. 활성화 후 마운트 할 수 없었습니다. 파일을 찾을 수 없습니다 오류가 발생했습니다 (mount / dev / mapper / all-root / mnt).

부팅시 진행하거나 활성화하는 방법에 대한 아이디어가 있습니까? 또는 부팅시 볼륨이 갑자기 비활성화되는 이유는 무엇입니까?

문안 인사,

마렉

편집 : 추가 조사에 따르면 이것은 논리 볼륨의 크기 조정과 관련이 없음이 밝혀졌습니다. 부팅이 실패한 후 ash 셸에서 논리 볼륨을 수동으로 활성화해야한다는 사실과이 문제에 대한 가능한 해결책은 아래의 답변에서 다룹니다.



내가 지금까지 시도한 것 : 1) 패치 2) /etc/lvm/lvm.conf diffing 3) GRUB_PRELOAD_MODULES="lvm"4) GRUB_CMDLINE_LINUX="scsi_mod.scan=sync"5) sudo grub-install /dev/sda && sudo grub-install /dev/sdb && sudo update-grub && sudo update-initramfs -u -k all6) sudo apt-get install --reinstall lvm2 grub-pc grub-common7) lvm vgchange -ay마지막에 추가 /usr/share/initramfs-tools/scripts/local-top/lvm2 하려고 시도하는 것이 빨리 부족합니다.
isaaclw

답변:


6

그래서 결국이 문제를 해결했습니다. 일종의 경쟁 조건 인 논리 볼륨을 감지하는 데 문제 (버그)가 있습니다 (이 경우 KVM 내부에서 발생한다는 사실과 관련이 있습니다). 이에 대해서는 다음 설명 에서 다룹니다 . 내 특별한 경우 (Debian Squeeze) 해결책은 다음과 같습니다.

  • 스크립트 백업 / usr / share / initramfs-tools / scripts / local-top / lvm2
  • 언급 된 버그 보고서에서 패치 적용
  • update-initramfs -u를 실행하십시오.

이것은 나를 도왔습니다. 다른 사람들을 도울 것입니다 (이상하게도 아직 주류의 일부는 아닙니다).

패치 링크 : _http : //bugs.debian.org/cgi-bin/bugreport.cgi? msg = 10; filename = lvm2_wait-lvm.patch; att = 1; bug = 568838

아래는 후손을위한 사본입니다.

--- /usr/share/initramfs-tools/scripts/local-top/lvm2 2009-08-17 19:28:09.000000000 +0200
+++ /usr/share/initramfs-tools/scripts/local-top/lvm2 2010-02-19 23:22:14.000000000 +0100
@@ -45,12 +45,30 @@

  eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev")

- if [ "$DM_VG_NAME" ] && [ "$DM_LV_NAME" ]; then
-   lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
-   rc=$?
-   if [ $rc = 5 ]; then
-     echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
-   fi
+ # Make sure that we have non-empty volume group and logical volume
+ if [ -z "$DM_VG_NAME" ] || [ -z "$DM_LV_NAME" ]; then
+   return 1
+ fi
+
+ # If the logical volume hasn't shown up yet, give it a little while
+ # to deal with LVM on removable devices (inspired from scripts/local)
+ fulldev="/dev/$DM_VG_NAME/$DM_LV_NAME"
+ if [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; then
+   # Use default root delay
+   slumber=$(( ${ROOTDELAY:-180} * 10 ))
+
+   while [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; do
+     /bin/sleep 0.1
+     slumber=$(( ${slumber} - 1 ))
+     [ ${slumber} -gt 0 ] || break
+   done
+ fi
+
+ # Activate logical volume
+ lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
+ rc=$?
+ if [ $rc = 5 ]; then
+   echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
  fi
 }

데비안 버그 토론에서이 문제는 해결되지 않았습니다. 여기에 제시된 해결책이 맞지 않을 수 있습니다
eMBee

이것이 8 살짜리 배포판에서 테스트 된 솔루션으로 9 살짜리 버그 인 것처럼 놀랍습니다. 나는 3 년 후 그 버그가 어떻게 목격되는지 알지 못한다.
zeratul021

5

/etc/init.d/lvm다음 을 포함하여 시작 스크립트를 작성하십시오 .

#!/bin/sh

case "$1" in
 start)
    /sbin/vgscan
    /sbin/vgchange -ay
    ;;
  stop)
    /sbin/vgchange -an
    ;;
  restart|force-reload)
    ;;
esac

exit 0

그런 다음 명령을 실행하십시오.

chmod 0755 /etc/init.d/lvm
update-rc.d lvm start 26 S . stop 82 1 .

데비안 시스템에 대한 트릭을 수행해야합니다.


1
나처럼 궁금한 사람들을 vgscan위해 시스템에서 볼륨 그룹을 검색하고 볼륨 그룹을 vgchange -a사용 가능하게 -ay하거나 ( -an) 사용 하지 않도록합니다 ( ).
Dan Pritts

1

나도이 문제가 있었다. 결국 이것은 이것을 고치는 것처럼 보였습니다.

diff -u /usr/share/initramfs-tools/scripts/local-top/lvm2-backup /usr/share/initramfs-tools/scripts/local-top/lvm2
--- /usr/share/initramfs-tools/scripts/local-top/lvm2-backup    2014-06-06 19:55:19.249857946 -0400
+++ /usr/share/initramfs-tools/scripts/local-top/lvm2   2014-06-21 01:26:01.015289945 -0400
@@ -60,6 +60,7 @@

 modprobe -q dm-mod

+lvm vgchange -ay
 activate_vg "$ROOT"
 activate_vg "$resume"

내가 시도한 다른 것들 :

  1. 당신의 패치
  2. diffing /etc/lvm/lvm.conf
  3. GRUB_PRELOAD_MODULES="lvm"
  4. GRUB_CMDLINE_LINUX="scsi_mod.scan=sync"
  5. sudo grub-install /dev/sda && sudo grub-install /dev/sdb && sudo update-grub && sudo update-initramfs -u -k all
  6. sudo apt-get install --reinstall lvm2 grub-pc grub-common

나는 다른 변화를 겪지 않았으며, 이것이 가장 우아하지는 않지만 이것이 나에게 중요한 유일한 것입니다.


0

경우 vgscan"발견"볼륨, 당신은 그들을 활성화 할 수 있어야한다vgchange -ay /dev/volumegroupname

$ sudo vgscan
[sudo] password for username: 
  Reading all physical volumes.  This may take a while...
  Found volume group "vg02" using metadata type lvm2
  Found volume group "vg00" using metadata type lvm2

$ sudo vgchange -ay /dev/vg02
  7 logical volume(s) in volume group "vg00" now active

그래도 재부팅 후 비활성화 될 이유가 확실하지 않습니다.


안녕, 고마워 내가 전에 그랬어. 그러나 다시 부팅하면 비활성 상태로 돌아갑니다. 활성화 후 즉시 마운트하려고 시도했지만 파일을 찾을 수 없음 오류로 종료됩니다.
zeratul021

/etc/lvm/lvm.conf에 문제가 있거나 현재 파일을 백업 한 후 다른 시스템에서 lvm.conf를 복사하여 문제가 해결되는지 확인하십시오.
Saurabh Barjatiya

0

구성 세부 정보 또는 오류 메시지가 없으면 실제 답변을 제공해야합니다. 나는 grub-mkdevicemap해결책으로 어둠 속에서 찌를 것입니다.


0

시스템에서 initramfs를 사용한다고 가정하면 구성 문제가있을 수 있습니다. 부팅 할 때 grub으로 시작한 initramfs 이미지를 업데이트해야합니다 (Debian에서는 update-initramfs를 사용하여이 작업을 수행합니다. 다른 배포판에 대해서는 알지 못합니다).

initramfs의 압축을 풀고 initramfs 이미지에서 /etc/lvm/lvm.conf (또는 이와 유사한 것)를 변경 한 후 다시 압축하여이 작업을 직접 수행 할 수도 있습니다.


안녕하세요, 오늘 밤 나중에 검사해볼 것을 제안 해 주셔서 감사합니다. 이상한 것은 새로운 커널 deb를 설치 한 후 initramfs를 업데이트하고 grub을 즉시 업데이트한다는 것입니다.
zeratul021

부팅에 필요한 두 개의 레이드 어레이가 나에게도 일어났다. update-initramfs가 제대로 실행되었지만 initramfs에서 더 이상 시작되지 않았습니다. mdadm이 mdadm.conf에서 RAID 배열을 찾는 방식을 수동으로 변경 한 다음 initupdate-ramfs를 다시 실행해야했습니다.
재스퍼

lvm.conf와 관련하여 아래 게시물에 댓글을 달았습니다. lvm 명령을 실행 한 다음 vgscan 및 vgchange -ay를 실행하고 initramfs 셸에서 제거하면 부팅해야합니다. 따라서 문제는 initramfs에 있으며 LVM을 활성화하지 않습니다. 기록을 위해 / boot는 별도의 파티션에 있습니다.
zeratul021

문제는 여전히 update-initramfs가 제대로 작동하지 않는 것입니다. 아마도 initramfs-tools에 대한 업데이트가 있는지 확인한 다음 update-initramfs를 시도하십시오. 그래도 문제가 해결되지 않으면 lvm.conf의 initramfs 이미지를 계속 살펴 봐야합니다.
재스퍼

슬프게도 LVM을 구성하는 방법을 모르겠습니다. 다음 힌트는 정확히 동일한 디스크 레이아웃을 가진 다른 가상 머신에 동일한 방식으로 실패하는 것이므로 부트시 LVM이 활성화되지 않은 이유를 파헤쳐 야합니다.
zeratul021

0

Red Hat 7.4를 KVM 게스트로 실행하는 환경에서 같은 문제가 있습니다. qemu-kvm-1.5.3-141 및 virt-manager 1.4.1을 실행 중입니다. 처음에는 문제없이 게스트로 Red Hat 7.2를 실행했지만 부 릴리스를 7.2에서 7.4로 업그레이드하고 커널을 최신 버전 3.10.0-693.5.2로 업그레이드 한 후 문제가 발생하여 / var LV 파티션을 부팅 할 수 없습니다 더. 시스템은 루트 암호를 요청하는 비상 모드로 전환되었습니다. 루트 암호를 입력하고 명령을 실행 lvm vgchange -ay하고 systemctl default나는 나의 활성화 할 수 있었다 /varLV를하고 시스템을 부팅합니다.

나는이 문제의 원인을 파악하지 않은,하지만 내 해결 방법은 LV 포함하는 것이었다 /var에서 /etc/default/grub아래를 참조로를 :

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vg_local/root rd.lvm.lv=vg_local/var rd.lvm.lv=vg_local/swap rhgb quiet biosdevname=0 net.ifnames=0 ipv6.disable=1"

그런 다음 vmlinuz 줄에 포함되어 grub2-mkconfig -o /boot/grub2/grub.cfg있는지 확인 하고 실행해야했습니다 . 시스템을 재부팅 한 후 더 이상 LV 활성화 오류가 발생하지 않아 시스템이 부팅 프로세스를 성공적으로 완료합니다.rd.lvm.lv=vg_local/var/boot/grub2/grub.cfg/var


0

내 경우에는 grub 루트가 root = / dev / vgname / root 임을 알아 냈습니다.

따라서 / usr / share / initramfs-tools / scripts / local-top / lvm2 의 테스트

  # Make sure that we have a d-m path
  dev="${dev#/dev/mapper/}"          
  if [ "$dev" = "$1" ]; then         
    return 1                         
  fi      

항상 거짓이었다. 루트 볼륨이 활성화되지 않았습니다.

/ etc / fstab에서 업데이트

/dev/vgname/root        /

/dev/mapper/vgname-root   /

그리고 않았다 :

update-grub
grub-install /dev/sda

내 문제를 해결했다


0

우리는이 문제에 부딪 쳤고 부팅시 볼륨을 찾아서 액세스 할 수 있도록 lvmetad설정 use_lvmetad=0하여 비활성화 하는 것을 발견했습니다 /etc/lvm/lvm.conf.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.