Yazılımsal RAID: mdadm ile RAID 0 Kurulumu

Disk hızını maksimuma çıkarmak istiyorsun, veri güvenliğini bir kenara bırakmaya hazırsın ve elinde birden fazla disk var. İşte tam bu noktada RAID 0 devreye giriyor. Linux dünyasında yazılımsal RAID yönetiminin vazgeçilmez aracı olan mdadm ile RAID 0 kurulumu, yönetimi ve performans optimizasyonu konusunu bugün en ince ayrıntısına kadar ele alacağız.

RAID 0 Nedir ve Ne Zaman Kullanılır?

RAID 0, “striping” yani şerit mantığıyla çalışır. Veriler birden fazla diske eşit parçalar halinde dağıtılır. Disk 1’e bir şerit, disk 2’ye bir şerit, disk 3’e bir şerit… Bu sayede okuma ve yazma işlemleri paralel yürütülür ve teorik olarak disk sayısıyla orantılı bir hız artışı elde edersin.

Ancak burada çok kritik bir noktanın altını çizmek gerekiyor: RAID 0’da hiçbir veri yedekliliği yoktur. Dizideki herhangi bir disk bozulursa, tüm veriyi kaybedersin. Bu yüzden RAID 0’ı şu senaryolar için düşün:

  • Geçici işlem verileri veya cache dizinleri
  • Video prodüksiyon çalışmaları (ham footage scratch alanı)
  • Bilimsel simülasyon verileri (tekrar üretilebilir veriler)
  • Yüksek performanslı veritabanı geçici tabloları
  • Oyun sunucularında harita ve asset yükleme alanları
  • CI/CD pipeline’larında build artifact depolama

Kısacası: Kaybedersen canın yanmayacak ama hızlı olmasını istediğin veriler için RAID 0 idealdir.

mdadm Kurulumu ve Hazırlık

Önce sisteminizin mdadm paketine sahip olduğundan emin olalım.

# Debian/Ubuntu tabanlı sistemler için
sudo apt update && sudo apt install mdadm -y

# RHEL/CentOS/Rocky Linux için
sudo dnf install mdadm -y

# Arch Linux için
sudo pacman -S mdadm

Kurulum tamamlandıktan sonra mevcut disk durumunu kontrol edelim. Hangi disklerin mevcut olduğunu, hangilerinin kullanımda olduğunu görmemiz gerekiyor.

# Tüm blok cihazları listele
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

# Disk detaylarını görüntüle
sudo fdisk -l

# Mevcut RAID dizilerini kontrol et
cat /proc/mdstat

Bu örnekte /dev/sdb ve /dev/sdc disklerini kullanacağız. Her biri 500 GB kapasitesinde iki disk ile 1 TB’lık bir RAID 0 dizisi oluşturacağız.

Diskleri Hazırlamak

Diskleri kullanmadan önce üzerlerinde varsa mevcut partition tablosunu ve RAID metadata’sını temizlemeliyiz. Bu adım gerçek bir ortamda son derece kritik.

# Disk üzerinde varsa eski RAID superblock'u temizle
sudo mdadm --zero-superblock /dev/sdb
sudo mdadm --zero-superblock /dev/sdc

# Disk başlangıcını ve sonunu sıfırla (eski partition table kalıntıları için)
sudo wipefs -a /dev/sdb
sudo wipefs -a /dev/sdc

# İşlemin başarılı olduğunu doğrula
sudo hexdump -C /dev/sdb | head -5

Şimdi disklerde partition oluşturacağız. Doğrudan disk üzerinde de RAID kurabilirsin ama partition üzerinde kurmak daha iyi bir pratiktir. Özellikle gelecekte disk değiştirme senaryolarında işini kolaylaştırır.

# GPT partition table oluştur ve RAID partition yap
sudo sgdisk -n 0:0:0 -t 0:fd00 /dev/sdb
sudo sgdisk -n 0:0:0 -t 0:fd00 /dev/sdc

# Partition'ların oluştuğunu doğrula
lsblk /dev/sdb /dev/sdc

fd00 tipi Linux RAID partition type’ıdır. Bunu kullanmak sistemin bu partition’ı RAID için hazır olduğunu anlamasını sağlar.

RAID 0 Dizisi Oluşturma

