Raid nedir? Linux Software Raid Nasıl Yapılır?

Linux Software Raid

RAID, “Redundant Array of Independent Disk” Birleştirilmiş Bağımsız Disk Dizisi, birden fazla disk ile diskler üzerindeki verilerin güvenliğini arttırmak ve daha yüksek okuma-yazma performansı sağlayabilmek için kullanılan yöntemler bütünüdür. Bu yöntemle birden çok sayıdaki diske , tek bir disk gibi davranılır. Temel olarak yazılım ve donanım olmak üzere iki farklı türü uygulanabilir.


Donanım Düzeyi Raid : Bu düzeyde raid işlemleri , genellikle bir pc kartı üzerinde gelen raid controller ile gerçekleştirilir. Sisteminizdeki diskleri bu karta bağladıktan sonra istenilen raid seviyesi uygulanır. Hem IDE hemde SCSI ara birimler için raid kartları mevcuttur. Son zamanlarda “raid controller” üniteleri, pc kartının yanı sıra , birçok anakartın üzerine entegre edilmiş bir şekilde gelmektedir. Bu sistemin avantajı, işletim sisteminin bu süreçle uğraşarak zaman veya işlemci gücü harcamamasıdır. Donanım çözümlerinde şeritlere ayırma ve hata toleransı için gereken işlemci ve belleği raid controller içerir. Bu da sistemin daha hızlı çalışmasına olanak verir.

Yazılım Düzeyi Raid : Alternatif olarak raid uygulamak için, raid yönetim programlarından biride kullanılabir. Bu programlar genel olarak disklere erişimi kontrol eder. Linux yazılım düzeyi raid uygulamak için çekirdeği tarafından desteklenen MD sürücüsünü kullanır. Yazılım düzeyi raid uygulayabilmek çekirdeğin Multiple-Devices-Driver-Support sürücüsünü içerecek şekilde derlenmiş olması gertekir . Hemen bu seçeneğin altında raid seviyeleri listelenmektedir. Günümüzdeki bütün popüler dağıtımlar, çekirdeklerini raid destekleyecek şekilde derlerler.
Raid Seviyeleri: İhtiyaçlarımız ve elimizdeki donanım doğrultusunda farklı raid seviyelerini uygulayabiliriz. Elimizde iki adet disk varsa ve performans , disk alanı kullanımı bizim için önemli ise raid 0 bir seçenek olabilir. Elimizde daha çok sayıda disk varsa ve güvenliğe de ihtiyacımız varsa raid 5 uygulayabiliriz. Aşağıda kısaca raid seviyelerinden bahsedilecektir.
Linear Raid : İki yada daha fazla disk tek bir parça olarak birleştirilir. Diskler birbirinin ardı sıra eklenmiş gibi çalışırlar yani ilk önce birinci kısım dolacak ardından ondan sonra gelen ve sırayla diğerleri. Bu kurulumda disklerin eşit olması da gerekmez. Bu tür kurulumda güvenlik yoktur. Disklerden biri çöktüğü taktirde hemen hemen tüm dizideki bilgiler kaybolur. Disklerdeki bilgilerden bir kısmı kurtarılabilir. Disklere sıra ile yazıldığı için herhangi bir performans artışı söz konusu olmaz. Aynı anda farklı disklerdeki verilere ulaşmaya çalışıldığında bir miktar performans artışı görülebilir.
Raid-0 : Bu mod aynı zamanda şeritli (stripe) olarak da bilinir. Linear kuruluma benzer önemli farkı okuma ve yazmanın paralel halde olmasıdır. Bu nedenle birleştirilecek diskler (bölümlemeler) aynı boyutta olmalıdır. Tüm işlemler paralel gerçekleştiğinden hepsi aynı anda dolar. Elimizde aynı boyutta iki disk olduğunu ve bu disklere 4 byte lık bloklar halinde 16 byte veri yazmak istediğimizi var sayalım. bu durumda ilk dört byte birinci diske ikinci blok ikinci diske yazılır. Üçüncü blok tekrar birinci diske yazılır. Dördüncü blok veri ise ikinci diske yazılır ve bu işlem bu şekilde sürüp gider. Bu kurulum tipinde de güvenilirlik yoktur. Üstelik bir diskin çökmesi durumunda bilgilerin disklere şeritler halinde yazılmasından dolayı hiç bir şekilde geriye kalan disklerden bilgi kurtarmak mümkün olmayacaktır. Tum okumalar ve yazmalar tum diskler üzerinde paralel yürüdüğünden performans yüksektir. Genelde raid 0 performans amaçlandığında kullanılır.
Raid-1 : bilgi blokları iki diske birden yazılırlar. Burada en az iki disk kullanılabilir. Böylece birbirinin kopyası olan diskler oluşur. Kapasite tek bir disk kapasitesidir. Örneğin elimizde 100 GB büyüklüğünde iki disk var ve bu disklere raid-1 uyguladığımızı var sayıyoruz. Raid-1 dizsinin toplam kapasitesi yine 100 GB olacaktır. Farklı disk kapasitedeki disklerde en küçük kapasiteli disk referans alınacaktır. Elimizde 60 GB ve 100 GB uzunluğunda iki disk varsa raid-1 dizisinin uzunluğu 60 GB olacaktır. Herhangi bir disk arızası durumunda ikinci disk görevi üstlenerek sistemin çalışmasını sağlayacaktır. Böylece iş akışı devam edecektir. Arızalı disk sistem çalışırken çıkartılıp yerine sağlam disk takılabilir ve sistem konfigürasyonu eski haline getirilir. Disk okuma hızı artarken yazma hızı ise yavaş olmaktadır. Disk güvenliğinin en üst seviyede olduğu durumlarda kullanılır.
Raid-4 : Bu çok sık kullanılan bir kurulum değildir. Üç yada daha fazla diskle yapılır. Disklerdeki bilgilerin güvenliğini sağlayan eşlik(parity) bilgisi tek bir diskte tutulur. Diğer disklerde veriler bulunur. Disklerden birinin çökmesi durumunda eşlik bilgisi kullanılarak veriler kurtarılır. İki veya daha fazla diskin çökmesi durumunda ise tüm bilgiler kaybolur. Bu kurulumun pek fazla kullanılmamasının sebebi eşlik bilgisinin tek bir diskte bulunması ve her yazım sırasında güncellenmesinin performans darboğazı oluşturması. Eğer yavaş diskleriniz ve bir de çok hızlı diskiniz varsa kullanabilirsiniz.

