LVM: hajmni o'zgartirish va snapshot
LVM asoslari maqolasida PV → VG → LV tuzilmasi qurildi. LVM’ning asosiy amaliy foydasi aynan shu yerda namoyon bo'ladi: LV hajmini u ishlatilayotgan paytda, diskni umuman qayta bo'limlamasdan o'zgartirish va undan bir lahzada snapshot olish mumkin.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- LV’ni
lvextendbilan kengaytirish va uning fayl tizimini unga moslab o'zgartirish; - LV’ni kichraytirish nega xavfli ekanini va buni qanday xavfsizroq qilishni tushuntirish;
lvcreate -sbilan snapshot yaratish va u qanday ishlashini tushuntirish;- o'zgarishlarni ortga qaytarish yoki ma’lumotlarni saqlab qolish uchun snapshot’dan foydalanish;
- snapshot’da joy tugab qolishi nega xavfli ekanini tushuntirish.
LV’ni kengaytirish
Agar VG'da bo'sh joy bo'lsa, LV’ni u ishlatilayotgan paytda kengaytirish mumkin. Bu ikki bosqichli jarayon: avval LVM darajasida, keyin fayl tizimi darajasida.
1. VG'dagi bo'sh joyni tekshiring
VFree ustuni qancha bo'sh joy borligini ko'rsatadi. Agar bo'sh joy bo'lmasa, avval VG'ga yangi PV qo'shish kerak:
2. LV’ni kengaytiring
+10G — joriy hajmga qo'shiladigan miqdor (mutlaq yangi hajm emas). Barcha bo'sh joyni berish uchun:
3. Fayl tizimini yangi hajmga moslang
lvextend faqat block qurilma hajmini o'zgartiradi — fayl tizimi bu haqda avtomatik bilmaydi. Fayl tizimi turiga qarab qo'shimcha buyruq kerak.
ext4 uchun:
xfs uchun (faqat mount qilingan holda kengaytirish mumkin):
Ikkala buyruqni alohida ishga tushirish o'rniga ext4 uchun buni bitta amalda bajarish mumkin:
-r flag'i lvextend dan keyin mos resize buyrug'ini avtomatik chaqiradi.
Tekshirish:
Info
ext4 ham, xfs ham onlayn kengaytirishni qo'llab-quvvatlaydi — LV mount qilingan va faol ishlatilayotgan bo'lsa ham hajmni o'zgartirish ishlaydi. Bu LVM’ning eng amaliy afzalliklaridan biri.
LV’ni kichraytirish — nega ehtiyotkorlik kerak
Kengaytirish xavfsiz va deyarli har doim onlayn bajariladi. Kichraytirish esa boshqacha ishlaydi: avval fayl tizimining o'zini kichraytirish kerak va faqat shundan keyin LV hajmini o'sha yangi, kichikroq hajmga moslash mumkin — kengaytirishga teskari tartib.
Danger
Tartibni teskari qilish (fayl tizimini kichraytirishdan oldin LV’ni kichraytirish) ma’lumotlar yo'qolishiga olib keladi: fayl tizimi hali ham eski, kattaroq hajmni kutadi, block qurilma esa allaqachon kichikroq. Bundan tashqari, xfs fayl tizimini umuman kichraytirib bo'lmaydi — faqat kattalashtirish mumkin.
ext4 uchun to'g'ri tartib (avval fayl tizimini unmount qilish tavsiya etiladi):
sudo umount /mnt/app
sudo e2fsck -f /dev/vg_data/lv_app
sudo resize2fs /dev/vg_data/lv_app 15G
sudo lvreduce -L 15G /dev/vg_data/lv_app
sudo mount /dev/vg_data/lv_app /mnt/app
xfs da kichraytirish qo'llab-quvvatlanmagani uchun kerak bo'lganda odatiy yondashuv: yangi, kichikroq LV yaratish, ma’lumotlarni rsync bilan unga ko'chirish, so'ng eski LV’ni o'chirish.
Production’da kichraytirishni hech qachon tekshirilgan zaxira nusxa va texnik xizmat oynasisiz bajarmaslik kerak.
Snapshot’lar: ular nima va qanday ishlaydi
Snapshot LV holatini muayyan lahzada "muzlatib", uni alohida LV sifatida taqdim etadi. Snapshot yaratish o'sha lahzadagi fayllarning to'liq to'plamini nusxalamaydi — LVM faqat keyinchalik asl LV’da o'zgaradigan bloklarni kuzatadi (copy-on-write).
lv_app (original) ──snapshot──> lv_app_snap (state at that moment)
│
└─ subsequent writes only affect lv_app,
lv_app_snap keeps showing the unchanged state
Snapshot yaratish
-s— snapshot yaratish rejimi;-n lv_app_snap— snapshot nomi;-L 2G— snapshot uchun ajratilgan joy. Bu asl LV hajmi emas — faqat o'zgargan bloklarni kuzatish uchun zaxira.
Tekshirish:
Origin ustuni snapshot qaysi LV’dan olinganini, Data% esa snapshot zaxirasi hozir qanchalik to'lganini ko'rsatadi.
Warning
Agar snapshot uchun ajratilgan joy (-L) to'lib qolsa, snapshot ishlatib bo'lmaydigan (invalid) holatga keladi. Asl LV’ga og'ir yozish davrida snapshot’ni kuzatib boring va Data% qiymatini muntazam tekshiring.
Ko'zdan kechirish uchun snapshot’ni mount qilish
Snapshot’ni faqat o'qish uchun mount qilish tavsiya etiladi — snapshot’ning butun ma’nosi shunda: o'sha lahzadagi holatni ko'zdan kechirish yoki uning zaxira nusxasini olish.
Snapshot’dan ortga qaytarish (asl LV’ni oldingi holatga tiklash)
lvconvert --merge snapshot holatini asl LV’ga qaytaradi va shu jarayonda snapshot’ni yo'q qiladi. Agar LV faol ishlatilayotgan bo'lsa, merge’ni yakunlash ko'pincha qayta yuklash yoki VG'ni qayta faollashtirishni talab qiladi — buyruq chiqishidagi ogohlantirishni diqqat bilan o'qing.
Danger
lvconvert --merge qaytarib bo'lmaydi: snapshot olingandan beri asl LV’ga yozilgan har bir o'zgarish yo'qoladi. Buni faqat ma’lumotlarni haqiqatan ortga qaytarish kerak bo'lganda, ataylab qabul qilingan va tasdiqlangan qaror sifatida bajaring.
Snapshot’ni olib tashlash (ortga qaytarmasdan)
Agar snapshot faqat vaqtinchalik ko'zdan kechirish yoki zaxira uchun ishlatilgan bo'lsa va asl LV’dagi o'zgarishlarni saqlab qolish kerak bo'lsa:
Bu snapshot’ni butunlay o'chiradi va asl LV’ga hech qanday ta’sir qilmaydi.
Klassik (thick) va thin snapshot’lar
Yuqorida lvcreate -s -L 2G bilan yaratilgan snapshot — klassik (thick) snapshot: VG'ning qat’iy bir qismi oldindan ajratiladi va asl LV’ga yozish shu zaxiradan oshib ketsa, snapshot invalid (ishlatib bo'lmaydigan) holatga keladi. Zamonaviy LVM muqobil variantni taklif qiladi — buning o'rniga thin pool'dan ajratiladigan thin snapshot’lar:
sudo lvcreate -L 50G -T vg_data/thinpool # create a thin pool
sudo lvcreate -V 20G -T vg_data/thinpool -n lv_app # a thin LV inside it
sudo lvcreate -s -n lv_app_snap vg_data/lv_app # snapshot: no -L needed
| Jihat | Klassik snapshot (-L) |
Thin snapshot (thin pool) |
|---|---|---|
| Hajmni ajratish | Yaratishda belgilangan qat’iy zaxira (-L) |
Kerak bo'lganda umumiy pool’dan oladi |
| Joy tugab qolishi | Snapshot invalid bo'ladi | Butun pool to'ladi — asl LV ham, snapshot’lar ham to'xtab qoladi |
| Snapshot’lar soni | Har biri o'z yozish jarimasini olib yuradi | Ko'p snapshot pool’ni arzon bo'lishadi |
| Odatiy foydalanish | Yangilanishdan oldin bir martalik "xavfsizlik nuqtasi" | Tez-tez/avtomatlashtirilgan snapshot’lar, konteyner saqlash qatlami |
Unumdorlik haqidagi eslatma ikkalasiga ham tegishli: klassik snapshot mavjud ekan, asl LV’ga har bir yozish eski blokni snapshot’ga copy-on-write qilishni ishga tushiradi, shuning uchun og'ir yozish yuklamalari snapshot olib tashlanmaguncha sekinroq ishlaydi. Xavf shunchaki "snapshot to'ladi" (klassik) dan "pool to'ladi" (thin) ga ko'chadi — thin pool’larda pool’ning Data% qiymatini kuzating va u tugashidan oldin kattalashishi uchun thin_pool_autoextend_threshold ni sozlang.
Snapshot’dan qachon foydalanish kerak
| Vaziyat | Snapshot foydalimi? |
|---|---|
| Katta yangilanishdan oldin "xavfsizlik nuqtasi" olish | Ha — biror narsa noto'g'ri ketsa, --merge bilan ortga qaytarish mumkin |
| Ishlab turgan ma’lumotlar bazasidan izchil zaxira olish | Ha — snapshot’ni mount qilib, undan tar/rsync bilan nusxalang |
| Uzoq muddatli arxivlash | Yo'q — snapshot doimiy saqlash uchun mo'ljallanmagan; u asl LV’ga bog'liq bo'lib qoladi |
| Disk joyini tejash | Yo'q — snapshot’ning o'ziga ham qo'shimcha joy kerak |
Keng tarqalgan xatolar
Snapshot hajmini juda kichik tanlash
Snapshot’ning -L hajmi asl LV hajmiga qarab emas, asl LV qanchalik o'zgarishi kutilayotganiga qarab tanlanishi kerak. Og'ir yoziladigan LV’dagi kichik snapshot tezda to'ladi va invalid bo'ladi.
resize2fs/xfs_growfs ni unutish
lvextend faqat block qurilma hajmini o'zgartiradi. Mos fayl tizimi darajasidagi buyruq ishga tushmaguncha df eski hajmni ko'rsatishda davom etadi.
xfs ni kichraytirishga urinish
xfs_growfs faqat kattalashtiradi. Agar kichraytirish kerak bo'lsa, yechim fayl tizimini emas, LV’ni almashtirish (yangi LV + ma’lumotlarni ko'chirish).
Mashqlar
- O'chirib tashlasa bo'ladigan VM’da oldingi maqoladan qolgan
lv_appLV’ni 5 GiB ga kengaytiring va natijanidf -hTbilan tasdiqlang. lv_appdan 1 GiB hajmli snapshot oling, unga fayl yozing (snapshot’ga emas, asl LV’ga), so'ng snapshot’ni mount qilib,Data%qiymatini kuzating.--mergebilan snapshot’dan ortga qayting va fayl asl LV’dan yo'qolganini tasdiqlang.ext4LV’ni to'g'ri tartibda kichraytiring (unmount → fsck → resize2fs → lvreduce) va har bir qadamda natijani tekshiring.
Mashqni bajardim deyish uchun: fayl tizimi turi (ext4 yoki xfs) va maqsadli amal (kengaytirish yoki kichraytirish) berilganda u onlayn, oflayn qo'llab-quvvatlanishini yoki umuman qo'llab-quvvatlanmasligini ayta olishingiz kerak.
Xulosa
lvextend (kerak bo'lsa -r bilan) LV’ni va uning fayl tizimini birga, odatda onlayn kengaytiradi; lvreduce teskari tartibni talab qiladi — avval fayl tizimi, keyin LV — va xfs da umuman qo'llab-quvvatlanmaydi. Snapshot LV’ning muayyan vaqtdagi holatini copy-on-write orqali saqlaydi va uni lvconvert --merge bilan tiklash yoki lvremove bilan tashlab yuborish mumkin. Ikkalasi ham VG'dagi bo'sh joyga bog'liq — shuning uchun Disk bandligi (disk usage) va Disk to'lganda troubleshooting maqolalarida ko'rilgan monitoring LVM muhitida ham xuddi shunday dolzarb qoladi.