Linux RAID Kurulumu: mdadm ile Disk Dizisi Rehberi

Linux'ta mdadm ile RAID 1, 5, 6 ve 10 dizisi nasıl kurulur, bozuk disk nasıl değiştirilir, RAID neden yedeklemenin yerini tutmaz? Adım adım anlatıyorum.

Linux
Linux RAID Kurulumu: mdadm ile Disk Dizisi Rehberi

RAID kurmadan önce sorulan soru genelde aynıdır: tek disk mi yeter, yoksa iki disk mi almak gerekir? Cevap, verinin ne kadar kritik olduğuna ve sunucunun kaç saatlik kesintiyi kaldırabileceğine bağlıdır. RAID (Redundant Array of Independent Disks), birden fazla diski tek bir mantıksal birimde birleştirerek veri güvenliği, performans ya da ikisini birden sağlayan bir yöntemdir. Linux'ta bunu yazılımsal olarak, mdadm aracıyla, ek donanım almadan kurabilirsiniz.

Bu rehberde RAID seviyelerini, mdadm ile pratik kurulumu, arızalı disk değişimini, dizi izlemeyi ve RAID'in nerede işe yaramadığını ele alıyoruz. Örnekler gerçek komutlarla verilmiştir ve sunucuda doğrudan çalıştırılabilir.

RAID Seviyeleri: Hangisini Seçmeli?

RAID 0 verileri disklere böler (striping) ve okuma-yazma hızını disk sayısıyla orantılı biçimde artırır. Yedekliği yoktur: disklerden biri arızalandığında tüm veri kaybolur. Bu seviyeyi yalnızca geçici önbellek veya render alanları gibi kaybı önemsiz verilerde kullanmak gerekir; üretim veritabanında RAID 0 kullanmak ciddi bir risktir.

RAID 1 iki diski birebir aynalar (mirroring). Disklerden biri arızalandığında diğeri kesintisiz çalışmaya devam eder; kapasite yarıya düşer ama güvenlik en yüksek seviyededir. Küçük sunucularda ve iş istasyonlarında en sık tercih edilen seviye budur, çünkü kurulumu basittir ve kurtarma mantığı kolay anlaşılır.

RAID 5 en az 3 disk gerektirir ve verileri eşlik (parity) bilgisiyle dağıtır; bir disk arızasını tolere eder ve kapasite kaybı yalnızca bir disk kadardır. RAID 6 aynı mantığı iki eşlik bloğuyla genişletir ve iki disk aynı anda arızalansa bile veriyi korur. RAID 10 (1+0), ayna çiftlerini striping ile birleştirir; hem hız hem güvenlik sağlar ama en az 4 disk ve daha fazla kapasite gerektirir.

SeviyeMin. diskYedeklilikKullanılabilir kapasite
RAID 02Yok%100
RAID 121 disk arızası%50
RAID 531 disk arızası(n-1)/n
RAID 642 disk arızası(n-2)/n
RAID 1041 disk/çift%50

Kapasite kaybı tablosu ilk bakışta soyut görünse de disk fiyatlarına döküldüğünde net bir maliyet ortaya çıkar. 4 diskli 4 TB'lik bir sunucuda RAID 10 kullanılabilir 8 TB alan verir; RAID 6 aynı disklerden yine 8 TB sağlar, ama rebuild performansı RAID 10'a göre belirgin biçimde düşüktür. Seçim yalnızca kapasiteye değil, rebuild hızına ve I/O paternine göre yapılmalıdır. Yoğun rastgele yazma yapan bir veritabanı, RAID 6'nın eşlik hesaplama yükünden ciddi performans kaybı yaşar.

Nested RAID seviyeleri (RAID 50, RAID 60 gibi) büyük depolama sistemlerinde karşınıza çıkabilir; bunlar birden fazla RAID 5 veya RAID 6 grubunu striping ile birleştirir. Küçük ve orta ölçekli sunucularda bu karmaşıklığa nadiren ihtiyaç duyulur, ama onlarca diskli depolama sunucuları kuran ekipler için bilinmesi gereken bir seçenektir. Yazılımsal RAID'in çekirdek düzeyindeki ayrıntılarını Linux çekirdeğinin RAID (md) belgelerinden okuyabilirsiniz.

mdadm ile RAID Dizisi Oluşturma

Linux'ta yazılımsal RAID'in standart aracı mdadm'dır. Debian/Ubuntu'da kurulumu tek satırla yapılır:

Terminalde mdadm ile RAID dizisi oluşturma komutu
sudo apt install mdadm