Raid-5 : En çok kullanılan raid seviyesi diyebiliriz. Bilgi güvenliği yanı sıra performans artışı sağladığı için de çok tercih edilmektedir. Raid-5 te en az üç disk ile yapılır. Diskler üzerindeki veri güvenliği raid-4 te olduğu gibi eşlik(parity) bilgisi ile yapılır. Raid-5 in farkı ise eşlik bilgisinin tüm disklere dağıtılmasıdır. Aşağıdaki şekil raid-5 in çalışmasını açıklamaktadır. Elimizde beş adet disk ve dört data bloku olduğunu varsayalım. Her data bloku sırası ile ayrı ayrı disklere yazılıyor. Dört data bloku yazıldıktan sonra 5. sıradaki diske ilk dört blokun eşlik bilgisi yazılıyor. Aşağıdaki şekilde 0 parity olarak gözüküyor. Daha sonra üç data bloku yazılıyor ve dördüncü diske eşlik bilgisi yazılıyor ardından beşinci diske tekrar data yazılıyor. Böylece eşlik bilgisi ile beraber veriler de tüm disklere dağıtılmış oluyor. Toplam kullanılabilir disk alanı disk sayısının bir eksiği kadardır. Elimizde 100 GB büyüklüğünde 5 disk olduğunu varsayalım. Dizinin toplam kapasitesi 5-1*100=400 GB olacaktır. Disklerden biri çökerse veri kurtarılabilir olacaktır. Eğer iki disk birden çökerse verilerin tümü kaybedilir. Hem okuma hemde yazma işlemlerinde performans artışı gözlemlenir. Performans artışını daha iyi anlayabilmek için şöyle bir örnek verebiliriz. Elimizde 10 sayfalık bir yazı var. Bu yazıyı bir kişi 1 saatte yazabilirken 5 kişi 12 dakikada bitirebilir.
Linux Raid Aygıtları: Linux Raid için MD sürücüsünü kullanır Bu yüzden Linux raid aygıtları adlandırılmaya md ön eki ile başlar ile başlar. Bu aygıtlar /dev dizininde oluşturulmuş halde bulunurlar.(Eğer çekirdek MD sürücüsünü içerecek şekilde derlendiyse) Sistemdeki ilk raid aygıtı /dev/md0 olarak adlandırılır. Bir sonraki aygıt ise /dev/md1 adını alır. Her raid aygıtı uygulanacak raid seviyesine göre sabit diskler içerirler. Raid aygıtları /etc/raidtab dosyasında yapılandırılırlar. Raidtab dosyası klasik bir metin konfigürasyon dosyasıdır. Aşağıda /etc/raidtab dosyasında kullanılabilecek girdiler listelenecek ve daha sonra her raid seviyesinin örnek konfigurasyonları verilecektir.
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 4
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1