Artık asıl işleme geliyoruz. mdadm komutuyla RAID 0 dizimizi oluşturacağız.

sudo mdadm --create /dev/md0 
    --level=0 
    --raid-devices=2 
    --chunk=512 
    /dev/sdb1 /dev/sdc1

Bu komuttaki parametreleri açıklayalım:

  • –create /dev/md0: Yeni RAID cihazı oluştur ve /dev/md0 olarak adlandır
  • –level=0: RAID seviyesi 0 (striping)
  • –raid-devices=2: Kaç disk kullanılacağı
  • –chunk=512: Şerit boyutu (KB cinsinden, burada 512 KB)
  • /dev/sdb1 /dev/sdc1: RAID’e dahil edilecek partition’lar

Chunk Size Seçimi

Chunk size (şerit boyutu) performans açısından kritik bir parametre. Yanlış seçim, beklediğin performansı vermeyebilir.

  • Küçük dosyalarla çalışıyorsan (4K-64K): Daha küçük chunk size (64K veya 128K) dene
  • Büyük dosyalar ve sequential okuma/yazma (video, bilimsel veri): Büyük chunk size (512K veya 1M) tercih et
  • Genel kullanım: 256K veya 512K genellikle iyi bir başlangıç noktası

RAID oluşturulduktan hemen sonra durumunu kontrol et:

# RAID durumunu kontrol et
cat /proc/mdstat

# Detaylı bilgi için
sudo mdadm --detail /dev/md0

Çıktı şuna benzer bir şey gösterecek:

/dev/md0:
           Version : 1.2
     Creation Time : Mon Jan 15 14:32:11 2024
        Raid Level : raid0
        Array Size : 976630784 (931.39 GiB 999.81 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jan 15 14:32:11 2024
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Dosya Sistemi Oluşturma ve Bağlama

RAID dizisi hazır. Şimdi üzerine dosya sistemi oluşturuyoruz.

# ext4 dosya sistemi oluştur
sudo mkfs.ext4 -F -L "raid0-data" /dev/md0

# Ya da XFS tercih ediyorsan (büyük dosyalar için daha iyi performans verebilir)
sudo mkfs.xfs -L "raid0-data" /dev/md0

Mount noktası oluştur ve dizini bağla:

# Mount noktası oluştur
sudo mkdir -p /mnt/raid0

# Manuel olarak bağla
sudo mount /dev/md0 /mnt/raid0

# Bağlandığını doğrula
df -h /mnt/raid0

Kalıcı Yapılandırma: fstab ve mdadm.conf

Sistem yeniden başladığında RAID dizisinin otomatik olarak başlatılması ve bağlanması için yapılandırma dosyalarını güncellememiz gerekiyor.

# mdadm yapılandırma dosyasını güncelle
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

# Dosyayı kontrol et
cat /etc/mdadm/mdadm.conf

# initramfs'i güncelle (Debian/Ubuntu)
sudo update-initramfs -u

# RHEL/CentOS için
sudo dracut --force

Şimdi /etc/fstab dosyasına mount girişi ekleyelim. UUID kullanmak daha güvenli bir pratik.

# UUID'yi öğren
sudo blkid /dev/md0

# fstab'a ekle (UUID'yi kendinizinkiyle değiştirin)
echo "UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/raid0 ext4 defaults,nofail 0 0" | sudo tee -a /etc/fstab

# fstab'ı test et (sistem yeniden başlatmadan)
sudo mount -a

# Başarılı olduğunu doğrula
df -h | grep raid0

nofail seçeneği önemli: RAID dizisi başlatılamazsa sistem açılmaya devam eder. Production ortamlarda bu hayat kurtarıcı olabilir.

Performans Testi

RAID 0 kurduğumuz için en önemli şeylerden biri performansı ölçmek. Teorik hız artışını pratikte doğrulayalım.

dd ile Temel Test

# Yazma hızı testi (1 GB veri)
sudo dd if=/dev/zero of=/mnt/raid0/test.img bs=1M count=1024 conv=fdatasync status=progress

# Okuma hızı testi
sudo dd if=/mnt/raid0/test.img of=/dev/null bs=1M status=progress

# Test dosyasını temizle
sudo rm /mnt/raid0/test.img

fio ile Daha Kapsamlı Test

fio çok daha detaylı benchmark imkanı sunar. Production’a almadan önce kesinlikle fio testleri yapmanı tavsiye ederim.

# fio kurulumu
sudo apt install fio -y  # Debian/Ubuntu
sudo dnf install fio -y  # RHEL/CentOS

# Sequential write testi
sudo fio --name=seq-write 
    --directory=/mnt/raid0 
    --rw=write 
    --bs=1M 
    --size=2G 
    --numjobs=1 
    --runtime=60 
    --group_reporting 
    --iodepth=32

# Sequential read testi
sudo fio --name=seq-read 
    --directory=/mnt/raid0 
    --rw=read 
    --bs=1M 
    --size=2G 
    --numjobs=1 
    --runtime=60 
    --group_reporting 
    --iodepth=32

# Random read/write karışık (4K blok boyutu)
sudo fio --name=random-rw 
    --directory=/mnt/raid0 
    --rw=randrw 
    --rwmixread=70 
    --bs=4K 
    --size=2G 
    --numjobs=4 
    --runtime=60 
    --group_reporting 
    --iodepth=64

Gerçek bir test ortamında iki 7200 RPM SATA disk ile tipik olarak şu sonuçları görebilirsin:

  • Tek disk sequential write: ~150 MB/s
  • RAID 0 (2 disk) sequential write: ~280-300 MB/s
  • Tek disk sequential read: ~160 MB/s
  • RAID 0 (2 disk) sequential read: ~300-320 MB/s

İzleme ve Bakım

RAID 0 kullanırken disk sağlığını düzenli izlemek zorundasın. Bir disk bozulduğunda tüm verinizi kaybedebileceğini unutma.

Disk Sağlığı İzleme

# SMART verilerini kontrol et (smartmontools kurulu olmalı)
sudo apt install smartmontools -y

# Disk sağlık özeti
sudo smartctl -H /dev/sdb
sudo smartctl -H /dev/sdc

# Detaylı SMART bilgisi
sudo smartctl -a /dev/sdb | grep -E "Reallocated|Pending|Uncorrectable|Temperature"

# Kısa self-test başlat
sudo smartctl -t short /dev/sdb

mdadm İzleme Servisi

mdadm’in kendi izleme özelliğini aktif et. Bir sorun olduğunda e-posta gönderebilir.

# /etc/mdadm/mdadm.conf dosyasını düzenle
sudo nano /etc/mdadm/mdadm.conf

# Şu satırı ekle veya düzenle (e-posta adresini değiştir)
# MAILADDR [email protected]

# mdadm monitor servisini başlat
sudo systemctl enable mdmonitor
sudo systemctl start mdmonitor

# Servis durumunu kontrol et
sudo systemctl status mdmonitor

Periyodik Durum Kontrolü için Script

Aşağıdaki script’i crontab’a ekleyerek düzenli RAID sağlık kontrolü yapabilirsin.

#!/bin/bash
# /usr/local/bin/raid-health-check.sh

RAID_DEVICE="/dev/md0"
LOG_FILE="/var/log/raid-health.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

# RAID durumunu kontrol et
RAID_STATE=$(sudo mdadm --detail $RAID_DEVICE | grep "State :" | awk '{print $3}')
DISK_COUNT=$(sudo mdadm --detail $RAID_DEVICE | grep "Active Devices" | awk '{print $4}')
FAILED_DISKS=$(sudo mdadm --detail $RAID_DEVICE | grep "Failed Devices" | awk '{print $4}')

echo "[$TIMESTAMP] RAID Durumu: $RAID_STATE | Aktif Disk: $DISK_COUNT | Hatalı Disk: $FAILED_DISKS" >> $LOG_FILE

if [ "$FAILED_DISKS" -gt 0 ] || [ "$RAID_STATE" != "clean" ]; then
    echo "[$TIMESTAMP] UYARI: RAID problemi tespit edildi!" >> $LOG_FILE
    # Buraya e-posta veya Slack bildirimi ekleyebilirsin
    mail -s "RAID 0 Uyarisi: $HOSTNAME" [email protected] < $LOG_FILE
fi
# Script'i çalıştırılabilir yap
chmod +x /usr/local/bin/raid-health-check.sh

# Crontab'a ekle (her saat başı çalışsın)
echo "0 * * * * root /usr/local/bin/raid-health-check.sh" | sudo tee -a /etc/cron.d/raid-monitor

Gerçek Dünya Senaryosu: Video Prodüksiyon İş İstasyonu

Bir video prodüksiyon stüdyosunda editörler 4K ham footage ile çalışıyor. Her proje ortalama 200-500 GB veri üretiyor. Projeyi teslim edip render aldıktan sonra ham footage NAS’a arşivleniyor. İş istasyonundaki scratch disk alanı hız gereksinimi karşılamıyor.

Çözüm: 3 adet 1TB NVMe SSD ile RAID 0 kurulumu. 3 TB kullanılabilir alan ve teorik olarak 3x okuma/yazma hızı.

# 3 diskli RAID 0 kurulumu
sudo mdadm --create /dev/md0 
    --level=0 
    --raid-devices=3 
    --chunk=1024 
    /dev/nvme0n1p1 /dev/nvme1n1p1 /dev/nvme2n1p1

# XFS dosya sistemi (büyük dosyalar için tercih edilir)
sudo mkfs.xfs -L "scratch" -d su=1024k,sw=3 /dev/md0

-d su=1024k,sw=3 parametresi XFS’e stripe unit ve stripe width bilgisi verir. Bu, XFS’in I/O’yu RAID chunk size’a uygun şekilde hizalamasını sağlar ve ciddi performans artışı getirir.

RAID 0 Dizisini Durdurmak ve Sökmek

Bazen RAID dizisini kaldırman gerekebilir. Doğru sırayla yapmak önemli.

# Önce dizini unmount et
sudo umount /mnt/raid0

# RAID dizisini durdur
sudo mdadm --stop /dev/md0

# Superblock'ları temizle
sudo mdadm --zero-superblock /dev/sdb1
sudo mdadm --zero-superblock /dev/sdc1

# mdadm.conf'dan girişi kaldır
sudo nano /etc/mdadm/mdadm.conf

# fstab'dan girişi kaldır
sudo nano /etc/fstab

# initramfs güncelle
sudo update-initramfs -u

Sık Karşılaşılan Sorunlar ve Çözümler

Sorun: Sistem açılışta RAID dizisi bulunamıyor

Bu genellikle mdadm.conf’un doğru güncellenmemesinden veya initramfs’in yenilenmemesinden kaynaklanır.

# Mevcut dizileri tara ve conf'u güncelle
sudo mdadm --examine --scan | sudo tee /etc/mdadm/mdadm.conf
sudo update-initramfs -u

Sorun: Degraded state uyarısı

RAID 0’da bir disk kaybolduğunda dizi çalışmaz ama bu mesajı farklı nedenlerle görebilirsin.

# Detaylı durum kontrolü
sudo mdadm --detail /dev/md0
sudo dmesg | grep -i md | tail -20

Sorun: Performans beklentilerin altında

I/O scheduler’ı kontrol et. SSD kullanıyorsan none veya mq-deadline daha iyi sonuç verebilir.

# Mevcut scheduler'ı görüntüle
cat /sys/block/sdb/queue/scheduler

# Scheduler'ı değiştir (SSD için)
echo mq-deadline | sudo tee /sys/block/sdb/queue/scheduler
echo mq-deadline | sudo tee /sys/block/sdc/queue/scheduler

Sonuç

mdadm ile RAID 0 kurmak göründüğü kadar karmaşık değil. Birkaç komutla yüksek performanslı bir depolama alanı elde edebiliyorsun. Ancak her güçlü araç gibi RAID 0 da doğru senaryoda kullanıldığında değer katar.

En kritik nokta şu: RAID 0 bir yedekleme çözümü değildir, yedeklemenin yerini tutmaz. Kaybetmeye hazır olmadığın hiçbir veriyi RAID 0’da tutma. Yüksek hız istiyorsun ve verinin yedekleri zaten başka yerde güvenle duruyorsa, RAID 0 tam istediğin çözüm.

Disklerin sağlığını düzenli izle, SMART testlerini ihmal etme, mdmonitor servisini mutlaka aktif et. Bir disk arıza sinyali vermeye başlarsa hemen harekete geç. Bu basit önlemlerle RAID 0’ı güvenli bir şekilde günlük iş akışına dahil edebilirsin.

Yorum yapın