Skip to content

RAID (mdadm)

Bo'limlar maqolasida bitta diskni qismlarga bo'lish ko'rilgan edi. RAID esa teskari yo'nalishda ishlaydi: bir nechta jismoniy diskni birlashtirib, ular ustida ishonchliligi yoki tezligi oshirilgan bitta mantiqiy blok qurilma hosil qiladi. Diskning o'zi buzilib qolganda ma'lumot yo'qolmasligi, yoki bir nechta diskka parallel yozish orqali tezlik oshishi — bularning barchasi RAID darajasiga bog'liq.

RAID va LVM ko'pincha bir-biriga qarama-qarshi qo'yiladi, lekin aslida ular boshqa muammoni yechadi va birga ishlatiladi: RAID disk darajasida ishonchlilik va tezlik beradi, LVM esa shu RAID massivi ustida moslashuvchan hajm boshqaruvini ta'minlaydi. Amaliyotda odatiy joylashuv shunday: fizik disklar → RAID massivi (mdadm) → LVM PV → VG → LV → fayl tizimi.

O'quv maqsadlari

Maqolani tugatgach:

  • RAID 0, 1, 5, 6 va 10 darajalari orasidagi farqni va har birining qachon mos kelishini tushunasiz;
  • mdadm --create bilan dasturiy RAID massivi yarata olasiz;
  • /proc/mdstat va mdadm --detail orqali massiv holatini tekshira olasiz;
  • mdadm.conf orqali massivni reboot'dan keyin ham avtomatik yig'ilishini ta'minlay olasiz;
  • buzilgan diskni RAID massividan chiqarib, yangisini qo'shish jarayonini bajara olasiz;
  • RAID'ning nima uchun backup o'rnini bosmasligini tushunasiz.

RAID nima va nima uchun kerak

RAID (Redundant Array of Independent Disks) bir nechta diskni bitta mantiqiy qurilmaga birlashtirib, quyidagi ikki maqsaddan biri yoki ikkalasini beradi:

  • Ishonchlilik (redundancy) — bitta yoki bir nechta disk buzilganda ma'lumot yo'qolmasligi;
  • Unumdorlik (performance) — bir nechta diskka parallel o'qish/yozish orqali tezlik oshishi.

Linux'da dasturiy RAID (software RAID) mdadm (multiple disk administration) vositasi orqali yaratiladi va boshqariladi. Bu apparat RAID kontrollerlariga qaraganda arzon, moslashuvchan va istalgan disk kombinatsiyasida ishlaydi, biroq RAID hisob-kitobi (parity va h.k.) protsessor resursini sarflaydi.

Info

Apparat RAID kontrolleri (hardware RAID) alohida chip orqali ishlaydi va operatsion tizimga bitta oddiy disk sifatida ko'rinadi. mdadm esa yadro darajasida ishlaydigan dasturiy yechim — kontroller narxisiz, lekin resurs sarfi va boshqaruv operatsion tizim tomonida.

RAID darajalari: 0, 1, 5, 6, 10