raiddev aygıt_adı: Herhangi bir raid seviyesi için raid aygıtını belirler.
raid-level sayı: Raid seviyesini belirler . Bunlar 0,1,4,5 ve linear olabilir.
nr-raid-disks sayı: Herbir raid aygıtındaki disk sayısıdır.
nr-spare-disks sayı: Dizideki yedek disk sayısıdır. Bu yedek disk dizideki asıl disklerden herhangi birinin çökmesi durumunda devreye girerler. Opsiyoneldir, kullanılmayabilir.
persistent-superblock 0 or 1: Kalıcı süperblokun kullanılıp kullanılmayacağını belirtir. Kalıcı süperbloklar raid konfigürasyon bilgisini içerir. Eğer bu değer 1 olarak ayarlanırsa raid konfigürasyon bilgisi diskteki süperblokta ve süperblokun kopyalarında tutulur. Böyle bir yapı çekirdeğin raid yapısını güvenli bir şekilde tespit etmesini sağlar. Bazı durumlarsa raidtab dosyası raid dizisin oluşturan disklerde tutulabilir. Örneğin açılışın raid aygıtlardan yapıldığı durumlar gibi. Çekirdek raid dizisini başlatabilmek için raidtab bilgisine ihtiyaç duyar fakat raid dizisini başlatamadığı içinse diskleri bağlayamaz ve raidtab dosyasına ulaşamaz. Bu durumda Persistent-superblock değeri 1 yapılarak bu bilgi süperblokta saklanır. Çekirdek bilgiyi süperbloktan okur ve raid dizisi güvenle başlatılabilir.
chunk-size boyut: Mantıksal veri bloku büyüklüğünü ifade eder. 2 ve kuvvetleri şeklinde değerler verilir. Elimizde 3 diskten oluşan bir raid-5 dizisi olduğunu düşünelim. 20 kb büyüklüğünde bir veriyi chunk-size 4 olacak şekilde diziye yazmaya kalkarsak, Raid-5 veriyi dizideki disklere 4 kb büyüklüğünde veri blokları halinde yazacaktır.
device aygıt_yolu: Diziyi oluşturan her bir diskin tam aygıt yolu.
parity-algorithm algoritma: Raid-5 dizileri için uygulanacak eşlik algoritmasını belirler.
spare-disk sayı: Device parametresi ile birlikte kullanılmalıdır. Dizideki disklerin herhangi birinde meydana gelebilecek çökme sonrasında devreye girecek diski ve sırasını belirler.
Raid Seviyeleri ve Raidtab Girdileri
Linear Mode : Üç adet disk ile linear mode raid yapmak için aşğıdaki gibi bir raid tab konfigürasyonu yapılmalıdır.
raiddev /dev/md0
raid-level linear
nr-raid-disks 3
persistent-superblock 1
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
device /dev/sdd1
raid-disk 2
Raid aygıtı için md0 seçilmiştir ve üç adet SCSI disk kullanılarak linear mode raid yapılandırılmıştır. Persistent-superblock değeri 1 yapılarak Konfigürasyon bilgisi süperbloka da yazılmıştır.
Raid-0 :
raiddev /dev/md0
raid-level 0
nr-raid-disks 2
persistent-superblock 1
chunk-size 4
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
Yazma işlemi paralel olduğu için disklerin boyutu yada bölümlemeler aynı olmak zorundadır. Yazma işlemi paralel yapıldığından ötürü chunk-size değeri kullanılmıştır.
Raid-1 :
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 1
chunk-size 4
persistent-superblock 1
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
device /dev/sdd1
spare-disk 0
Yine aynı boyutta iki disk yada aynı boyutta olacak şekilde ayrılmış disk bölümleri üzerine raid-1 yapıyoruz. Dizideki iki diskten herhangi biri çöktüğünde /dev/sdd1 aygıtı yani spare-disk 0 devreye girecektir.
Raid-4 :
raiddev /dev/md0
raid-level 4
nr-raid-disks 3
nr-spare-disks 1
persistent-superblock 1
chunk-size 32
device /dev/sdb1
raid-disk 0
device /dev/sdc1
raid-disk 1
device /dev/sdd1
raid-disk 2
device /dev/sde1
spare-disk 0
20 GB büyüklüğünde üç disk kullanılarak raid-4 yapılıyor ve bir yedek disk ekleniyor. toplam kapasite 40 GB bir disk eşlik bilgisi için ayrılmıştır.
Raid-5 :
raiddev /dev/md0
raid-level 5
nr-raid-disks 5
nr-spare-disks 1
persistent-superblock 1
parity-algorithm left-symmetric
chunk-size 128
device /dev/sda1
raid-disk 0
device /dev/sdb1
raid-disk 1
device /dev/sdc1
raid-disk 2
device /dev/sdd1
raid-disk 3
device /dev/sde1
raid-disk 4
device /dev/sdf1
spare-disk 0
Beş adet 50 GB büyüklüğünde disk ile raid-5 yapılmıştır. Dizideki toplam kullanılabilir alan 5-1*50=200 GB dir. Chunk-size değerlerinin değişmesi tamamen performansla ilgilidir. Yapılan testler sonucunda her bir raid seviyesinde farklı chunk-size boyutları ile farlı performans sonuçları alınmıştır. Bu durum disklerin fiziksel özellikleri ve dosya sistemin boyutuna bağlı olarak değişmektedir. Bu testlerle ile ilgili ekte bir tablo verilmiştir.

