ฉันใช้ CentOS 5.5 และใช้งาน Xen ฉันมีกลุ่มวอลุ่มขนาดใหญ่ที่ฉันสร้างโลจิคัลวอลุ่มโดยใช้ lvcreate วันนี้ฉันมีลูกค้ายกเลิกบัญชีของเธอ แล้วเปลี่ยนใจในอีกหนึ่งชั่วโมงต่อมา น่าเสียดายที่ฉันได้ลบ LVM อิมเมจ Xen ของเธอออกแล้ว (เพียงแค่ใช้ lvremove มาตรฐาน ) ไม่มีกิจกรรม LVM อื่นบนดิสก์นี้ตั้งแต่นั้นมา (ไม่มีอะไรเพิ่มหรือลบ) เป็นไปได้ไหมที่จะ "เลิกทำ" lvremove หรือกู้คืนโลจิคัลวอลุ่ม? ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร?

answer

LVM ทำการสำรองข้อมูลเป็นข้อมูลเมตาไปยัง/etc/lvm/backupและ/etc/lvm/archive. ที่ด้านบนสุดของแต่ละไฟล์ มันจะบอกคุณเวลา/ข้อมูลเมื่อไฟล์ถูกสร้างขึ้น ดังนั้นโอกาสที่คุณจะมีสำเนาของข้อมูลเมตาที่เก่ากว่าก่อนที่คุณจะลบ LV ฉันเชื่อว่าการสำรองข้อมูลจะเป็นไปโดยอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลเมตา

ต่อไปนี้จะสามารถเป็นอันตรายและทำลายดังนั้นจึงต้องระมัดระวังเป็นอย่างมากและถ้าเป็นไปได้มีการสำรองข้อมูลแบบเต็มรูปแบบ

คำสั่งในการเรียกคืนการสำรองข้อมูล volumegroup vgcfgrestoreเมตาดาต้าเหล่านี้คือ ตรวจสอบให้แน่ใจว่าคุณได้ทำสำเนาปัจจุบันของการกำหนดค่าการทำงานที่มีอยู่โดยใช้vgcfgbackupคำสั่งที่มีแฟล็ก -f เพื่อระบุไฟล์อื่นสำหรับเอาต์พุต เพื่อไม่ให้คุณแก้ไขไฟล์ใดๆ ที่อยู่ใน /etc/lvm/backup หรือ /etc /lvm/โฟลเดอร์เก็บถาวร ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนการกำหนดค่าปัจจุบันด้วยการกำหนดค่าที่คุณต้องการกู้คืน เพื่อตรวจสอบว่าการเปลี่ยนแปลงเพียงอย่างเดียวที่คุณกำลังจะนำไปใช้คือการสร้าง LV ที่เพิ่งลบไปใหม่ การสำรองข้อมูลของคุณอย่างเต็มรูปแบบอาจไม่ใช่ความคิดที่ไม่ดีเช่นกัน คุณอาจต้องการติดต่อผู้จำหน่าย Linux เพื่อขอรับการสนับสนุน/คำแนะนำ หากคุณอยู่ภายใต้สัญญาการสนับสนุนก่อนที่จะดำเนินการต่อ เนื่องจากฉันไม่เคยต้องทำสิ่งนี้ด้วยตนเอง

ขอให้โชคดี.

" คุณช่วยกรุณาเจาะจงมากกว่านี้ในการค้นหา EFROM และ ETO จากไฟล์สำรองได้ไหม lv ทั้งหมดมี "start_extend" จาก 0 ในไฟล์สำรองของฉัน ดังนั้นฉันหลงทางเล็กน้อย :) ขอบคุณ! :06 "

ตกลง ฉันจะเจาะจงมาก...ด้วยวิธีที่ง่ายที่สุดในการกู้คืนโลจิคัลวอลุ่ม

ตัวอย่าง:

1 - ฉันได้ลบโลจิคัลวอลุ่มของฉันแล้ว!

$ sudo lvremove /dev/vg1/debian.root

2 - สิ่งแรกที่ต้องทำคือ มองหาไฟล์เก็บถาวรที่ /etc/lvm/archive/vg1_(xxxxx).vg. ฉันทำได้เพียงแค่ดูวันที่ที่ฉันลบโลจิคัลวอลุ่มออกไป!

$ sudo ls -l /etc/lvm/archive |more

3- ฉันพบแล้ว!

-rw------- 1 root root 16255 Mar 20 14:29 vg1_00223-235991429.vg
-rw------- 1 root root 16665 Mar 20 16:49 vg1_00224-748876387.vg
-rw------- 1 root root 17074 Mar 20 16:49 vg1_00225-931666169.vg
-rw------- 1 root root 17482 Mar 20 16:50 vg1_00226-1238302012.vg
-rw------- 1 root root 18081 **Mar 20 21:57 vg1_00227-2048533959.vg**

วันที่ฉันทำ lvremove!!!...เมื่อไม่กี่นาทีที่แล้ว..

4 - มาดูไฟล์กัน!

$ sudo head /etc/lvm/archive/vg1_00227-2048533959.vg
*# Generated by LVM2 version 2.02.95(2) (2012-03-06): Thu Mar 20 21:57:58 2014
contents = "Text Format Volume Group"
version = 1
description = **"Created *before* executing 'lvremove /dev/vg1/debian.root'"**
creation_host = "server"    # Linux server 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64
creation_time = 1395363478  # Thu Mar 20 21:57:58 2014*

5 - ทำการทดสอบก่อนที่จะกู้คืน!