Daraja Tamoyil Minimal disk soni Foydali hajm Toqat qiladigan disk buzilishi Tezlik
RAID 0 Striping (bo'lib yozish) 2 100% (N disk) 0 — bitta disk buzilsa, hammasi yo'qoladi Eng yuqori o'qish/yozish
RAID 1 Mirroring (aynan nusxalash) 2 50% (N/2) N-1 disk (kamida bittasi tirik qolsa) O'qish tez, yozish oddiy disk darajasida
RAID 5 Striping + 1 parity 3 (N-1)/N 1 disk Yaxshi o'qish, yozishda parity hisoblash xarajati
RAID 6 Striping + 2 parity 4 (N-2)/N 2 disk RAID 5'ga o'xshash, biroz sekinroq yozish
RAID 10 Mirror juftliklarini striping qilish 4 50% (N/2) Har mirror juftlikdan bittadan, to'g'ri kombinatsiyada ko'proq Yuqori tezlik va ishonchlilik birga

Qachon qaysi darajani tanlash:

  • RAID 0 — faqat tezlik muhim, ma'lumot yo'qolishi muammo emas (masalan, vaqtinchalik cache yoki qayta yaratsa bo'ladigan hisoblash natijalari). Production ma'lumotlar uchun tavsiya etilmaydi.
  • RAID 1 — ikkita disk, oddiy va ishonchli variant, masalan tizim diski (/) uchun.
  • RAID 5 — uch va undan ko'p disk, hajm samaradorligi muhim, bitta disk buzilishiga chidashi kerak. Katta diskларда (masalan, 8+ TB) qayta tiklash (rebuild) vaqti uzoq bo'lib, shu davrda ikkinchi disk buzilish xavfi oshadi.
  • RAID 6 — RAID 5 bilan bir xil, lekin ikkita disk buzilishiga chidaydi; katta massivlarda RAID 5 o'rniga tavsiya etiladi.
  • RAID 10 — ma'lumotlar bazasi kabi ham tezlik, ham ishonchlilik muhim bo'lgan yuklamalar uchun, agar disk soni (kamida 4) va byudjet yetsa eng yaxshi tanlov.

Danger

RAID — bu backup emas. RAID diskning jismoniy buzilishidan himoya qiladi, lekin quyidagilardan himoya qilmaydi: tasodifiy rm -rf, fayl tizimi buzilishi, ransomware, yoki noto'g'ri mdadm buyrug'i natijasida butun massivning yo'qolishi. Muhim ma'lumot uchun RAID'dan tashqari alohida, boshqa joyda saqlanadigan backup shart.

Kerakli paket

Debian/Ubuntu oilasida:

sudo apt update
sudo apt install mdadm

O'rnatish jarayonida mdadm massivlarni monitoring qilish uchun email manzil so'rashi mumkin — buni keyinroq /etc/mdadm/mdadm.conf ichida ham sozlash mumkin.

Massiv yaratishdan oldin: diskni tekshirish

RAID yaratishdan oldin diskda mavjud ma'lumot yoki eski RAID metama'lumoti yo'qligini tekshirish kerak. Bu — read-only buyruq, hech narsani o'zgartirmaydi:

sudo mdadm --examine /dev/sdb /dev/sdc
lsblk

Agar diskda eski RAID superblock topilsa (mdadm --examine natija qaytarsa), uni yangi massiv yaratishdan oldin tozalash kerak bo'lishi mumkin:

sudo mdadm --zero-superblock /dev/sdb

Danger

mdadm --create va --zero-superblock diskdagi mavjud ma'lumotni va bo'lim jadvalini qaytarib bo'lmas holda o'chirib yuboradi. Quyidagi misollarni faqat bo'sh, ishlatilmayotgan disklarda, tercihan disposable test VM'da bajaring. Production diskda ishlatishdan oldin diskning to'g'ri tanlanganini (lsblk, mdadm --examine) ikki marta tekshiring va zaruriy ma'lumotlarning backup nusxasi borligiga ishonch hosil qiling.

RAID 1 massiv yaratish

Faraz qilaylik, /dev/sdb va /dev/sdc — ikkita bo'sh, bir xil hajmdagi disk.

1. Massivni yaratish

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
  • --create /dev/md0 — yangi massiv nomi (md0, md1, ... ketma-ket beriladi);
  • --level=1 — RAID darajasi;
  • --raid-devices=2 — massivga kiritilayotgan disklar soni.

Buyruqdan keyin fon rejimida sinxronizatsiya (resync) boshlanadi — ikkala disk bir xil holatga keltiriladi. Katta disklarda bu bir necha soat davom etishi mumkin, lekin massiv shu jarayon davomida ham ishlatilishi mumkin.

2. Holatni tekshirish

cat /proc/mdstat

Namunaviy natija:

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 "up" (sog'lom) holatda ekanini bildiradi. Disk buzilganda shu joyda [U_] yoki [_U] ko'rinadi.

Batafsil ma'lumot:

sudo mdadm --detail /dev/md0

Bu buyruq massiv holati, har bir diskning roli (active, spare, faulty) va RAID darajasi haqida to'liq hisobot beradi.

3. Fayl tizimi yaratish va mount qilish

sudo mkfs.ext4 /dev/md0
sudo mkdir -p /mnt/raid1
sudo mount /dev/md0 /mnt/raid1

RAID massiv uchun ham LVM ustiga qurish mumkin — masalan /dev/md0 ni PV sifatida pvcreate /dev/md0 orqali VG'ga kiritish, keyin oddiy LVM qatlamlari kabi davom ettirish.

Massivni doimiy qilish: mdadm.conf

mdadm --create bilan yaratilgan massiv reboot'dan keyin avtomatik yig'ilishi (assemble) uchun uning konfiguratsiyasi mdadm.conf fayliga yozilishi kerak:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Bu buyruq joriy massiv(lar)ning UUID va tarkibini mdadm.conf ga qo'shadi. Debian/Ubuntu'da bundan keyin initramfs ni yangilash tavsiya etiladi, aks holda massiv boot vaqtida to'g'ri yig'ilmasligi mumkin:

sudo update-initramfs -u

Doimiy mount uchun /etc/fstab ga UUID orqali yozuv qo'shiladi — bu fstab maqolasida batafsil ko'riladi:

sudo blkid /dev/md0

Info

mdadm.conf da massiv UUID orqali aniqlanadi, disk nomlari (/dev/sdb, /dev/sdc) orqali emas — chunki disk nomlari reboot'dan reboot'ga o'zgarishi mumkin (masalan, yangi disk qo'shilganda). UUID esa massiv yaratilgan paytda belgilanadi va o'zgarmaydi.

Buzilgan diskni almashtirish

RAID'ning asosiy amaliy foydasi shu yerda ko'rinadi: disk buzilganda ma'lumot yo'qolmaydi, lekin buzilgan diskni to'g'ri chiqarib, yangisini qo'shish tartibi muhim.

1. Buzilgan diskni aniqlash

cat /proc/mdstat
sudo mdadm --detail /dev/md0

mdadm --detail natijasida buzilgan disk faulty deb belgilanadi. Agar disk hali faulty deb belgilanmagan bo'lsa-yu, lekin buzilganiga ishonch hosil qilingan bo'lsa (masalan, dmesg da disk xatolari ko'rinsa), uni qo'lda faulty deb belgilash mumkin:

sudo mdadm --manage /dev/md0 --fail /dev/sdc

2. Buzilgan diskni massivdan chiqarish

sudo mdadm --manage /dev/md0 --remove /dev/sdc

3. Diskni jismoniy almashtirish

Bu bosqichda server o'chirilib (hot-swap qo'llab-quvvatlamasa), buzilgan disk yangisiga almashtiriladi. Yangi disk odatda eski disk bilan bir xil yoki katta hajmda bo'lishi kerak.

4. Yangi diskni massivga qo'shish

sudo mdadm --manage /dev/md0 --add /dev/sdc

Qo'shilgandan keyin mdadm avtomatik ravishda yangi diskka ma'lumotni tiklash (rebuild) jarayonini boshlaydi:

cat /proc/mdstat

Rebuild tugagach, [UU] holati qayta tiklanadi.

Warning

Rebuild jarayoni davomida massiv qo'shimcha yuklama ostida bo'ladi va bu davrda boshqa diskning ham buzilish ehtimoli (ayniqsa RAID 5'da) ortadi — shuning uchun katta massivlarda RAID 6 yoki RAID 10 ko'proq tavsiya etiladi. Rebuild tezligini /proc/sys/dev/raid/speed_limit_min va speed_limit_max orqali sozlash mumkin, lekin ishlab turgan tizimda tezlikni oshirish boshqa I/O operatsiyalariga ta'sir qilishi mumkinligini hisobga oling.

Amaliy ssenariy: RAID 1 yaratish va disk buzilishini simulyatsiya qilish

Muammo: disposable test VM'da ikkita disk bor, ular ustida RAID 1 yaratib, disk buzilishi holatini sinab ko'rish kerak.

1. Tekshiruv (read-only):

lsblk
sudo mdadm --examine /dev/sdb /dev/sdc

Ikkala disk ham bo'sh va eski RAID metama'lumoti yo'qligiga ishonch hosil qilinadi.

2. Massiv yaratish:

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
cat /proc/mdstat

Resync tugashini kutish, so'ng [UU] holatini tasdiqlash.

3. Fayl tizimi va test fayli:

sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid1
echo "test data" | sudo tee /mnt/raid1/test.txt

4. Disk buzilishini simulyatsiya qilish:

sudo mdadm --manage /dev/md0 --fail /dev/sdb
cat /proc/mdstat
cat /mnt/raid1/test.txt

Natija: /proc/mdstat [_U] holatini ko'rsatadi, lekin test.txt hali ham o'qiladi — massiv bitta disk bilan ishlashda davom etmoqda.

5. Diskni tiklash:

sudo mdadm --manage /dev/md0 --remove /dev/sdb
sudo mdadm --manage /dev/md0 --add /dev/sdb
cat /proc/mdstat

Xulosa: RAID 1 disk buzilishida ma'lumotga uzluksiz kirishni ta'minlaydi, biroq bu holatni tezroq aniqlash uchun monitoring (masalan, mdadm email xabarnomasi yoki mdadm --monitor) sozlangan bo'lishi kerak — aks holda ikkinchi disk buzilguncha muammo sezilmasdan qolishi mumkin.

Ko'p uchraydigan xatolar

RAID'ni backup o'rniga ishlatish

Yuqorida aytilganidek, RAID faqat disk buzilishidan himoya qiladi. Fayl tasodifan o'chirilsa yoki buzilsa, u RAID massividagi barcha disklarda ham o'chgan/buzilgan holda qoladi.

mdadm.conf ni yangilashni unutish

Massiv qo'lda mdadm --create bilan yaratilgandan keyin mdadm.conf va initramfs yangilanmasa, keyingi reboot'da massiv avtomatik yig'ilmasligi yoki noto'g'ri nom bilan (/dev/md127) paydo bo'lishi mumkin.

Turli hajmdagi disklarni birlashtirish

mdadm massiv hajmini eng kichik diskka moslaydi — qolgan disklardagi ortiqcha joy ishlatilmaydi. RAID uchun bir xil hajm va tezlikdagi disklarni tanlash tavsiya etiladi.

RAID 5'ni katta, eski disklarda ishlatishda davom etish

Diskning yoshi va hajmi oshgan sari rebuild vaqtidagi ikkinchi disk buzilish xavfi ortadi. Katta massivlar uchun RAID 6 yoki RAID 10 ko'proq mos keladi.

Amaliy mashqlar

  1. Disposable VM'da uchta virtual disk qo'shing va ular ustida RAID 5 massiv yarating. /proc/mdstat va mdadm --detail natijalarini solishtiring.
  2. RAID 1 va RAID 5 massivlarda bittadan diskni --fail qilib, ma'lumotga kirish hali ham ishlashini tasdiqlang.
  3. mdadm --detail --scan natijasini mdadm.conf ga yozing va VM'ni qayta yuklab, massiv avtomatik yig'ilganini tekshiring.
  4. RAID massiv ustida LVM PV yarating (pvcreate /dev/md0) va uni VG'ga qo'shing — RAID va LVM qatlamlari birga qanday ishlashini kuzating.

Xulosa

mdadm orqali yaratilgan dasturiy RAID bir nechta diskni birlashtirib, tanlangan darajaga qarab ishonchlilik (RAID 1/5/6/10) yoki tezlik (RAID 0) beradi. Massiv holati doimiy ravishda /proc/mdstat va mdadm --detail orqali kuzatiladi, buzilgan disk esa --fail--remove--add tartibida almashtiriladi. RAID LVM bilan almashtiriladigan emas, balki qo'shiladigan qatlam — RAID massiv ustida PV yaratib, LVM asoslari maqolasida ko'rilgan moslashuvchan hajm boshqaruvini davom ettirish mumkin. Keyingi qadam sifatida shu tuzilma ustida disk shifrlashni ko'rib chiqamiz — bu LUKS disk shifrlash maqolasida davom etadi.

Manbalar