Komit atau kembalikan snapshot LVM Linux?

16

Saya akan melakukan pembaruan eksperimental pada server CentOS 5 saya. Jika pemutakhiran gagal, saya ingin dapat mencadangkan perubahan pada sistem berkas. Skenario ini tampaknya mirip dengan contoh pada Bagian 3.8 dari LVM HOWTO untuk LVM2 snapshot baca-tulis - tetapi contohnya agak kurang dalam bagaimana-caranya yang sebenarnya.

  1. Bagaimana saya melakukan perubahan, menggabungkannya kembali ke partisi asli?

  2. Bagaimana saya mengembalikan perubahan, mengembalikan sistem file kembali ke keadaan semula? Haruskah saya berasumsi bahwa saya perlu me-restart beberapa layanan, jika tidak langsung reboot?

  3. Apakah mungkin untuk memotret direktori tertentu saja pada partisi, atau apakah itu operasi partisi?

Shewfig
sumber

Jawaban:

11

Fungsi penggabungan snapshot mapper LVM2 / perangkat tersedia jika Anda menjalankan Linux 2.6.33+ dan menggunakan LVM 2.0.58+:

lvconvert --merge

Lihat posting ini: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

Ini referensi http://kernelnewbies.org/Linux_2_6_33 (lihat bagian 5, MD / DM) dan LVM changelog di 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Tapi saya belum bisa memberi tahu Anda bagaimana menggunakannya dengan benar ;-)

Bertrand Mathieu
sumber
dmsetup targetsharus memperlihatkan snapshot-gabungan jika itu adalah kasus gabungan perintah, diterapkan pada snapshot-lv akan kembali ke keadaan di mana snapshot diambil.
Nils
OP tampaknya bingung tentang melakukan perubahan melalui semacam langkah penggabungan. Perubahan sedang dilakukan saat ukuran foto bertambah besar. Snapshot (dari perubahan) adalah info yang diperlukan untuk mendukungnya melalui lvconvert --merge. Jika OP senang dengan perubahannya, ia dapat menghapus snapshot melalui lvremove.
Vince
20

Saya baru saja mencoba upgrade berbasis snapshot dengan Ubuntu. Dan ya, saya perlu reboot beberapa kali. Pertama, ganti nama root-lv menjadi sesuatu yang lain, sehingga Anda dapat memberikan snapshot nama asli (karena upgrade membuat banyak perubahan dan perubahan lebih cepat pada snapshot daripada yang asli):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

Ukuran harus dipilih dengan tepat. Kemudian reboot, sehingga lvm / ubuntu 'baru' di-mount sebagai root dan Anda dapat melakukan upgrade. Sekarang Anda dapat menguji versi baru dan bahkan mengubah ke sistem lama dengan

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

Jika Anda ingin menghentikan pemutakhiran, jalankan saja (dari sistem yang lama)

# lvremove lvm/root-new

Jika Anda ingin melakukan perubahan, jalankan saja (dari sistem yang lama)

# lvconvert --merge lvm/root-new

atau, dari sistem baru

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

diikuti oleh reboot. Sistem akan menolak untuk melakukan penggabungan segera, karena volume terbuka. Jadi penggabungan akan dimulai selama boot dan dilanjutkan selagi Anda sudah dapat bekerja dengan sistem.

Oh, dan omong-omong: Saat mengubah antar sistem, ingatlah untuk menggunakan kernel yang sesuai. Karena / boot bukan bagian dari lvm, kernel lama dan baru akan ditempatkan di sana berdampingan.

Viktor Dick
sumber
Terima kasih atas jawaban anda. Saya baru saja memutar ulang prosedur Anda dalam mesin virtual CentOS 7 dan itu bekerja seperti pesona. Setelah mengatur ulang mesin virtual saya di tengah proses penggabungan, subsistem LVM melanjutkannya saat sistem masih mengakses file yang ditingkatkan.
Anderson Medeiros Gomes
Sebagian dari jawaban ini tampaknya menyarankan Anda melakukan perubahan melalui lvconvert --merge. Saat ukuran foto bertambah besar, perubahan juga dilakukan. Lvconvert --merge mengembalikan (mundur) perubahan menggunakan info snapshot.
Vince
10

Ok, saya pikir saya sudah menemukannya dari membaca kembali HOWTO 3.8.

  • Snapshots hanya-baca (seperti LVM1) berisi perbedaan level blok setelah pembuatan snapshot - yang asli masih berubah, tetapi snapshot tetap mempertahankan representasi dari yang asli. Membaca dari yang snapshot hadiah data ini pada saat itu.
  • Snapshot baca-tulis (default dalam LVM2) dapat ditulis ke: mereka adalah fork dari partisi asli. Menulis untuk para snapshot tidak berubah aslinya.

Cara kerja snapshot adalah serangkaian perubahan tingkat blok dari aslinya. Jadi, ketika aslinya ditulis untuk, hal-hal berikut terjadi:

  1. Sesuatu mencoba menulis ke aslinya.
  2. Asli dibaca, dan blok dari aslinya disalin ke snapshot.
  3. Asli diubah.
  4. Snapshot berisi "kebalikan-perbedaan" - perubahan yang membuat tampilan aslinya seperti saat snapshot dibuat.