Diyelim ki /dev/sdb ve /dev/sdc ile RAID 1 kurulacak. Diskler partition'lanmadan doğrudan kullanılabilir ya da fdisk ile bölümlenebilir; basit senaryoda disk doğrudan kullanılır:

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

Dizinin senkronizasyon durumu şu komutla izlenir:

cat /proc/mdstat

Senkronizasyon büyük disklerde saatler sürebilir; dizi bu süreçte de kullanılabilir durumdadır, performans yalnızca biraz düşer. Dosya sistemi oluşturulup bağlanır:

sudo mkfs.ext4 /dev/md0
sudo mount /dev/md0 /mnt/raid

Yapılandırmanın yeniden başlatma sonrası kalıcı olması için dizi bilgisinin mdadm.conf dosyasına yazılması gerekir. Bu adım atlanırsa, yeniden başlatma sonrası dizi /dev/md127 gibi beklenmedik bir isimle gelebilir:

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

RAID 5 kurmak isteyenler için komut neredeyse aynıdır; değişen tek şey seviye ve disk sayısıdır:

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

/etc/fstab dosyasına dizinin UUID'sinin eklenmesi, mount komutunu her açılışta elle çalıştırma zahmetini ortadan kaldırır:

blkid /dev/md0
echo "UUID=xxxx-xxxx /mnt/raid ext4 defaults 0 2" | sudo tee -a /etc/fstab

Dizi oluşturulduktan sonra mdadm --detail /dev/md0 çıktısı mutlaka kontrol edilmelidir. State : clean satırı her şeyin yolunda olduğunu gösterir; Active Devices sayısının beklenen disk sayısıyla eşleşmesi gerekir.

Bozuk Diski Değiştirme

Bir disk arızalandığında mdadm --detail /dev/md0 çıktısında State : clean, degraded ifadesi ya da ilgili diskin yanında faulty ibaresi görülür. Önce arızalı disk diziden çıkarılır:

RAID'in yedeklemeyle ilişkisini gösteren basit şema
sudo mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdc

Yeni disk takılıp diziye eklenir; mdadm otomatik olarak yeniden senkronizasyona başlar:

sudo mdadm /dev/md0 --add /dev/sdd

Yeniden yapılanma (rebuild) sürerken dizi degraded modda çalışır ve bu pencerede ikinci bir disk arızası veri kaybına yol açar. RAID 5 kullanan büyük disklerde rebuild süresi bir günü bulabilir; RAID 6'nın tercih edilme sebeplerinden biri de budur. Rebuild ilerlemesi yine cat /proc/mdstat ile takip edilir; yüzde ve tahmini süre orada görünür.

Disk değişiminde dikkat edilmesi gereken bir başka nokta, yeni diskin en az arızalı disk kadar büyük olması gerektiğidir. Daha küçük bir disk takıldığında mdadm diziye eklemeyi reddeder. Sunucuda yedek disk bulundurmak, arıza anında acil sipariş vermekten çok daha güvenli bir yaklaşımdır. Kritik sunucularda bir "sıcak yedek" (hot spare) disk tanımlamak, arıza anında mdadm'ın manuel müdahale beklemeden otomatik rebuild başlatmasını sağlar.

Hot spare eklemek de tek satırlık bir komuttur:

sudo mdadm /dev/md0 --add-spare /dev/sde

Bu komut, diski dizide "spare" olarak tutar. Aktif disklerden biri faulty durumuna geçtiğinde mdadm otomatik olarak rebuild'i başlatır ve dizi, manuel müdahaleye gerek kalmadan kendini onarır.

RAID Yedekleme Yerine Geçmez

Bu, RAID hakkında en çok yanlış anlaşılan noktadır. RAID disk arızasına karşı koruma sağlar, ama rm -rf komutuyla yanlışlıkla silinen bir dosyayı geri getirmez. Fidye yazılımı dosyaları şifrelerse, RAID bu şifreli hâli aynı sadakatle diğer diske de yazar.

RAID; kazara silme, mantıksal bozulma ve kötü amaçlı yazılıma karşı koruma sağlamaz, çünkü sorunlu veriyi de aynı doğrulukla çoğaltır. Gerçek koruma, RAID'in üzerine kurulu, düzenli ve versiyonlanmış bir yedekleme rutini gerektirir. rsync, restic veya borg gibi araçlarla ayrı bir hedefe, tercihen başka bir fiziksel konuma alınan yedekler bu korumayı sağlar.

