GNU/Linux >> Znalost Linux >  >> Linux

Logické svazky jsou v době spouštění neaktivní

Tak se mi to nakonec podařilo vyřešit. Existuje problém (chyba) s detekcí logických svazků, což je určitý druh race condition (v mém případě možná s ohledem na skutečnost, že se to děje uvnitř KVM). Tomu se věnuje následující diskuse. V mém konkrétním případě (Debian Squeeze) je řešení následující:

  • zálohujte skript /usr/share/initramfs-tools/scripts/local-top/lvm2
  • použijte opravu ze zmíněného hlášení o chybě
  • spusťte update-initramfs -u

To mi pomohlo, doufám, že to pomůže ostatním (kupodivu to zatím není součástí hlavního proudu).

Odkaz na opravu:_http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=10;filename=lvm2_wait-lvm.patch;att=1;bug=568838

Níže je kopie pro potomky.

--- /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
 }

Vytvořte spouštěcí skript v /etc/init.d/lvm obsahující následující:

#!/bin/sh

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

exit 0

Poté proveďte příkazy:

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

Mělo by to stačit pro systémy Debian.


Linux
  1. Vytváření logických svazků v Linuxu pomocí LVM

  2. Vztah inodů, Lba, logických objemů, bloků a sektorů?

  3. Linux – deaktivace služeb Vbox pro zkrácení doby spouštění?

  1. Připojení SSH trvá dlouho? Zde je několik oprav

  2. Použití initcall_debug k nalezení volání jádra trvá během bootování v CentOS/RHEL dlouho

  3. Jak předat hodnotu vestavěnému modulu jádra Linuxu při spouštění?

  1. Co jsou tedy logická jádra CPU (na rozdíl od fyzických jader CPU)?

  2. Změna velikosti spouštěcího oddílu

  3. Proč se pro linux doporučuje 100MB spouštěcí oddíl ext2?