Raid Aygıtlarının Ayarlanması ve Raid Dizisinin Başlatılması
Çekirdeğin raid desteğini kontrol ettikten ve /etc/raidtab dosyasında gerekli ayarlamaları yaptıktan sonra sıra dizideki diskleri ayarlamaya ve raid dizisini başlatmaya geliyor. Diskleri gerektiği şekilde bölümlendirmek için fdisk aracını kullanabilirsiniz. Bu komutun kullanımı ile ilgili bilgi disk yönetimine giriş bölümünde verilmiştir. Eğer disk bölümleri de hazırsa raid dizimizi başlatabiliriz. Bunun için mkraid komutunu kullanırız.

[root@linuxserver root]# mkraid /dev/md0

raid aygıtının /dev/md0 için ayarlandığı varsayılıyor. Bu komut /etc/raidtab dosyasında /dev/md0 için ayarlanan konfigürasyon bilgisini okuyarak raid dizisini oluşturur. Bu komut bölümlere ilk değerlerini atar ve raid dosya sistemini oluşturur. Daha sonra raidstart komutunu kullanarak bu aygıtları etkinleştirmemiz gerekir.

[root@linuxserver root]# raidstart /dev/md0

Raid aygıtı etkinleştirildikten sonra bu aygıtlar üzerinde dosya sistemi oluşturabilir ve bu aygıtları sisteme yerleştirebiliriz. Aşağıdaki örnekte /dev/md0 aygıtı üzerine ext2 dosya sistemi oluşturuluyor.

[root@linuxserver root]# mke2fs /dev/md0

Artık raid aygıtını sisteme yerleştirebiliriz bunun için önce raidstore adlı bir dizin oluşturuyoruz.

[root@linuxserver root]# mkdir /mnt/raidstore

