Bagaimana memulihkan volume logis yang dihapus dengan lvremove

12

Saya menggunakan CentOS 5.5 dan menjalankan Xen. Saya memiliki grup volume besar yang saya buat volume logis menggunakan lvcreate. Hari ini saya meminta pelanggan membatalkan akunnya, kemudian berubah pikiran sekitar satu jam kemudian. Sayangnya saya sudah menghapus LVM gambar Xen-nya. (hanya menggunakan lvremove standar). Tidak ada aktivitas LVM lain pada disk ini sejak saat itu (tidak ada lagi yang ditambahkan atau dihapus). Apakah mungkin untuk "membatalkan" lvremove, atau memulihkan volume logis? Jika demikian, bagaimana saya melakukannya?

John P.
sumber

Jawaban:

13

LVM mencadangkan metadata ke /etc/lvm/backupdan /etc/lvm/archive. Di atas setiap file itu akan memberi tahu Anda waktu / data saat file dihasilkan sehingga kemungkinan Anda akan memiliki salinan metadata yang lebih lama seperti sebelum Anda menghapus LV. Saya percaya cadangan otomatis kapan saja perubahan metadata.

Berikut ini bisa berbahaya dan merusak jadi sangat berhati-hati dan jika mungkin memiliki cadangan penuh.

Perintah untuk mengembalikan cadangan metadata volumegroup ini adalah vgcfgrestore. Pastikan Anda membuat salinan saat ini dari konfigurasi kerja yang ada menggunakan vgcfgbackupperintah dengan flag -f untuk menentukan file yang berbeda untuk output sehingga Anda tidak mengubah file apa pun yang ada di / etc / lvm / backup atau / etc / lvm / arsipkan folder. Pastikan Anda mengubah konfigurasi saat ini dengan konfigurasi yang ingin Anda pulihkan untuk memverifikasi bahwa satu-satunya perubahan yang akan Anda terapkan adalah untuk membuat ulang LV yang baru saja dihapus. Memiliki cadangan penuh data Anda mungkin juga bukan ide yang buruk. Anda mungkin juga ingin mempertimbangkan untuk menghubungi vendor Linux Anda untuk mendapatkan dukungan / bimbingan jika Anda berada di bawah kontrak dukungan sebelum melanjutkan karena saya tidak pernah harus melakukan ini sendiri.

Semoga berhasil.

Pengaruh 3d
sumber
1
Membaca lebih dalam ke vgcfgrestore, sepertinya saya perlu mematikan setiap VM di kotak itu sebelum mencoba ini, atau berisiko merusak seluruh array. Sepertinya instruksi Anda akan berhasil, jadi saya menerima jawabannya, tetapi datanya tidak sepadan dengan risikonya. Terima kasih
John P
@ John P Ya saya agak membayangkan dengan VM dan semua ini akan menjadi hal yang sulit untuk dilakukan di lingkungan seperti itu. Saya kira salah satu mengambil ini adalah bahwa di masa depan mungkin prosedur untuk menghapus akun harus melibatkan 30 hari tanpa periode penghapusan.
3dinfluence
18

"Bisakah Anda lebih spesifik tentang mencari EFROM dan ETO dari file cadangan? Semua lv memiliki" start_extend "dari 0 di file cadangan saya jadi saya agak hilang :) Terima kasih! - user186975 24 Agustus '13 pada 17 : 06 "

Ok, saya akan sangat spesifik ... dengan cara paling sederhana untuk memulihkan volume logis.

Contoh:

1 - Saya telah menghapus volume logis saya!

$ sudo lvremove /dev/vg1/debian.root

2 - Hal pertama yang harus dilakukan adalah, cari file arsip di /etc/lvm/archive/vg1_(xxxxx).vg. Saya bisa melakukan itu, hanya melihat tanggal bahwa saya telah menghapus volume logis!

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

3 - Saya menemukannya!

-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**

Tanggal dimana saya melakukan lvremove !!! ... itu beberapa menit yang lalu ..

4 - Mari kita lihat file!

$ 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 - Lakukan tes sebelum memulihkannya!

