วิธีการกู้คืนโลจิคัลวอลุ่มที่ลบด้วย lvremove


12

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

คำตอบ:


13

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

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

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

โชคดี.


1
อ่านลึกเข้าไปใน vgcfgrestore ดูเหมือนว่าฉันจะต้องปิด VM ทุกครั้งในกล่องก่อนที่จะลองนี้หรือเสี่ยงต่อการทำลายทั้งอาร์เรย์ ดูเหมือนว่าคำแนะนำของคุณจะได้ผลดังนั้นฉันจึงยอมรับคำตอบ แต่ข้อมูลไม่คุ้มกับความเสี่ยง ขอบคุณ
John P

@ John P Yeah ฉันคิดแบบของ VM และสิ่งนี้จะเป็นเรื่องยากที่จะทำในสภาพแวดล้อมเช่นนั้น ฉันเดาว่าสิ่งหนึ่งที่จะนำไปสู่สิ่งนี้คือในอนาคตอาจขั้นตอนการลบบัญชีควรมีระยะเวลา 30 วันโดยไม่มีการลบ
3dinfluence

18

"คุณช่วยกรุณาเจาะจงมากขึ้นในการหา EFROM และ ETO จากไฟล์สำรองได้หรือไม่ lv ทั้งหมดมี" start_extend "จาก 0 ในไฟล์สำรองของฉันดังนั้นฉันจึงเสียไปเล็กน้อย :) ขอบคุณ! - user186975 24 สิงหาคม 13 ที่ 17 : 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 

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

ฉันหวังว่านี่จะช่วยให้คนอื่นที่กำลังมองหาโซลูชันนี้!


5

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

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

a) ซึ่งขยายขอบเขต LV ที่อาศัยอยู่ใน (EFROM, ETO)
b) ซึ่ง PVs ของคุณ LV อยู่และอยู่บน PV ที่ใช้ (PFROM, PTO)

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

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

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

3

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

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

คำนวณขอบเขตสุดท้ายเมื่อเริ่มต้น + ขนาด -1 = 30720 + 1024 - 1 = 31743 เมื่อต้องการสร้างปัญหาปริมาณดังต่อไปนี้:

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

คำตอบนี้เพิ่งช่วยคืนเมื่อวานนี้! ฉันมี XenServer ที่ใช้งานไม่ได้ซึ่งลบ LV ผิดเพราะข้อผิดพลาด API ... : o
Elektordi

2

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

  1. กลายเป็นราก
  2. เรียกใช้pvsเพื่อรวบรวม UUIDs สำหรับไดรฟ์ทั้งหมด
  3. ตรวจสอบไฟล์ใน / etc / lvm / archive จนกว่าฉันจะพบไฟล์ที่แสดง UUID เดียวกันทั้งหมด
  4. ทำสำเนาทำงานของไฟล์กำหนดค่าที่เก็บถาวรและเริ่มแก้ไข
  5. ในphysical_volumesส่วนตั้งค่าdevice =บรรทัดให้ตรงกับอุปกรณ์ / UUIDs ปัจจุบันที่รายงานโดย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 ใหม่เพื่อหลีกเลี่ยงปัญหานี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.