$ sudo vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Test mode: Metadata will NOT be updated and volumes will not be
(de)activated.   **Restored volume group vg1**

6 - ตกลง ตอนนี้ทำซ้ำบรรทัดคำสั่งโดยไม่ต้อง (--ทดสอบ)

$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**

7 - ตรวจสอบ!

$ sudo lvscan |grep debian
ACTIVE            '/dev/vg1/debian.root' [7,81 GiB] inherit

8 - ถ้าตรรกะไม่ทำงาน ทำมัน!

$ sudo lvchange -a y /dev/vg1/debian.root 

มันคือทั้งหมด

ฉันหวังว่านี่จะช่วยคนอื่น ๆ ที่กำลังมองหาวิธีแก้ปัญหานี้!

สิ่งที่ง่ายที่สุดในการกู้คืนจาก lvremove (สมมติว่าคุณไม่ได้เขียนถึงขอบเขตที่ LV อาศัยอยู่) คือ:

เพียงค้นหาข้อมูลสำรองของข้อมูลเมตาของคุณใน /etc/lvm/archive และหา

ก) ว่า LV อยู่ในขอบเขตใด (EFROM, ETO)
ข) ว่า PV ใดที่ LV ของคุณอาศัยอยู่และขยายบน PV นั้นที่กำลังใช้อยู่ (PFROM, PTO)

หลังจากที่คุณมีข้อมูลนี้ คุณจะสร้าง LV ใหม่ที่มีขนาดเท่ากันทุกประการบน PV เดียวกันที่ขยายโดยไม่ต้องล้าง 8kB แรกของ LV:

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO

(ตามที่ตอบโดย thermoman ก่อนหน้านี้) วิธีที่ง่ายในการสร้างโวลุ่ม LVM ที่ถูกลบใหม่คือการสร้างด้วย lvcreate โดยไม่มีค่าศูนย์และทำให้แน่ใจว่าจะอยู่ในตำแหน่งเดียวกันบนดิสก์ (คำสั่งจากคำตอบของเทอร์โมแมนไม่ทำงาน)

ตรวจสอบขนาดและตำแหน่งของโลจิคัลวอลุ่มที่ถูกลบเหมือนก่อนการลบโดยการอ่านไฟล์ใน /etc/lvm/archive ขนาดของไดรฟ์อยู่ในextent_countของsegment1(หรือผลรวมของsegment*/extent_countค่าถ้ามันมีหลาย extents) ตำแหน่งอยู่ในstripesส่วนหลังนามแฝงของฟิสิคัลวอลุ่ม (เช่นpv0)

ตัวอย่างเช่น ส่วนระดับเสียงอาจมีลักษณะดังนี้:

    physical_volumes {
            pv0 {
                    device = "/dev/somedisk" # Hint only
                    ...
            }
    }

    logical_volumes {
            ...
            example {
                    ...
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 1024     # 4 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 30720
                            ]
                    }
            }
            ...
    }

ขนาดของexampleโวลุ่มนี้คือ 1024 และตั้งอยู่บน /dev/somedisk โดยเริ่มจากขอบเขต 30720

คำนวณขอบเขตสุดท้ายเป็น start + size -1 = 30720 + 1024 - 1 = 31743 หากต้องการสร้างปัญหาโวลุ่มขึ้นใหม่ให้ทำดังนี้

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743

ฉันมีสถานการณ์ที่คล้ายกัน ฉันมี PV ทั้งหมดที่มี LV ที่ต้องการ แต่ VG ของฉันแสดง PV ที่หายไปและ 0 LVs ฉันกู้คืนโดยทำสิ่งต่อไปนี้:

  1. กลายเป็นรูท
  2. เรียกใช้pvsเพื่อรวบรวม UUID สำหรับไดรฟ์ทั้งหมด
  3. ตรวจสอบไฟล์ใน /etc/lvm/archive จนกว่าฉันจะพบไฟล์ที่แสดง UUID เดียวกันทั้งหมด
  4. สร้างสำเนาการทำงานของไฟล์กำหนดค่าที่เก็บถาวร และเริ่มแก้ไข
  5. ในphysical_volumesส่วน ตั้งค่าdevice =บรรทัดให้ตรงกับอุปกรณ์ปัจจุบัน/UUID ที่รายงานโดยpvsล้าง"MISSING"แฟล็ก และลบpvNส่วนใดๆที่หายไปจริง
  6. ในlogical_volumesส่วนนี้ ให้ลบรายการที่มีแถบบนpvNส่วนที่ไม่มีอยู่แล้วออก
  7. แค่นั้นฉันก็วิ่ง

    vgcfgrestore --test vg -f /root/dangerously_edited.vg

  8. เมื่อใช้งานได้ ฉันวิ่งใหม่โดยไม่มี--testตัวเลือก

ฉันบรรลุสถานการณ์เฉพาะของฉันโดยขยาย VG ด้วย PVs sdg และ sdh จากนั้นฉันก็สร้าง LV ใหม่ โดยระบุ/dev/sdg /dev/sdhในบรรทัดคำสั่งเพื่อที่ฉันจะได้รู้ว่า LV ใหม่อยู่ในไดรฟ์เหล่านั้น จากนั้นฉันก็ย้ายเฉพาะไดรฟ์เหล่านั้นไปยังเครื่องใหม่ เครื่องเก่าไม่พอใจอย่างมากกับไดรฟ์ที่หายไป และเมื่อฉันบังคับถอดออก มันก็ลบ LV ทั้งหมดด้วย คนเกียจคร้าน

คราวหน้าฉันจะสร้าง VG ใหม่เพื่อหลีกเลี่ยงปัญหานี้