3-2-1 kuralı burada iyi bir referans noktasıdır: üç kopya, iki farklı ortam, biri site dışında. Basit bir rsync yedekleme komutu şöyle görünür:

rsync -avh --delete /mnt/raid/ /mnt/yedek-disk/

Bu komutun bir cron görevine bağlanıp her gece otomatik çalıştırılması, manuel yedeklemenin unutulma riskini ortadan kaldırır. restic gibi versiyonlanmış bir araç kullanıldığında eski dosya sürümlerine de dönülebilir; bu, fidye yazılımı senaryosunda RAID'in sağlayamayacağı bir kurtarma imkânı sunar.

Dizi Durumunu Düzenli İzlemek

mdadm küçük bir yapılandırmayla e-posta uyarısı gönderecek şekilde ayarlanabilir; bu ayar, disk arızasının günlerce fark edilmeden kalmasını önler:

RAID seviyelerinin kullanım senaryolarına göre karşılaştırması
sudo mdadm --monitor --scan --daemonise [email protected]

Disklerin S.M.A.R.T. verilerinin smartctl ile periyodik kontrol edilmesi, bir disk tamamen ölmeden önce uyarı alınmasını sağlar:

sudo smartctl -a /dev/sdb

Disk sağlığını haftalık kontrol etmek küçük ama etkili bir alışkanlıktır. Üretim sunucularında bu kontrolün Zabbix veya Prometheus node_exporter gibi bir izleme sistemine bağlanması, manuel kontrolden çok daha güvenilir bir yaklaşımdır; disk arızası bu durumda cron log'undan değil, doğrudan bir bildirimden fark edilir.

mdadm'ın periyodik "scrub" işlemi de gözden kaçırılmamalıdır; bu işlem tüm diski tarayıp sessiz veri bozulmalarını (silent corruption) erken aşamada yakalar:

echo check | sudo tee /sys/block/md0/md/sync_action

Bu komutun aylık bir cron görevine bağlanması, diskler fiziksel olarak sağlıklı görünse bile veri bütünlüğünü doğrulamanın ucuz bir yoludur. Scrub sırasında mismatch_cnt dosyasında sıfırdan farklı bir değer görülürse, disklerden biri sessizce veri bozuyor demektir ve daha derin bir inceleme gerekir.

Hangi Senaryoda Ne Kullanılır

Ev sunucusu ya da NAS için RAID 1 genelde yeterlidir. Kurulumu basittir ve tek disk arızasına dayanıklıdır. Dosya sunucuları ve orta ölçekli veritabanları için RAID 5 ya da RAID 6, kapasite ile güvenlik arasında iyi bir denge kurar; disk sayısı arttıkça RAID 6'ya geçmek mantıklıdır, çünkü rebuild penceresi uzar ve bu pencerede risk de artar.

Yüksek I/O gerektiren veritabanı sunucularında RAID 10 tercih edilir, çünkü hem striping'in hızını hem mirroring'in güvenliğini taşır. RAID 0'ı üretim ortamında kullanmaktan kaçınmak gerekir; yeri yalnızca kaybı önemsiz, hız açısından kritik geçici verilerdir. Linux kernel dokümantasyonundaki RAID ve mdadm bölümleri, seviye seçimini ayrıntılı anlamak isteyenler için sağlam bir kaynaktır.

RAID kurulumunda en büyük hata, disk sayısını ve rebuild süresini hesaba katmadan büyük kapasiteli disklerle RAID 5 kurmaktır. 8 TB'lik disklerle kurulan RAID 5'te, rebuild sırasında ikinci bir disk arızası gerçek bir tehdide dönüşür. Böyle durumlarda RAID 6 ya da RAID 10, ekstra disk maliyetine değecek kadar güvenlik farkı yaratır. Bu maliyeti göze almadan kurulan bir RAID 5, felaket anında tek başına yetersiz kalabilir.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

Bilgisayar mühendisiyim; 25 yılı aşkın süredir bilgi işlem sektörünün içindeyim. Bu blogu 2020'de, işimde her gün karşılaştığım sorunların çözümlerini bir yere yazmak için açtım: Linux, güvenlik, tarayıcılar, yapay zeka araçları. Yazdığım her rehberi önce kendi bilgisayarımda ya da sunucumda deniyorum; çalıştığını görmediğim adımı yayınlamam. Hatalı ya da eskimiş bir şey görürsen iletişim sayfasından yaz — düzeltirim.

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar

jekcms 61602b0e6293b42004a1