Linux
邏輯卷在引導時處於非活動狀態
我調整了邏輯捲和文件系統的大小,一切順利。我安裝了新核心,重新啟動後我既不能啟動目前也不能啟動以前的核心。選擇 grub(2) 選項後出現卷組未找到錯誤。從繁忙的框中檢查顯示卷未向設備映射器註冊並且它們處於非活動狀態。啟動後我無法掛載它們,出現找不到文件錯誤(掛載 /dev/mapper/all-root /mnt)。
任何想法如何在啟動時繼續或使它們處於活動狀態?或者為什麼卷在啟動時突然不活動?
問候,
馬立克
編輯:進一步調查顯示,這與調整邏輯卷的大小無關。我在下面的回復中介紹了在啟動失敗後必須在 ash shell 中手動啟動邏輯卷的事實以及此問題的可能解決方案。
所以我最終設法解決了這個問題。檢測邏輯卷存在問題(錯誤),這是某種競爭條件(可能在我的情況下,這發生在 KVM 內部)。這將在以下討論中討論。在我的特殊情況下(Debian Squeeze),解決方案如下:
- 備份腳本 /usr/share/initramfs-tools/scripts/local-top/lvm2
- 應用提到的錯誤報告中的更新檔
- 執行更新-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 }