Virtual mashina disk tasvirini qanday tikladim

Boshqa kuni mo»jiza sodir bo’ldi. Yomon ma’noda. :( Noma’lum sabablarga ko’ra, virtual mashina tasviri to’satdan buzilib qoldi. Mashina hisob-kitob qilingan edi, ma’lumotlar juda muhim edi va omad taqozosi bilan, o’sha paytda uning zaxira nusxasi yo’q edi. Virtual server ishlayotgan edi va to’satdan hech qanday sababsiz ishlay boshladi. Qayta ishga tushirgandan so’ng, konsol menga fsck buyrug’ini ishga tushirishni taklif qildi, men ahmoqona ravishda avval zaxira nusxasini yaratish zaruratini e’tiborsiz qoldirib, unga amal qildim. Besh daqiqadan so’ng, men asabiylashib o’zimni tepdim, chunki protsedura bo’limga shunchalik jiddiy zarar yetkazdiki, uni endi hech qanday vosita bilan o’qib bo’lmas yoki ta’mirlab bo’lmasdi. Nima uchun aniq zaxira nusxasi yo’q edi? Chunki boshqa kuni men bu virtual mashinani boshqa platformadan ko’chirgan edim, u o’z navbatida u yerda zaxira xotirasini yaratish uchun yo’q qilinishi kerak edi. Bunday muammo hech qayerda paydo bo’lishini kim o’ylardi? Merfi qonuni, klassik… Bir oz miya hujumidan so’ng, men allaqachon tozalagan eski xotirada LVM bo’limini tiklashga harakat qilishga qaror qildim. Ba’zan dangasalik juda foydali bo’lishi mumkin… Xotirani tozalagan bo’lsam ham, dam olish kunlari bo’lgani uchun unga hech narsa yozishga vaqtim bo’lmagan edi, shuning uchun ma’lumotlarni tiklash imkoniyatim deyarli 100% edi.

bosqichma-bosqich:

Shunday qilib, men LV bo’limini qazib olish uchun butun LVM tuzilishini tiklashim kerak edi, bunda kerakli ma’lumotlar mavjud edi, ammo endi ular umuman ahamiyatsiz edi. Bu quyidagicha amalga oshiriladi: cd /etc/lvm/backup/ Ushbu katalogda LVM2 disklarda yaratilgan pv (jismoniy hajm) va vg (hajm guruhi) haqidagi ma’lumotlarni diqqat bilan saqlaydi. Agar biror narsa qolsa, u yaxshi. Keling, tiklashga harakat qilaylik: vgcfgrestore -f /etc/lvm/backup/st1 st1 Faollashtirish lvmdiskscan lvs -a -o +devices Nima bo’lishini ko’ring root@st1:~# vgs VG #PV #LV #SN Attr VSize VFree VolGroup 1 2 0 wz--n- 9.51g 0 st1 1 16 0 wz--n- 5.46t 5.46t Ajoyib. Guruh joyida. Lekin bo’limlar hali tiklanmagan. Keling, barcha mantiqiy disk manipulyatsiyalari saqlanadigan arxiv katalogiga o’tamiz: root@st1:~# cd /etc/lvm/archive/ root@st1:/etc/lvm/archive# ls st1_00251-221876201.vg st1_00290-2082643790.vg
st1_00252-24104864.vg
st1_00291-180822193.vg
.... Agar ulardan birini ochsangiz, o’sha paytda guruhda mavjud bo’lgan disklarning konfiguratsiyasini ko’rishingiz mumkin. Biz eng hayotiysini tanlaymiz va uni sinab ko’ramiz: root@st1:/etc/lvm/archive# vgcfgrestore prim --test -f /etc/lvm/archive/st1_00275-669926956.vg TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated. Restored volume group st1 [quads id=2] Hammasi joyida ko’rinyaptimi? Keyin biz ham xuddi shunday qilamiz, lekin ishlab chiqarish rejimida: root@st1:/etc/lvm/archive# vgcfgrestore prim -f /etc/lvm/archive/st1_00275-669926956.vg Guruh arxivdan tiklangandan so’ng, biz uni skanerlashimiz va topilgan mantiqiy bo’limlarni faollashtirishimiz kerak root@st1:/etc/lvm/archive# lvscan
inactive '/dev/st1/volume-4b748459-83f2-4b3a-9298-fe02764785b5' [11.00 GiB] inherit inactive '/dev/st1/shared' [500.00 GiB] inherit inactive '/dev/st1/volume-41597caa-007a-4880-8c03-f8f6aa59953e' [31.00 GiB] inherit inactive '/dev/st1/volume-8826f883-42ac-46cf-a90c-2c9407c51a77' [31.00 GiB] inherit inactive '/dev/st1/volume-a0d819ee-c08f-40c8-a789-7bef1ac14ffb' [300.00 GiB] inherit Topilgan bo’limlar hali faol emas. Biz keraklilarini faollashtiramiz va tarkibni xaritaga tushiramiz: lvchange -a y /dev/st1/volume-8826f883-42ac-46cf-a90c-2c9407c51a77 kpartx -a /dev/st1/volume-8826f883-42ac-46cf-a90c-2c9407c51a77 Endi biz /dev/mapper ga o’tamiz va bizni qiziqtirgan LVM ichidagi bo’limlarni ko’ramiz. root@st1:/dev/mapper# ls |grep st1-volume--8826f883 st1-volume--8826f883--42ac--46cf--a90c--2c9407c51a77 st1-volume--8826f883--42ac--46cf--a90c--2c9407c51a77p1 st1-volume--8826f883--42ac--46cf--a90c--2c9407c51a77p2 st1-volume--8826f883--42ac--46cf--a90c--2c9407c51a77p5 Endi biz kerakli bo’limni osongina o’rnatishimiz mumkin. Lekin mening biroz boshqacha maqsadlarim bor edi. Men qandaydir yo’l bilan eski disk yordamida joriy diskni tiklashim kerak edi, chunki u yerda qolgan ma’lumotlar juda muhim edi. Ikkala bo’limning nusxalarini yaratgandan so’ng, men tiklash bo’yicha tajriba o’tkaza boshladim. Muammo shundaki, yangi bo’limdagi barcha superbloklar yo’q qilindi va men hatto zaxira nusxalaridan foydalanib ham hech narsani tiklay olmadim. Keyin menga mutlaqo ahmoqona fikr keldi! Men zaxira diskining bir qismini (yoki aniqrog’i, uning bo’limini) buzilgan diskning bo’limi bilan birlashtirib, superblokni qayta joylashtirishga qaror qildim, bu nazariy jihatdan tiklash imkoniyatini beradi. Disklar strukturaviy jihatdan bir xil bo’lgani uchun, bu juda istiqbolli ko’rinardi. Yangi LVM bo’limini yarating va buzilgan diskni unga nusxalang. lvcreate -L 32G -n billrectest st1
dd if=/root/billpart2.img of=/dev/st1/billrectest
Keyin operatsiyani davom ettiring: dd if=/dev/mapper/st1-volume--8826f883--42ac--46cf--a90c--2c9407c51a77p1 of=/dev/st1/billrectest bs=51200 count=1 Shunday qilib, biz bo’lim boshidan 50 kilobaytni uzib oldik. (Men kichikroq qismlarni sinab ko’rdim, lekin ular ishlamadi.) Albatta, bu «emlash» dan keyin disk o’rnatilmaydi, chunki u hali ham shikastlangan. Diskni ta’mirlash… fsck.ext4 -y /dev/st1/billrectest Albatta, kafolat yo’q, lekin omadim keldi. Fayl tizimining yarmi yo’qolgan+topilgan rejimiga o’tgan va 2,5% butunlay yo’qolgan bo’lsa ham, ma’lumotlar bazasi qandaydir tarzda saqlanib qoldi! Oxir-oqibat, men tegishli ma’lumotlarni zaxira nusxasiga o’tkazdim va serverni ishga tushirdim. Soat ertalab 6 edi… Yengil tortgan holda, bir shisha pivoni ochdim, ichdim va yotishga yotdim. ;)