[root@linuxserver root]# mount /dev/md0 /mnt/raidstore

Artık raid diskler kullanıma hazırlar. Herhangi bir hata iletisi almadıysanız raid aygıtınız doğru çalışıyor demektir. Fakat bu her zaman doğru çalışacağı anlamına gelmez. Raid aygıtının ve bu aygıta bağlı disklerin hizmet durumu görmek istiyorsanız, bunun için birkaç seçeneğe sahipsiniz. Bunlardan ilki /proc/mdstat dosyasıdır.

[root@linuxserver root]# cat /proc/mdstat

Personalities : [raid1]

read_ahead 1024 sectors

md5 : active raid1 sdb5[1] sda5[0]

4200896 blocks [2/2] [UU]

md6 : active raid1 sdb6[1] sda6[0]

2104384 blocks [2/2] [UU]

md7 : active raid1 sdb7[1] sda7[0]

2104384 blocks [2/2] [UU]

md2 : active raid1 sdc7[1] sdd8[2] sde5[0]

1052160 blocks [2/2] [UU]

unused devices: none

Tüm raid aygıtları ve bu aygıtlara bağlı diskler görüntülenir. Raid aygıtlarında yada disklerin herhangi birinde meydana gelebilecek problem buradan izlenebilir. Bir diğer yol ise “lsraid” komutudur.

[root@linuxserver root]#lsraid -a /dev/mdx

Bir başka yol ise “mdadm” (multiple devices admin) kullanmaktır. Bu araç 2001 yılında Neil Brown tarafından raid aygıtlarının yönetimini kolaylaştırmak amacı ile yazılmıştır. mdadm aracı raid aygıtları oluşturabilir , bu aygıtları başlatabilir , durdurabilir , raid aygıtlarına diskler ekleyip çıkarabilir ve bu aygıtları izleyebilir. mdadm aracı mdadm.conf adlı bir konfigürasyon dosyası tutar, fakat bu dosya opsiyoneldir , kullanılmayabilir. Tüm raid işlemleri sadece mdadm aracı kullanılarak yapılabilir. Bu aracı http://www.cse.unsw.edu.au/~neilb/source/mdadm/ adresinden temin edebilirsiniz. Aracın kullanımı ile ilgili daha fazla bilgi içinse http://www.linuxdevcenter.com/pub/a/linux/2002/12/05/RAID.html adresine bakabilirsiniz.

[root@linuxserver root]#mdadm –detail /dev/mdx

Tüm bu komutlarla sadece anlık bilgiler elde edebiliriz. Disklerde meydana gelebilecek bir sorunu yukarıdaki izleme komutlarını kullanmadığımız sürece öğrenemeyiz. Hizmet zamanı süresince raid aygıtlarını ve disklerin durumunu izleyebilmek için mdadm aracını kullanabiliriz. mdadm aracı komut satırı aracı olmasının yanında bir hizmet olarakta çalışabilir. Bu hizmeti başlatabilmek için

[root@linuxserver root]# /etc/init.d/mdmonitor start

mdadm hizmeti raid aygıtlarını izlemeye başladı. Fakat mdadm aracı raid aygıtı izleme ve hata bildirimi ile ilgili parametreleri /etc/mdadm.conf dosyasından okumaktadır. Böyle bir dosya oluşturmadıysak aşağıdaki komut işimizi görecektir.

mdadm –monitor –mail=root@localhost –delay=1800 /dev/md2 &

Bu komut ile mdadm aracının, root kullanıcısına, raid aygıtlarında herhangi bir problem oluştuğunda, bilgi verilmesini sağlıyoruz. Delay parametresi ise hata kontrolünü 1800 saniyede bir yapmasını sağlıyor. Peki disklerden birinde sorun bulursak ne yapmalıyız. Eğer herhangi bir raid aygıtı içerisinde spare disk tanımlamışsak, Bu disk hemen devreye girer ve onarım işlemi otomatik olarak başlar. Tanımlamamışsak bu diskleri sistemden kaldırmalı ve yerlerine sağlıklı diskleri eklemeliyiz. Böyle bir durumu canlandırmanın iki yolu vardır. Birincisi donanımsal yöntemdir. Disklerden herhangi birinin kablolarını çekip sistemi yeniden başlatırsak, ilgili disk arızalı olarak görülür. Herhangi bir arıza durumu basitçe canlandırılmış olur. Bir diğer yöntem ise yazılımsal yöntemdir. Raid dizisindeki herhangi bir disk bazı araçlar yardımıyla sanki arızalıymış gibi gözükür. Böylece raid dizisini test etme imkanı buluruz. Bunlardan ilki raidsetfaulty aracıdır.