$ 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 - Ok, sekarang ulangi baris perintah, tanpa (--test)

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

7 - Periksa!

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

8 - Jika logis tidak aktif, lakukanlah!

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

Semuanya

Saya harap ini dapat membantu orang lain yang mencari solusi ini!

Rafael Cristaldo
sumber
5

Hal termudah untuk pulih dari lvremove (dengan anggapan Anda tidak menulis hingga luasan tempat LV tinggal) adalah:

Temukan saja cadangan metadata Anda di / etc / lvm / arsip dan cari tahu

a) yang
meluas LV yang berada di (EFROM, ETO) b) PV mana LV Anda berada dan yang meluas pada PV yang digunakannya (PFROM, PTO)

Setelah Anda mendapatkan info ini, Anda membuat LV baru dengan ukuran yang sama persis pada PV yang sama persis tanpa menyeka 8kB pertama LV:

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO
termoman
sumber
1
Bisakah Anda lebih spesifik tentang mencari EFROM dan ETO dari file cadangan? Semua lv memiliki "start_extend" dari 0 di file cadangan saya jadi saya agak hilang :) Terima kasih!
3

(Seperti yang dijawab oleh thermoman sebelumnya) cara termudah untuk membuat ulang volume LVM yang dihapus adalah dengan membuatnya dengan lvcreate tanpa penekanan dan memastikannya akan berada pada posisi yang sama pada disk. (Perintah dari jawaban termoman tidak berhasil.)

Periksa ukuran dan posisi volume logis yang dihapus seperti sebelum penghapusan dengan membaca file di / etc / lvm / arsip. Ukuran volume berada di extent_countdalam segment1(atau jumlah segment*/extent_countnilai jika memiliki beberapa luasan). Posisi ada di stripesbagian setelah volume fisik alias (mis pv0.).

Misalnya, bagian volume mungkin terlihat seperti ini:

    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
                            ]
                    }
            }
            ...
    }

Ukuran examplevolume ini adalah 1024 dan terletak di / dev / somedisk mulai dari 30720.

Hitung tingkat terakhir sebagai mulai + ukuran -1 = 30720 + 1024 - 1 = 31743. Untuk membuat ulang masalah volume berikut:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743
Tuoma
sumber
Jawaban ini baru saja menyelamatkan malam saya kemarin! Saya memiliki XenServer yang rusak yang menghapus LV yang salah karena kesalahan API ...: o
Elektordi
2

Saya memiliki situasi yang serupa. Saya memiliki semua PV yang berisi LV yang diinginkan, tetapi VG saya menunjukkan PV yang hilang dan 0 LV. Saya pulih dengan melakukan hal berikut:

  1. Menjadi root
  2. Jalankan pvsuntuk mengumpulkan UUID untuk semua drive.
  3. Tinjau file di / etc / lvm / arsip hingga saya menemukan satu yang mencantumkan semua UUID yang sama.
  4. Buat salinan yang berfungsi dari file konfigurasi yang diarsipkan, dan mulai mengedit.
  5. Di physical_volumesbagian ini, atur device =garis agar sesuai dengan perangkat / UUID saat ini yang dilaporkan oleh pvs, hapus semua "MISSING"flag, dan hapus semua pvNbagian yang benar-benar hilang.
  6. Di logical_volumesbagian tersebut, hapus semua cantuman yang memiliki garis pada pvNbagian yang sudah tidak ada.
  7. Itu dia, lalu aku berlari

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

  8. Ketika itu berhasil, saya berlari kembali tanpa --testopsi.

Saya mencapai situasi khusus saya dengan memperluas VG dengan PVs sdg dan sdh. Kemudian saya membuat LV baru, menentukan /dev/sdg /dev/sdhpada baris perintah sehingga saya tahu LV baru ada di drive tersebut. Lalu saya memindahkan hanya drive-drive itu ke mesin baru. Mesin lama sangat marah tentang drive yang hilang, dan ketika saya menghapusnya secara paksa, itu juga menghapus SEMUA LV. Kekecewaan.

Lain kali, tentu saja, saya akan membuat VG baru untuk menghindari masalah ini.

secara nortal
sumber