->
      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.{mosimage} 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.htmladresine 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/mdstatve 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ğihttp://www.linux-sxs.org/storage/raid_setup.htmlve http://www.tldp.org/HOWTO/Software-RAID-HOWTO-7.htmladreslerinden teminedebilirsiniz.
Powered by MightyAdsense