Jadi, membuang snapshot sama sekali tidak akan memengaruhi yang asli - karena yang asli telah diubah, dan snapshot itu hanya berisi daftar perubahan itu.

Menjawab pertanyaan saya sendiri:

Buat snapshot baru dengan LVM. Jika pembaruan dapat dikonfigurasi untuk menulis ke titik pemasangan snapshot, gunakan snapshot R / W. Kalau tidak, RO atau R / W akan dilakukan.

Kemudian:

  • Jika menulis ke titik pemasangan snapshot R / W , komit dengan menulis snapshot ke aslinya, dan kembali dengan membuang snapshot.
  • Jika menulis ke titik pemasangan asli , komit dengan membuang snapshot, dan kembali dengan menulis dari snapshot ke aslinya.

Saya masih belum menemukan alat khusus untuk melakukan penggabungan ini - dan, mengingat skenario saya tidak persis seperti penggunaan snapshots, mungkin tidak ada satu pun. Kedengarannya seperti pekerjaan untuk rdiff.

Shewfig
sumber
Belum ada alat penggabung LVM yang tersedia. Sudah ada dalam karya, tapi saya tidak percaya itu lengkap.
Ignacio Vazquez-Abrams
alat gabungan ada sekarang (setidaknya di Ubuntu Trusty) - lvconvert --merge <snapshot-name>akan "mengembalikan" disk asli Anda ke snapshot itu, dan menghapus snapshot itu. Anda tentu saja dapat mengembalikannya dengan cepat segera.
dpb
3

LVM bekerja di level blok. Bahkan 'tidak tahu' apa itu sistem file. Jadi, Anda tidak dapat memotret hanya direktori tertentu, kecuali jika sistem file dari volume LVM yang berbeda dipasang di sana.

Ketika Anda membuat snapshot LVM Anda sebenarnya meminta duplikat volume 'copy on write'. Blok apa pun yang akan diubah pada volume snapshotted akan disimpan tanpa dimodifikasi di snaphot terlebih dahulu. Jadi untuk 'melakukan perubahan' Anda tidak perlu melakukan apa-apa. Hapus saja volume snapshot.

Saya tidak tahu apa cara yang disarankan untuk 'mengembalikan perubahan', karena saya tidak pernah menggunakan LVM dalam skenario seperti itu, tapi saya kira itu dijelaskan dengan baik dalam dokumentasi LVM di suatu tempat. Apa pun itu, Anda mungkin perlu me-restart apa pun yang diubah, reboot mungkin ide yang bagus.

Jacek Konieczny
sumber
2
  1. Tidak ada alasan untuk menggabungkan beberapa. Hapus saja snapshot, sumber LV tetap diubah
  2. Penggabungan diperlukan untuk mengembalikan perubahan lvconvert --merge <snapshot name>
  3. LVM bekerja dengan perangkat blok. Setiap perubahan terkait-FS harus dilakukan oleh utilitas khusus (xfs_growfs, e2fsck, ...) sesuai dengan tipe FS

Snapshot 'beku' keadaan LV asli. Hapus snapshot berarti lupakan keadaan itu. Gabungkan snapshot berarti kembali ke kondisi itu

Tetapi di dalam LVM menyimpan data yang ditulis ulang dalam snapshot: pastikan ukuran snapshot memenuhi jumlah perubahan yang diharapkan pada LV dan snapshot

deman_killer
sumber
Sebenarnya, snapshot tidak membeku apa pun. Ini mencatat perubahan di tempat ekstra sehingga dapat dikembalikan yang terakhir jika diinginkan.
Vince
0

Dokumentasinya membingungkan. Sepertinya saya bahwa lvcreate --merge berarti mengembalikan semua perubahan, dan lvremove berarti melakukan perubahan. Perbedaannya terletak pada bagaimana Anda menggunakannya.

Dalam kebanyakan kasus, Anda hanya menggunakan snapshot sebagai salinan hanya titik waktu baca dari volume live, dan volume live terus berubah. Dalam hal ini, jika Anda menggabungkan, secara logis itu berarti Anda akan menimpa volume langsung dengan salinan yang dibekukan, atau dengan kata lain, menggabungkan berarti perubahan rollback, dan menghapus berarti melakukan perubahan.

Jika Anda menulis ke snapshot (opsi baru dengan LVM2), yang tampaknya bukan perilaku default, dan mungkin memerlukan perubahan konfigurasi di tempat lain untuk membuat aplikasi menulis ke snapshot alih-alih volume asli, maka kebalikannya akan benar.

Harap berhati-hati ketika berhadapan dengan snapshot, karena beberapa orang akan menganggap Anda bermaksud menggunakannya satu arah dan akan memberi Anda petunjuk yang dapat menghancurkan sistem Anda jika Anda beroperasi dengan asumsi yang berlawanan!

RedScourge
sumber
Anda menulis ke snapshot hanya dengan memasang snapshot; apa yang dipasang di mana tidak ada hubungannya dengan default LVM - tidak peduli banyak tentang apa yang sebenarnya Anda lakukan dengan setiap volume logis, apakah itu snapshot atau tidak, itu hanya melacak apakah itu terbuka atau tidak.
Josip Rodin