โลจิคัลวอลุ่มไม่ทำงานในเวลาบูต


10

ฉันปรับขนาดโลจิคัลวอลุ่มและระบบไฟล์ของฉันและทุกอย่างราบรื่น ฉันติดตั้งเคอร์เนลใหม่และหลังจากรีบูตฉันไม่สามารถบูตได้ทั้งในปัจจุบันและในอดีต ฉันได้รับกลุ่มวอลุ่มไม่พบข้อผิดพลาดหลังจากเลือกตัวเลือกด้วง (2) การตรวจสอบจากกล่องไม่ว่างเผยให้เห็นปริมาณที่ไม่ได้ลงทะเบียนกับผู้ทำแผนที่อุปกรณ์และพวกเขาจะไม่ได้ใช้งาน ฉันไม่สามารถเมานต์พวกเขาหลังจากเปิดใช้งานฉันไม่พบข้อผิดพลาดของไฟล์ (mount / dev / mapper / all-root / mnt)

ความคิดใด ๆ ที่จะดำเนินการหรือทำให้พวกเขาใช้งานได้ในเวลาบูต? หรือทำไมปริมาณจึงไม่ได้ใช้งานทันทีในขณะบูต?

ความนับถือ,

มาเร็ค

แก้ไข: การตรวจสอบเพิ่มเติมพบว่าสิ่งนี้ไม่เกี่ยวข้องกับการปรับขนาดของโลจิคัลวอลุ่ม ความจริงที่ว่าต้องเปิดใช้งานโลจิคัลวอลุ่มด้วยตนเองใน Ash shell หลังจากบูตไม่สำเร็จและวิธีแก้ไขที่เป็นไปได้สำหรับปัญหานี้อยู่ในคำตอบของฉันด้านล่าง



สิ่งที่ฉันลองมาแล้ว: 1) แพทช์ของคุณ 2) /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 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 / สคริปต์ / 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

ฉันจะประหลาดใจถ้ามันจะเป็นเช่นนี้เป็นข้อบกพร่องอายุ 9 ปีพร้อมวิธีการแก้ปัญหาการทดสอบในการกระจายอายุ 8 ปี ฉันไม่เข้าใจว่ามีข้อผิดพลาดอะไรบ้างในอีก 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 .

ควรทำเคล็ดลับสำหรับระบบ Debian


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 จากระบบอื่นและดูว่าจะแก้ปัญหาได้
ไหม

0

หากไม่มีรายละเอียดการกำหนดค่าหรือข้อความแสดงข้อผิดพลาดใด ๆ เราจะต้องให้คำตอบที่แท้จริงฉันจะใช้วิธีจิ้มในที่มืดgrub-mkdevicemapเพื่อเป็นทางออก


0

สมมติว่าคุณใช้ระบบ initramfs อาจมีปัญหาการกำหนดค่าที่นั่น คุณควรอัปเดตอิมเมจ initramfs ของคุณที่เริ่มต้นในเวลาบูทด้วยด้วง (ใน Debian คุณทำสิ่งนี้กับ update-initramfs โดยไม่รู้เรื่อง distros อื่น ๆ )

คุณสามารถทำสิ่งนี้ได้ด้วยตัวเองโดยการแกะกล่องเริ่มต้นและเปลี่ยน /etc/lvm/lvm.conf (หรือบางอย่างเช่นนี้) ในภาพเริ่มต้นของคุณจากนั้นบรรจุใหม่อีกครั้ง


สวัสดีขอบคุณสำหรับคำแนะนำฉันจะลองตรวจสอบพวกเขาในคืนนี้ สิ่งที่แปลกคือหลังจากติดตั้งเคอร์เนล deb ใหม่ให้อัปเดต initramfs และอัพเดต grub ตามทันที
zeratul021

บางสิ่งบางอย่างเกิดขึ้นกับฉันด้วยสองอาร์เรย์ RAID ที่จำเป็นในการบูต พวกเขาไม่ได้เริ่มต้นใน initramfs อีกต่อไปแม้ว่า update-initramfs จะทำงานได้ดี ฉันต้องเปลี่ยนวิธีที่ mdadm ค้นหาอาร์เรย์การโจมตีใน mdadm.conf ด้วยตนเองจากนั้นเริ่มการทำงานใหม่ initupdate-ramfs
แจสเปอร์

ฉันแสดงความคิดเห็นในโพสต์ด้านล่างเกี่ยวกับ lvm.conf ฉันพบว่าเมื่อฉันเรียกใช้คำสั่ง lvm แล้ว vgscan และ vgchange - เป็นและเลื่อนออกจากเปลือก initramfs ฉันบูตเหมือนที่ฉันควรจะ ดังนั้นปัญหาอยู่ที่ initramfs ซึ่งไม่ได้เปิดใช้งาน LVM เพียงบันทึก / boot อยู่ในพาร์ทิชันแยก
zeratul021

ปัญหาของคุณยังคงอยู่ที่ update-initramfs ทำงานไม่ถูกต้อง บางทีคุณควรดูว่ามีการอัปเดตสำหรับเครื่องมือเริ่มต้นแล้วลองอัปเดตเริ่มต้น หากวิธีนี้ใช้ไม่ได้ผลคุณควรดูภายในภาพเริ่มต้นที่ lvm.conf
แจสเปอร์

น่าเศร้าที่ฉันไม่ทราบวิธีกำหนดค่า 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 มีบางอย่างผิดพลาดและไม่สามารถบูตพาร์ทิชัน 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"

แล้วฉันต้องวิ่งgrub2-mkconfig -o /boot/grub2/grub.cfgและตรวจสอบว่าrd.lvm.lv=vg_local/varถูกรวมอยู่ในบรรทัด vmlinuz /boot/grub2/grub.cfgของ หลังจากรีบูตระบบฉันไม่ได้รับข้อผิดพลาดในการเปิดใช้งาน/varLV อีกต่อไปและระบบจะเสร็จสิ้นกระบวนการบูทเครื่องด้วยความสำเร็จ


0

คิดในกรณีของฉันว่ารากด้วงเป็นroot = / dev / vgname / root

ดังนั้นการทดสอบใน/ usr / share / initramfs-tools / สคริปต์ / 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.