RAID (mdadm)
Bo'limlar (partitions) maqolasida bitta diskni qismlarga ajratish ko'rib chiqildi. RAID esa teskari yo'nalishda ishlaydi: u bir nechta fizik diskni ishonchliligi yoki tezligi oshirilgan bitta mantiqiy block qurilmaga birlashtiradi. Disk ishdan chiqqanda ma’lumotlar saqlanib qoladimi yoki bir nechta diskka parallel yozish o'tkazuvchanlikni oshiradimi — bu butunlay tanlangan RAID darajasiga bog'liq.
RAID va LVM ko'pincha raqobatchilar sifatida ko'rsatiladi, lekin ular aslida turli muammolarni hal qiladi va odatda birga ishlatiladi: RAID disk darajasida ishonchlilik va tezlikni ta’minlaydi, LVM esa shu RAID massivi ustida moslashuvchan volume boshqaruvini beradi. Amalda odatiy stack shunday ko'rinadi: fizik disklar → RAID massivi (mdadm) → LVM PV → VG → LV → fayl tizimi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- RAID 0, 1, 5, 6 va 10 darajalari o'rtasidagi farqlarni va har biri qachon mos kelishini tushuntirish;
mdadm --createbilan dasturiy RAID massivini yaratish;- massiv holatini
/proc/mdstatvamdadm --detailbilan tekshirish; mdadm.conforqali massiv qayta yuklashdan keyin avtomatik qayta yig'ilishini ta’minlash;- ishdan chiqqan diskni RAID massividan olib tashlash va yangisini qo'shish jarayonini bajarish;
- nega RAID zaxira nusxaning o'rnini bosmasligini tushuntirish.
RAID nima va u nega kerak
RAID (Redundant Array of Independent Disks) bir nechta diskni bitta mantiqiy qurilmaga birlashtirib, quyidagi ikki foydadan birini yoki ikkalasini beradi:
- Ortiqchalik (redundancy) — bir yoki bir nechta disk ishdan chiqqanda ma’lumotlar saqlanib qoladi;
- Unumdorlik — bir nechta disk bo'ylab parallel o'qish/yozish orqali o'tkazuvchanlik oshadi.
Linux’da dasturiy RAID mdadm (multiple disk administration) bilan yaratiladi va boshqariladi. U uskunaviy RAID kontrollerlaridan arzonroq va moslashuvchanroq hamda istalgan disklar birikmasi bilan ishlaydi, lekin RAID hisob-kitoblari (parity va hokazo) CPU resurslarini sarflaydi.
Info
Uskunaviy RAID kontrolleri alohida chip orqali ishlaydi va OS’ga o'zini bitta oddiy disk sifatida ko'rsatadi. mdadm esa kernel darajasida ishlaydigan dasturiy yechim — kontroller xarajati yo'q, lekin resurs sarfi va boshqaruv operatsion tizim zimmasiga tushadi.
RAID darajalari: 0, 1, 5, 6, 10
| Daraja | Tamoyil | Minimal disklar | Foydalaniladigan sig'im | Nimaga chidaydi | Tezlik |
|---|---|---|---|---|---|
| RAID 0 | Striping | 2 | 100% (N ta disk) | 0 — bitta disk ishdan chiqsa, hammasi yo'qoladi | Eng yuqori o'qish/yozish |
| RAID 1 | Mirroring | 2 | 50% (N/2) | N-1 ta disk (bittasi tirik qolar ekan) | Tez o'qish, oddiy disk darajasidagi yozish |
| RAID 5 | Striping + 1 parity | 3 | (N-1)/N | 1 ta disk | Yaxshi o'qish, yozishda parity hisoblash xarajati |
| RAID 6 | Striping + 2 parity | 4 | (N-2)/N | 2 ta disk | RAID 5 ga o'xshash, yozish biroz sekinroq |
| RAID 10 | Striping qilingan mirror juftliklari | 4 | 50% (N/2) | Har bir mirror juftligidan bittadan, to'g'ri birikmada ko'proq | Yuqori tezlik va ishonchlilik birga |
Qaysi darajani qachon tanlash kerak:
- RAID 0 — faqat tezlik muhim va ma’lumot yo'qotish qabul qilinadigan bo'lganda (masalan, vaqtinchalik kesh yoki qayta hisoblash mumkin bo'lgan natijalar). Production ma’lumotlari uchun tavsiya etilmaydi.
- RAID 1 — ikkita disk, oddiy va ishonchli tanlov, masalan, tizim diski (
/) uchun. - RAID 5 — uch yoki undan ortiq disk, sig'im samaradorligi muhim va bitta disk nosozligiga chidash yetarli bo'lganda. Katta disklarda (masalan, 8+ TB) qayta tiklash (rebuild) vaqti uzoq bo'ladi va shu oraliqda ikkinchi disk ishdan chiqishi xavfi oshadi.
- RAID 6 — RAID 5 bilan bir xil, lekin ikkita disk nosozligiga chidaydi; kattaroq massivlar uchun RAID 5 o'rniga tavsiya etiladi.
- RAID 10 — ma’lumotlar bazasi kabi ham tezlik, ham ishonchlilik kerak bo'lgan yuklamalar uchun; disklar soni (kamida 4 ta) va byudjet imkon bersa, eng yaxshi tanlov.
Danger
RAID — zaxira nusxa emas. RAID diskning fizik nosozligidan himoya qiladi, lekin quyidagilardan himoya qilmaydi: tasodifiy rm -rf, fayl tizimining shikastlanishi, ransomware yoki noto'g'ri mdadm buyrug'i sababli butun massivni yo'qotish. Muhim ma’lumotlar uchun har doim RAID’dan tashqarida, boshqa joyda saqlanadigan alohida zaxira nusxa kerak.
Kerakli paket
Debian/Ubuntu oilasida:
O'rnatish paytida mdadm massivni kuzatish uchun email manzilini so'rashi mumkin — buni keyinroq /etc/mdadm/mdadm.conf da ham sozlash mumkin.
Massiv yaratishdan oldin: disklarni tekshirish
RAID massivini yaratishdan oldin disklarda mavjud ma’lumotlar yoki eski RAID metama’lumotlari yo'qligini tekshiring. Bu hech narsani o'zgartirmaydigan, faqat o'qiydigan buyruq:
Agar eski RAID superblock topilsa (mdadm --examine natija qaytarsa), yangi massiv yaratishdan oldin uni tozalash kerak bo'lishi mumkin:
Danger
mdadm --create va --zero-superblock diskdagi mavjud ma’lumotlar va bo'limlar jadvalini qaytarib bo'lmaydigan qilib o'chiradi. Quyidagi misollarni faqat bo'sh, ishlatilmayotgan disklarda, ideal holda o'chirib tashlasa bo'ladigan sinov VM’ida bajaring. Buni production diskda ishlatishdan oldin to'g'ri disk tanlanganini qayta tekshiring (lsblk, mdadm --examine) va kerakli ma’lumotlarning zaxira nusxasi olinganini tasdiqlang.
RAID 1 massivini yaratish
Faraz qilaylik, /dev/sdb va /dev/sdc — bir xil hajmdagi ikkita bo'sh disk.
1. Massivni yarating
--create /dev/md0— yangi massiv nomi (md0,md1, ... ketma-ket beriladi);--level=1— RAID darajasi;--raid-devices=2— massivdagi disklar soni.
Shundan keyin ikkala diskni bir xil holatga keltiradigan fon sinxronlashi (resync) boshlanadi. Katta disklarda bu soatlab davom etishi mumkin, lekin bu jarayon davomida massivdan foydalanish mumkin.
2. Holatni tekshiring
Namunaviy chiqish:
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
10476544 blocks super 1.2 [2/2] [UU]
[=========>...........] resync = 45.2% (4736000/10476544) finish=2.1min speed=42000K/sec
unused devices: <none>
[UU] ikkala disk ham "ishlayapti" (sog'lom) ekanini bildiradi. Disk ishdan chiqsa, bu yerda buning o'rniga [U_] yoki [_U] ko'rinadi.
Batafsilroq:
Bu buyruq massiv holati, har bir diskning roli (active, spare, faulty) va RAID darajasi haqida to'liq hisobot beradi.
3. Fayl tizimi yarating va mount qiling
RAID massivi ustida LVM ham qurish mumkin — masalan, pvcreate /dev/md0 bilan /dev/md0 ni PV sifatida VG'ga qo'shib, so'ng odatiy LVM qatlamlari bilan davom etish.
Massivni doimiy qilish: mdadm.conf
mdadm --create bilan yaratilgan massiv qayta yuklashdan keyin avtomatik qayta yig'ilishi uchun uning konfiguratsiyasini mdadm.conf ga yozish kerak:
Bu buyruq joriy massivning UUID’si va tarkibini mdadm.conf ga qo'shadi. Debian/Ubuntu’da shundan keyin initramfs’ni ham yangilash tavsiya etiladi, aks holda massiv boot paytida to'g'ri yig'ilmasligi mumkin:
Doimiy mount uchun /etc/fstab ga UUID’ga ishora qiluvchi yozuv qo'shiladi — bu fstab maqolasida chuqur ko'rib chiqiladi:
Info
mdadm.conf massivni disk nomlari (/dev/sdb, /dev/sdc) bo'yicha emas, UUID’si bo'yicha identifikatsiya qiladi — chunki disk nomlari bir boot’dan keyingisiga o'zgarishi mumkin (masalan, yangi disk qo'shilganda). Massivning UUID’si yaratilish paytida beriladi va hech qachon o'zgarmaydi.
Ishdan chiqqan diskni almashtirish
RAID’ning asosiy amaliy foydasi aynan shu yerda namoyon bo'ladi: disk ishdan chiqqanda ma’lumotlar saqlanib qoladi, lekin ishdan chiqqan diskni olib tashlash va o'rniga yangisini to'g'ri qo'shish baribir to'g'ri tartibni talab qiladi.
1. Ishdan chiqqan diskni aniqlang
mdadm --detail ishdan chiqqan diskni faulty deb belgilaydi. Agar disk hali faulty deb belgilanmagan, lekin ishdan chiqqani tasdiqlangan bo'lsa (masalan, dmesg da disk xatolari ko'rinsa), uni qo'lda belgilash mumkin:
2. Ishdan chiqqan diskni massivdan olib tashlang
3. Diskni fizik almashtiring
Shu bosqichda, agar hot-swap qo'llab-quvvatlanmasa, server o'chiriladi va ishdan chiqqan disk fizik ravishda yangisiga almashtiriladi; yangi disk odatda eskisi bilan bir xil yoki undan katta bo'lishi kerak.
4. Yangi diskni massivga qo'shing
Qo'shilgach, mdadm yangi diskka ma’lumotlarni qayta tiklashni (rebuild) avtomatik boshlaydi:
Rebuild tugagach, [UU] holati tiklanadi.
Warning
Rebuild paytida massiv qo'shimcha yuklama ostida bo'ladi va shu oraliqda boshqa disk ishdan chiqishi xavfi (ayniqsa RAID 5 da) oshadi — aynan shu sababli katta massivlar uchun ko'pincha RAID 6 yoki RAID 10 tavsiya etiladi. Rebuild tezligini /proc/sys/dev/raid/speed_limit_min va speed_limit_max orqali sozlash mumkin, lekin uni ishlab turgan tizimda oshirish boshqa I/O amallariga ta’sir qilishi mumkin.
Spare disklar, scrubbing va monitoring
Uchta operatsion tafsilot haqiqiy hodisadan omon qoladigan RAID sozlamasini faqat demoda sog'lom ko'rinadiganidan ajratib turadi.
Hot spare’lar
Spare disk massivda bo'sh turadi va faol disk faulty deb belgilangan zahoti avtomatik ravishda ishga jalb qilinadi — rebuild odamni kutmasdan boshlanadi. Uni yaratish paytida yoki keyinroq qo'shing:
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
/dev/sdb /dev/sdc /dev/sdd /dev/sde
# or add a spare to an existing array:
sudo mdadm --manage /dev/md0 --add /dev/sde
mdadm --detail da spare spare sifatida ko'rinadi; nosozlikdan keyin u avtomatik ravishda spare rebuilding ga, so'ng active ga o'tadi.
Scrubbing (ma’lumotlar izchilligini tekshirish)
Disk faulty deb belgilanmasdan indamay noto'g'ri ma’lumot qaytarishi mumkin (bit rot). Scrubbing har bir blokni o'qiydi va mirror/parity’ni solishtiradi, shunda nomuvofiqliklar rebuild paytida zarar yetkazishidan oldin ushlanadi:
echo check | sudo tee /sys/block/md0/md/sync_action # start a scrub
cat /proc/mdstat # watch progress
cat /sys/block/md0/md/mismatch_cnt # 0 is healthy
Noldan farqli mismatch_cnt tekshirishga arziydi. Ko'p distributivlar har oy scrubbing qiladigan cron/systemd timer (mdcheck yoki /etc/cron.d/mdadm) bilan birga keladi — production’da u haqiqatan yoqilganini tasdiqlang.
Nosozlik haqida xabar olish
RAID faqat ikkinchi disk o'lishidan oldin kimdir birinchi disk o'lganini bilib olsagina yordam beradi. mdadm monitor daemon’i har bir massivni kuzatadi va Fail/DegradedArray hodisasida email yuboradi:
# MAILADDR is read from /etc/mdadm/mdadm.conf
sudo mdadm --monitor --scan --daemonise
sudo mdadm --monitor --scan --test # send a test alert to confirm delivery
Debian/Ubuntu’da mdadm.conf da MAILADDR [email protected] o'rnatilgach, bu avtomatik ishlaydi. Monitoringsiz degraded massiv haftalab sezilmay turishi mumkin — "bizda RAID bor edi" degan holat baribir ma’lumot yo'qotish bilan tugashining eng keng tarqalgan yo'li aynan shu.
Amaliy vaziyat: RAID 1 yaratish va disk nosozligini simulyatsiya qilish
Muammo: o'chirib tashlasa bo'ladigan sinov VM’ida ikkita disk bor; vazifa — ularda RAID 1 qurish va disk nosozligini sinash.
1. Tekshiruv (faqat o'qish):
Ikkala disk ham bo'sh va eski RAID metama’lumotlarisiz ekanini tasdiqlang.
2. Massivni yarating:
Resync tugashini kuting, so'ng [UU] holatini tasdiqlang.
3. Fayl tizimi va sinov fayli:
sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid1
echo "test data" | sudo tee /mnt/raid1/test.txt
4. Disk nosozligini simulyatsiya qiling:
Natija: /proc/mdstat [_U] ni ko'rsatadi, lekin test.txt hali ham to'g'ri o'qiladi — massiv bitta diskda ishlashda davom etadi.
5. Diskni tiklang:
sudo mdadm --manage /dev/md0 --remove /dev/sdb
sudo mdadm --manage /dev/md0 --add /dev/sdb
cat /proc/mdstat
Xulosa: RAID 1 disk nosozligi paytida ma’lumotlarni uzluksiz foydalanish mumkin bo'lgan holatda saqlaydi, lekin bu holatni monitoring orqali (masalan, mdadm ning email xabarnomalari yoki mdadm --monitor) tezda aniqlash kerak — aks holda muammo ikkinchi disk ishdan chiqmaguncha sezilmay qolishi mumkin.
Keng tarqalgan xatolar
RAID’dan zaxira nusxa o'rnini bosuvchi sifatida foydalanish
Yuqorida ta’kidlanganidek, RAID faqat disk nosozligidan himoya qiladi. Agar fayl tasodifan o'chirilsa yoki shikastlansa, u massivdagi har bir diskda o'chirilgan yoki shikastlangan holda qoladi.
mdadm.conf ni yangilashni unutish
mdadm --create bilan qo'lda yaratilgan massiv uchun mdadm.conf va initramfs yangilanmasa, keyingi qayta yuklash uni avtomatik qayta yig'masligi yoki u boshqa nom ostida (/dev/md127) paydo bo'lishi mumkin.
Turli hajmdagi disklarni birlashtirish
mdadm massiv hajmini eng kichik diskka moslaydi — kattaroq disklardagi ortiqcha joy ishlatilmay qoladi. RAID uchun hajmi va tezligi mos keladigan disklarni tanlash tavsiya etiladi.
Katta, eski disklarda RAID 5 dan foydalanishda davom etish
Disklar eskirib, kattalashgani sari rebuild paytida ikkinchi disk ishdan chiqishi xavfi oshadi. Katta massivlarga RAID 6 yoki RAID 10 yaxshiroq mos keladi.
Mashqlar
- O'chirib tashlasa bo'ladigan VM’ga uchta virtual disk qo'shing va ularda RAID 5 massivini quring.
/proc/mdstatvamdadm --detailchiqishlarini solishtiring. - RAID 1 va RAID 5 massivlarining ikkalasida ham bitta diskni
--failqiling va ma’lumotlarga kirish hali ham ishlashini tasdiqlang. mdadm --detail --scanchiqishinimdadm.confga yozing, VM’ni qayta yuklang va massiv avtomatik qayta yig'ilishini tasdiqlang.- RAID massivi ustida LVM PV yarating (
pvcreate /dev/md0) va uni VG'ga qo'shing — RAID va LVM qatlamlari qanday birga ishlashini kuzating.
Mashqni bajardim deyish uchun: RAID massivi ichidagi tasvirlangan disk nosozligi berilganda uni tiklash uchun kerak bo'lgan aniq --fail → --remove → --add ketma-ketligini ayta olishingiz kerak.
Xulosa
mdadm bilan qurilgan dasturiy RAID bir nechta diskni mantiqiy qurilmaga birlashtiradi va tanlangan darajaga qarab yo ishonchlilikni (RAID 1/5/6/10), yo tezlikni (RAID 0) ta’minlaydi. Massiv holati /proc/mdstat va mdadm --detail orqali uzluksiz kuzatiladi, ishdan chiqqan disk esa --fail → --remove → --add tartibida almashtiriladi. RAID LVM’ning o'rnini bosmaydi, balki uning ostiga qo'shiladigan qatlam — RAID massivi ustida PV yaratib, LVM asoslari maqolasida ko'riladigan moslashuvchan volume boshqaruvi bilan davom etish mumkin. Keyingi qadam — xuddi shu tuzilma ustida diskni shifrlashni ko'rib chiqish; bu LUKS disk shifrlash maqolasida yoritiladi.