그래서 결국이 문제를 해결했습니다. 일종의 경쟁 조건 인 논리 볼륨을 감지하는 데 문제 (버그)가 있습니다 (이 경우 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
}