Skip to content

LVM: hajmni o'zgartirish va snapshot

LVM asoslari maqolasida PV → VG → LV tuzilmasi yaratildi. LVM'ning asosiy amaliy foydasi shu yerda ko'rinadi: LV hajmini ishlatilayotgan holatda, diskni butunlay qayta bo'lmasdan o'zgartirish va undan bir zumda snapshot olish mumkin.

O'quv maqsadlari

Maqolani tugatgach:

  • lvextend bilan LV hajmini kengaytira va fayl tizimini shu hajmga moslay olasiz;
  • LV hajmini kamaytirish nega xavfli ekanini va qanday xavfsizroq bajarilishini tushunasiz;
  • lvcreate -s bilan snapshot yarata olasiz va uning qanday ishlashini tushunasiz;
  • snapshotdan foydalanib, o'zgarishlarni bekor qilish (rollback) yoki ma'lumotni saqlash yo'lini bilasiz;
  • snapshot hajmi to'lib qolishi nima uchun xavfli ekanini tushunasiz.

LV hajmini kengaytirish

VG'da bo'sh joy bo'lsa, LV'ni ishlatilayotgan holatda kengaytirish mumkin. Bu ikki bosqichdan iborat: avval LVM darajasida, keyin fayl tizimi darajasida.

1. VG'dagi bo'sh joyni tekshirish

sudo vgs vg_data

VFree ustuni qancha bo'sh joy borligini ko'rsatadi. Bo'sh joy bo'lmasa, avval VG'ga yangi PV qo'shish kerak:

sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd

2. LV'ni kengaytirish

sudo lvextend -L +10G /dev/vg_data/lv_app

+10G — joriy hajmga qo'shiladigan miqdor (mutlaq yangi hajm emas). Butun bo'sh joyni berish uchun:

sudo lvextend -l +100%FREE /dev/vg_data/lv_app

3. Fayl tizimini yangi hajmga moslash

lvextend faqat blok qurilma hajmini o'zgartiradi — fayl tizimi bundan avtomatik xabardor bo'lmaydi. Fayl tizimi turiga qarab qo'shimcha buyruq kerak.

ext4 uchun:

sudo resize2fs /dev/vg_data/lv_app

xfs uchun (faqat mount qilingan holatda kengaytiriladi):

sudo xfs_growfs /mnt/app

Ikkala buyruqni birma-bir bajarish o'rniga, ext4 uchun bitta amalda bajarish mumkin:

sudo lvextend -r -L +10G /dev/vg_data/lv_app

-r bayrog'i lvextend dan keyin mos resize buyrug'ini avtomatik chaqiradi.

Tekshirish:

df -hT /mnt/app
lvs vg_data/lv_app

Info

ext4 va xfs — ikkalasi ham online kengaytirishni qo'llab-quvvatlaydi: LV mount qilingan, ishlatilayotgan holatda ham kengaytirish bajariladi. Bu LVM'ning eng amaliy afzalliklaridan biri.

LV hajmini kamaytirish — nega ehtiyot bo'lish kerak

Kengaytirish xavfsiz va deyarli har doim online bajariladi. Kamaytirish esa boshqacha: fayl tizimi avval o'zi kichraytirilishi, so'ng LV shu yangi, kichikroq hajmga moslashtirilishi kerak — tartib teskari.

Danger

