Solusi 1:
Saya baru saja mencoba pemutakhiran berbasis snapshot dengan Ubuntu. Dan ya, saya perlu mem-boot ulang beberapa kali. Pertama, ganti nama root-lv asli menjadi yang lain, sehingga Anda dapat memberikan snapshot nama aslinya (karena pemutakhiran membuat banyak perubahan dan perubahan lebih cepat pada snapshot daripada aslinya ):
# 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' dipasang sebagai root dan Anda dapat melakukan pemutakhiran. 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 lama)
# lvremove lvm/root-new
Jika Anda ingin melakukan perubahan, jalankan saja (dari sistem 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 dengan reboot. Sistem akan langsung menolak melakukan penggabungan, karena volumenya terbuka. Jadi penggabungan akan dimulai saat booting dan dilanjutkan saat Anda sudah dapat bekerja dengan sistem.
Oh, dan ngomong-ngomong:Saat berganti antar sistem, ingatlah untuk menggunakan kernel yang sesuai. Karena /boot bukan bagian dari lvm, kernel lama dan baru akan ditempatkan berdampingan.
Solusi 2:
Oke, saya pikir saya sudah mengetahuinya dengan membaca ulang HOWTO 3.8.
- Snapshot hanya-baca (seperti LVM1) berisi perbedaan tingkat blok setelah pembuatan snapshot - snapshot asli tetap diubah, tetapi snapshot mempertahankan representasi aslinya. Membaca dari snapshot menyajikan data seperti yang terlihat pada saat itu.
- Snapshot baca-tulis (default di LVM2) dapat ditulis ke:itu adalah garpu dari partisi asli. Menulis untuk snapshot tidak mengubah aslinya.
Cara kerja snapshot adalah kumpulan perubahan tingkat blok dari aslinya. Jadi, ketika aslinya ditulis, hal-hal berikut terjadi:
- Sesuatu mencoba menulis ke aslinya.
- Yang asli dibaca, dan blok dari yang asli disalin ke snapshot.
- Yang asli diubah.
- Snapshot berisi "reverse-differences" - perubahan yang membuat tampilan asli seperti saat snapshot dibuat.
Jadi, membuang snapshot tidak akan memengaruhi yang asli sama sekali - karena yang asli telah diubah, dan snapshot hanya berisi daftar perubahan tersebut.
Menjawab pertanyaan saya sendiri:
Buat snapshot baru dengan LVM. Jika pembaruan dapat dikonfigurasi untuk menulis ke titik pemasangan snapshot, gunakan snapshot R/W. Jika tidak, baik RO atau R/W sudah cukup.
Lalu:
- Jika menulis ke snapshot R/W titik pemasangan, komit dengan menulis snapshot ke aslinya, dan mengembalikan dengan membuang snapshot.
- Jika menulis ke asli titik pemasangan, komit dengan membuang snapshot, dan mengembalikan dengan menulis dari snapshot ke aslinya.
Saya masih belum menemukan alat khusus untuk melakukan penggabungan ini - dan, mengingat skenario saya tidak persis seperti penggunaan snapshot yang dimaksudkan, mungkin tidak ada satu pun. Kedengarannya seperti pekerjaan untuk rdiff.
Solusi 3:
Fungsi penggabungan snapshot LVM2 / device mapper tersedia jika Anda menjalankan Linux 2.6.33+ dan menggunakan LVM 2.0.58+:
lvconvert --merge
Lihat postingan ini:http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/
Ini mereferensikan http://kernelnewbies.org/Linux_2_6_33 (lihat bagian 5, MD/DM) dan log perubahan LVM di 2.0.58:ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
Tapi saya belum bisa memberi tahu Anda cara menggunakannya dengan benar;-)
Solusi 4:
LVM bekerja di level blok. Ia bahkan 'tidak tahu' apa itu sistem file. Jadi Anda tidak dapat memotret hanya direktori tertentu, kecuali sistem file dari volume LVM yang berbeda dipasang di sana.
Saat Anda membuat snapshot LVM, Anda benar-benar meminta duplikat volume 'copy on write'. Setiap blok yang akan diubah pada volume yang disnapshot akan disimpan tanpa diubah di snaphot terlebih dahulu. Jadi untuk 'melakukan perubahan' Anda tidak perlu melakukan apapun. Hapus saja volume snapshot.
Saya tidak begitu 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 di dokumentasi LVM di suatu tempat. Apa pun itu, Anda mungkin perlu memulai ulang apa pun yang telah diubah, memulai ulang mungkin merupakan ide yang bagus.
Solusi 5:
- Tidak ada alasan untuk menggabungkan beberapa. Hapus snapshot saja, sumber LV tetap diubah
- Penggabungan diperlukan untuk mengembalikan perubahan
lvconvert --merge <snapshot name>
- LVM berfungsi dengan perangkat blok. Setiap perubahan terkait FS harus dilakukan oleh utilitas khusus (xfs_growfs, e2fsck, ...) menurut jenis FS
Snapshot 'membekukan' status LV asli. Hapus snapshot berarti lupakan status itu. Menggabungkan cuplikan berarti kembali ke keadaan tersebut
Namun di dalam LVM, ini menyimpan data yang ditulis ulang dalam snapshot:pastikan ukuran snapshot memenuhi jumlah perubahan yang diharapkan pada LV dan snapshot