# raidsetfaulty /dev/md0 /dev/hdb2

bir diğeri mdadm aracıdır ve kullanımı aşağıda gösterilmiştir.

# mdadm –manage –set-faulty /dev/md0 /dev/hdb2

Her iki durumda da md0 aygıtındaki hdb2 diski arızalı gibi davranacaktır. Sistem logları kontrol edilirse şöyle bir mesajla karşılaşılır.

kernel: raid1: Disk failure on hdb2, disabling device.

Bu durumu cat /proc/mdstat ve lsraid -a komutlarını kullanarak doğrulayabilirsiniz. Bundan sonra yapılacak olan şey arızalı diski diziden çıkarmaktır.

# raidhotremove /dev/md0 /dev/hdb2 yada

# mdadm /dev/md0 -r /dev/hdb2

daha sonra çıkardığımız arızalı diskin yerine sağlam bir disk takarak diski raid dizisine yeniden ekliyoruz.

# raidhotadd /dev/md0 /dev/hdb2 yada

# mdadm /dev/md1 -a /dev/sdc2

Diskin eklenmesi ile birlikte yeniden yapılandırma işlemi başlatılır. Raid bilgi edinme araçlarını kullanarak bu işlemi gözlemleyebilirsiniz.

Otomatik Başlatma : Otomatik başlatma raid aygıtlarınızın sistem açılışı sırasında çekirdek tarafından bulunarak başlatılması işlemidir. Normal şartlarda raid aygıtları raidstart ve raidstop komutları yardımı ile başlatılıp durdurabilir. Bu işlemin gerçekleşebilmesi için aşağıdaki şartlar yerine getirilmelidir.

Çekirdek “Autodetection support” özelliği içerecek şekilde derlenmiş olmalıdır.
Raid dizisi persistent-superblock değeri 1 olacak şekilde oluşturulmuş olmalıdır.
Bölümlendirme tipi(Partition-types) 0xFD olarak ayarlanmalıdır. Bunun için fdisk aracı kullanılabilir.
Not: Bölümlendirme tipi değiştirilirken raid dizisi çalışmamalıdır. Diziyi raidstop komutu ile durdurduktan sonra fdisk aracını kullanarak disk üzerindeki bölümlendirme türünü değiştirmelisiniz.

Raid Aygıtından başlatma : Günümüzde bir çok dağıtım kurulum esnasında raid dizisi oluşturabilmektedir. Test amaçlı olarak kullandığım Fedora 2 ve 3 sürümleri kurulum esnasında Raid-1 dizisini sorunsuz olarak oluşturdu. Sistemimin kök dizini(/) /dev/md0 olacak şekilde ayarladım ve kurulumu gerçekleştirdim. Sistem başlangıç esnasında da herhangi bir problem yaşamadım. Sistemi başlatmak için gerekli GRUB konfigürasyonu otomatik olarak oluşturuldu. Fakat bu durum sadece raid-1 için mümkün oldu raid-4 yada raid-5 seviyelerini kurulum esnasınında ayarlayamıyorsunuz. Sisteminizi raid-1 dışındaki bir raid seviyesinden başlatmak yada kök bölümünüzü bir raid dizisine yerleştirmek için daha uzun bir uğraş gerektiriyor. Burada bu konu üzerinde durmayacağız. Fakat bu konu ile ilgili detaylı bilgiyi ve örneği http://www.linux-sxs.org/storage/raid_setup.html ve http://www.tldp.org/HOWTO/Software-RAID-HOWTO-7.html adreslerinden temin edebilirsiniz.

Konular

Hanci.org sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.
Hanci.org sitesini kullanarak çerez politikamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.