Tartibni buzish (avval LV'ni, keyin fayl tizimini kichraytirish) ma'lumot yo'qolishiga olib keladi: fayl tizimi hali eski, katta hajmga mo'ljallangan bo'ladi, lekin blok qurilma allaqachon kichik. 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 fayl tizimida kamaytirish qo'llab-quvvatlanmagani uchun, kerak bo'lsa, odatda: yangi kichikroq LV yaratiladi, ma'lumot rsync bilan ko'chiriladi, so'ng eski LV o'chiriladi.

Production'da kamaytirish operatsiyasi tekshirilgan backup va maintenance oynasisiz bajarilmasligi kerak.

Snapshot: mavzu va qanday ishlaydi

Snapshot — LV'ning ma'lum bir vaqtdagi holatini "muzlatib" qo'yadigan, alohida LV sifatida ko'rinadigan yozuv. Snapshot yaratilgan payt fayllarning to'liq nusxasi ko'chirilmaydi — LVM faqat asl LV'da keyinchalik o'zgargan bloklarni kuzatib boradi (copy-on-write).

lv_app (asl)  ──snapshot──>  lv_app_snap (o'sha paytdagi holat)
     └─ keyingi yozuvlar faqat lv_app'ga ta'sir qiladi,
        lv_app_snap o'zgarmagan holatni ko'rsatishda davom etadi

Snapshot yaratish

sudo lvcreate -s -n lv_app_snap -L 2G /dev/vg_data/lv_app
  • -s — snapshot yaratish rejimi;
  • -n lv_app_snap — snapshot nomi;
  • -L 2G — snapshot uchun ajratilgan joy. Bu asl LV hajmi emas, faqat o'zgaradigan bloklarni yozib borish uchun zaxira.

Tekshirish:

sudo lvs -o+lv_size,origin,data_percent

Origin ustuni snapshot qaysi LV'dan olinganini, Data% esa snapshot zaxirasi qancha to'lganini ko'rsatadi.

Warning

Snapshot uchun ajratilgan joy (-L) to'lib qolsa, snapshot ishlatib bo'lmas holga keladi (invalid). Asl LV'da faol yozuv ko'p bo'lgan davrda snapshotni kuzatib borish va Data% ko'rsatkichini muntazam tekshirish kerak.

Snapshotni tekshirish uchun mount qilish

sudo mkdir -p /mnt/app_snap
sudo mount -o ro /dev/vg_data/lv_app_snap /mnt/app_snap

Snapshot faqat o'qish uchun mount qilinishi tavsiya etiladi — bu snapshot maqsadidan kelib chiqadi: o'sha paytdagi holatni tekshirish yoki undan backup olish.

Snapshotdan rollback (asl LV'ni oldingi holatga qaytarish)

sudo umount /mnt/app
sudo lvconvert --merge /dev/vg_data/lv_app_snap

lvconvert --merge snapshotdagi holatni asl LV'ga qaytaradi, snapshot esa shu jarayonda yo'q qilinadi. LV faol ishlatilayotgan bo'lsa, merge to'liq amalga oshishi uchun ko'pincha reboot yoki VG'ni qayta faollashtirish kerak bo'ladi — buyruq natijasidagi ogohlantirishni o'qing.

Danger

lvconvert --merge qaytarib bo'lmaydigan amal: snapshot yaratilgandan keyin asl LV'ga yozilgan barcha o'zgarish yo'qoladi. Buni faqat "ma'lumotni ataylab eski holatga qaytarish" kerak bo'lgan holatda, tasdiqlangan qaror sifatida bajaring.

Snapshotni olib tashlash (rollback qilmasdan)

Agar snapshot faqat vaqtincha tekshirish yoki backup uchun ishlatilgan bo'lsa va asl LV'dagi o'zgarishlar saqlanishi kerak bo'lsa:

sudo umount /mnt/app_snap
sudo lvremove /dev/vg_data/lv_app_snap

Bu snapshotni butunlay o'chiradi, asl LV'ga hech qanday ta'sir qilmaydi.

Snapshot qachon ishlatiladi

Stsenariy Snapshot foydami?
Katta yangilanish oldidan "xavfsizlik nuqtasi" olish Ha — muammo chiqsa --merge bilan qaytarish mumkin
Ishlayotgan bazadan izchil backup olish Ha — snapshotni mount qilib, undan tar/rsync bilan nusxa olinadi
Uzoq muddatli arxivlash Yo'q — snapshot doimiy saqlash uchun mo'ljallanmagan, asl LV bilan bog'liqligi davom etadi
Diskdagi bo'sh joyni tejash Yo'q — snapshot ham qo'shimcha joy talab qiladi

Ko'p uchraydigan xatolar

Snapshot hajmini juda kichik olish

Snapshot -L hajmi asl LV'dagi o'zgarishlar miqdoriga qarab tanlanadi, asl LV hajmiga emas. Faol yozuv ko'p bo'lgan LV uchun kichik snapshot tez to'lib, invalid bo'lib qoladi.

resize2fs/xfs_growfs ni unutish

lvextend faqat blok qurilma hajmini o'zgartiradi. Fayl tizimi darajasidagi mos buyruq bajarilmaguncha, df eski hajmni ko'rsatishda davom etadi.

xfs ni kamaytirishga urinish

xfs_growfs faqat kattalashtiradi. Kamaytirish kerak bo'lsa, fayl tizimini emas, LV'ni almashtirish (yangi LV + ma'lumotni ko'chirish) kerak bo'ladi.

Amaliy mashqlar

  1. Disposable VM'da avvalgi maqoladan qolgan lv_app LV'sini 5 GiB'ga kengaytiring va df -hT bilan natijani tasdiqlang.
  2. lv_app dan 1 GiB snapshot oling, unga fayl yozing (asl LV'ga, snapshotga emas), so'ng snapshotni mount qilib Data% qiymatini kuzating.
  3. Snapshotdan --merge bilan rollback qiling va asl LV'dagi fayl yo'qolganini tasdiqlang.
  4. ext4 LV'ni to'g'ri tartibda (unmount → fsck → resize2fs → lvreduce) kamaytirib ko'ring va har bir qadamda natijani tekshiring.

Xulosa

lvextend (kerak bo'lsa -r bilan) LV va fayl tizimini birga, odatda online kengaytiradi; lvreduce esa teskari tartib — avval fayl tizimi, keyin LV — talab qiladi va xfs da umuman qo'llanmaydi. Snapshot copy-on-write mexanizmi orqali LV'ning ma'lum paytdagi holatini saqlaydi va lvconvert --merge bilan qaytarish yoki lvremove bilan bekor qilish mumkin. Ikkalasi ham VG'dagi bo'sh joyga bog'liq — shuning uchun disk bandligi va disk to'lganda troubleshooting maqolalarida ko'rilgan monitoring LVM muhitida ham ahamiyatini yo'qotmaydi.

Manbalar