Storage
terimi, bir sisteme bağlı olan kalıcı veri depolama aygıtlarını kapsar. Kalıcıdan kastımız RAM gibi geçici veri tutan medyum olmayanlardır. Söz gelimi güç kaynağı olmadan medyum hala veri tutabiliyorsa, o işletim sisteminin bakış açısından storagedır. Buna disk kadar floppy ve optik medyumlar da dâhildir.


Disk mantıksal erişim için 512 byte lık sektörlere bölünmüştür. Bileşik sektörlere partisyon denir. Bir diskte birden fazla partisyon olabilir. Partisyona, örneğin aygıt sürücüsünün yaptığı abstraksiyondan tek ve bağımsız nesne olarak erişildiğinde volüm denir. Örneğin diskte tek partisyon varsa, buna volüm denilebilir. Birden fazla partisyon olduğunda ve birçok diske bu yapı dağıldığında bu nesneye multipartisyon volümü deriz.
‘Volüm’ veya ‘partisyon’ kavramlarının kullanılmalarının farklı bakış açıları ve farklı mantıkları vardır. Partisyonlama esnasında yaptığımız bütün işlemleri partmgr.sys partisyon yöneticisi ile yaparız. Sonrasında da partisyonlara yönelik yapılan IO da bunları ayırt etmeden bu yönetici sorumludur. Örneğin tek diskteki partisyonları algılayıp ve birleştirip ilgili volüm bilgisini volüm yöneticisi volmgr.sys e aktarır. Burada mount manager mountmgr.sys de devreye girer. Kendisi örneğin mountpoint ilşkilerinden ve disklere harf atamalarından sorumludur. Bu bilgileri registry de tutar.
Yani disk işlemlerini volume manager, partisyon işlemlerini partition manager ve diskler ile ilgili kullanıcılara ve aplikasyonlara erişimi mount manager sağlamaktadır.

Geçen bölümde IRP den bahsetmiştik. Bir IO yu başarılı tanımlayabilmek için bütün ilgili sürücülere ihtiyacımız var demiştik. Daha yüksek abstraksiyondan bu nesneye storage stack deriz. S. 646 bireylerini görevleriyle gösteren güzel bir özet grafiği bulabilirsiniz.


Storage kavramını ve temel disk terimlerini tanımladık. Temel modülleri de özetledik. Şimdi diskin kendi mantıksal yapılarına bakabiliriz.

MBR diskin ilk sektöründe partisyon ve erişim bilgileri tutulur. Böylece sistem bootunda BIOS buradan işletim sisteminin boot edebilmesi için gerekli kodu okuyup RAM e yükleyebilir. MBR 32bit genişliğindedir ve ondan mesela sadece 2TB lık bir disk alanını tanımlayabilir.

Bunun gibi sınırlamaları geçebilmek için Intel EFI, extensible firmware interface standardını geliştirmiştir.
Bu 64 bit genişliğinde ana kart da uygulanan firmware, diskteki 64 bit genişliğindeki yapıları da okuyabilmektedir. Mümkün kıldığı partisyon şeması GPT dir.


Volüm yönetimine bakarsak iki tip diskimiz vardır: basic ve dynamic. Sadece GPT (GUID partitioning Table) veya MBR (Master Boot Record) partisyonlama şemalarını kullanan diskler basic dir.
Dynamic in farkı multipartisyon özelliğidir. Yani bir volüm birden fazla disk üzerinde çok partisyondan oluşabilir. O zaman basitçe basic diskdeki partisyona dynamic diskde volüm deriz. Bu terimlerin en yaygın kullanılma şekli zaten böyledir. Yalnızca işletim sisteminin nesneler ile çalışma mantığı açısından bu önemli değildir.
Sürücü açısından ama önemlidir. Çünkü volümden söz edince sadece bir diskte partisyonu tanımlayan hangi sektörler arası konum bilgisinin yanında, ayrıca disk bilgisi ve partisyonlar arası ilişki (spanned, mirrored, striped ve RAID5) de ‘’partisyonu’’ tanımlamaktadır. Volmgr.sys sadece basic diskler ile çalışır. Dynamic yapıyı algılayamaz.

Dynamic diskler ile volmgrx.sys çalışır. Bu dynamic disklerde bulunan ve MBR/GPT ın üstüne yukarıda sözü geçen artı bilgileri diskten okuyabilir. Örneğin iki diskte birer partisyon yaratıp bunları redundancy için mirror lamak istiyoruz. Disk management da diskleri dynamic yaparız ve bu iki partisyonu raid1 yapabiliriz. Ancak her diskte, GPT veya MBR, bu raid bilgisini nasıl tutatırız?

Bilgiler bu tip diskte LDM Database, logical disk manager bölgesinde tutulur. LDM veri tabanı her dynamic diskin sonunda 1 MB lık bir alanda tutulur. Bir disk grubuna/multipartisyon volümüne dahil bütün disklerde bu LDM bilgisi aynıdır. Volmgr.sys bu bilgiyi okuyamaz, ama volmgrx.sys dynamic yapılar ile çalışabilen bir volüm yöneticisidir.

Bu tarz dynamic partisyonlara soft denilir, çünkü bu bilgiler GPT veya MBR da tutulmaz. MBR ve GPT de tutulan partisyon bilgileri ile oluşturulan basit partisyonlara hard denilir.

Yani GPT, MBR, Basic ve Dynamic ayrı özelliklerdir. Kesiştikleri noktalar bunlardır: GPT diskten boot edebilmek için donanımın EFI özelliği olmalıdır. EFI si olmayan sistem boot da GPT diskteki legacy MBR ı kullanıp boot edemez, ancak boot dan sonra normal erişebilir. Bunu da sadece işletim sistemi 64 bit ise yapabilir. 32 bit işletim sistemi GPT diske erişemez, sadece legacy MBR bölümünü görür.
Dynamic diskden de Windows boot edemez, yani dynamic MBR veya GPT den boot edemez.


Diske mantıksal erişim kavramlarını özetledikten sonra diskin kendi çalışma şekline bakabiliriz.



Disk
e işlem yaparken bir scheduling algoritmasına ihtiyacımız olur. Yani diske IO umuzu en efektif nasıl yaparız konusunda belli bir metodolojiyi uygulamamız gerekiyor. Bizi sınırlayan diskin kendi yapısıdır. Yani disk platter/spindle disklerinden oluşur, burada üst üste bir den fazla da olabilir. Bunu okuyabilmek için de bir okuma/yazma kafası ile disklerin üzerinden geçeriz. Diskin üzerindeki manyetik alanları kontrol ederek üzerinde kalıcı veri depolayabiliriz. Bu kafayı diskin üzerinde yönetmenin farklı yolları vardır.

En yaygın kullanılanlardan biri SCAN algoritmasıdır. Bu asansör algoritması olarak da bilinir. Örneğin asansör hep bir yönde hizmet verir ve ancak istek olmayıp karşı yönden bir istek gelirse yönünü değiştirir. Yani asansör en üst kata kadar çıkarken istekleri tamamlar ve sonra aşağıya doğru yön değiştirerek isteklere hizmet vermeye devam eder. Ve yine en alt katta yukarı doğru yön değiştirir vb. Bu davranış elbette istek olduğu sürece devam eder. Asansör boşken ve herhangi bir katta dururken yeni istek geldiğinde, asansör isteğin olduğu yöne doğru ilerler ve kendi yönünü bu şekilde belirleyebilir.
Bu şekilde SCAN uygulayan diskin okuma/yazma kafası da hizmet verir. SCAN in özelliği iki yöne doğru da hizmet verebilmesidir, idle iken istek ne taraftaysa o yöne doğru hareket edebilmesi ve istek olduğu sürece sadece diskin iç veya dış kenarlarında yön değiştirmesidir.

Circular, yani C-SCAN de kafa sadece bir yönde ilerler. Kafa diskin dış kenarına vardığında, yine diskin iç kenarına hareket etikten sonra, içten dışarıya doğru hizmet vermeye devam eder. Yani isteklere hizmet verirken kafa hep bir yönde hareket eder.

Daha efektif bir çözüm LOOK algoritmasıdır. SCAN den tek bir önemli farkı vardır: kafa bir yönde hizmet verirken, o yöndeki son hizmetten sonra yine yön değiştirebilir. Yani hizmeti devam ettiği süre SCAN gibi illaki en son iç ve dış silindire kadar hareket edip yön değiştirmez. Bu açıdan SCAN den daha zekidir.

Circular türevi, C-LOOK da bir farka kadar C-SCAN gibidir: yine isteklere sadece içten dışa doğru hizmet verilir, ancak bu sadece istekler arası yapılır. Yani yine kafanın illaki en iç ve dış silindirlere kadar gitmesine gerek yoktur. Kafanın hareketi hep en dışa doğru ve en içe doğru bulunan istek lokasyonları arasında gerçekleşir.
Windows C-LOOK algoritmasını uygular.


Son olarak da diske bağlanma şekillerine ve ihtiyacımız olan modüllerin listesini tamamlayabiliriz.


SAN ortamlarında yaygın olarak multipathing uyarlanır . Redundancy, artıklık için bir diske birden fazla yol üzerinden erişebiliyor olabiliriz. Örneğin sunucuda birden fazla HBA kartımız olabilir, storage controller Aktif/Aktif çalışıp istekleri paralel diske gönderip alabiliyordur ve arada da birçok SAN switchi de olabilir. Bu durumda diske olan fiziki bağlantımızı kaybetmemiz zorlaşmış olur, ama diske giden her path, yol için bir disk görürüz. Yani işletim sistemi ve disk arasında kaç erişim imkanı varsa, o diski disk management da o kadar kez görürüz.

Bu diskleri ayırt edip tek disk görmemizi sağlayan device specific module sürücüsü, DSM dir. Ayrıca pathlerin durumlarını kontrol edip işletim sistemine bildirmesinden de sorumludur ve bu pathler arası farklı load balance ve failover ayarlarını da uygulamaktadır. İlk disk.sys multipath durumunu algılayıp gerekli DSM in devreye alınmasından sorumludur. Bu durumu kendisi mpio.sys de bildirir ve bu örneğin multipath gelen disklerin güç yönetiminden sorumludur.

Mantıksal disk için ve onun her pathi için bir storage stack oluşturulur. Sonra DSM hangi stacke ne göndereceğine karar verir. Örneğin load balance policysine göre her stack üzerinden her path için IO yapabilir. Pathler arası yük dağılımı gerçekleştirmenin başka bir yöntemi yoktur, kısaca her bir path için farklı bir IRP yapısına ihtiyacımız olur.

Windows Server 2008 den itibaren Microsoft un da kendi generic DSM i vardır: msdsm.sys . Yaygın olarak buna Microsoft multipath denir. Önemli olan nokta bunu mpio.sys ile karıştırmamaktır. Mpio.sys path ayırmaz; sadece DSM in kullanabileceği bir frameworkdür ve DSM ile işletim istemi arasında aslında temel disk haberleşmeleri için bir ara yüz sunar.

Multipath de partition manager yine önemli bir rol oynar: diskleri signature ları (MBR) veya GUID leri (GPT) ini kullanarak ID leyip ayırır; ve iki disk aynı bilgiye sahipse birisinin ID sini random değiştirir. Bu, işletim sisteminin Disk signature/GUID değiştirilmesi uyarladığı tek algoritmadır. İşletim sisteminde bu ID leme özellikle failover cluster için önem taşımaktadır. Cluster disklerini signature/GUID leri ile IDler ve tanır.

Listeyi tamamlamak adına storage stack de yer alan son ve önemli modüller ntfs.sys ve storport.sys dir. Ntfs daha önceki bölümlerden tanıdığımız NT file system sürücüsüdür. Storport işletim sisteminin port aygıt sürücüsüdür ve diğer üreticilerin miniport sürücülerine bir ara yüz sunar.  Örneğin HBA sürücüleri veya lokal raid sürücüleri genelde storport miniport sürücüleridir. Storport framewrkünden önce scsiport.sys kullanılmaktaydı, ama scsiport sürücüleri artık kalmadı.


Bütün disk işlemlerini disk management ile yapabiliriz. Her sürücü, sunucunun lokal raid sürücüsü olsun veya DSM olsun, Windows un Virtual Disk servisinin API lerini kullanarak disk management da çalışabilir ve böylece diskleri için ayrı bir arayüz yazmak zorunda kalmaz. Virtual Disk servisi vds.exe de uyarlanır. Örneğin disk management açıldığında vds.exe bütün aygıtlarının kendisine bildirilmesini bekler.


Son olarak bütün storage stackini özetleyecek olursak: Yazılım IO yapmak istediğinde bir önceki bölümde özetlediğimiz şekilde I/O subsystemini devreye alır. Ve buradan file system sürücüsü ntfs.sys devreye girer. Bunun altında volume snapshot sürücüsü volsnap.sys çalışır. Altındadır çünkü file system deki bütün değişiklikleri takip eder. Onun altında volume manager yer alır, volmgr ve volmgrx.sys. Bu üst seviyede artık disklere harf ile erişiriz. Onun altında partition manager, partmgr.sys i bulabiliriz. Bütün bunların altında classpnp.sys gibi class sürücümüz çalışır. Bu seviyede storage türevine göre aygıtı ayırırız (örneğin disk mi, optik sürücü vb.). Class ın altında port/miniport sürücülerimiz çalışır ve onun altında da artık donanımsal firmware. Peki mpio veya DSM nerede derseniz, bunlar her path için böyle bir stack oluştururlar. IRP olarak bakarsak mpio ve DSM HBA sürücüsü gibi Class sürücüsünün altında ve donanımın üstünde yer alırlar.

BitLocker ve VSS dâhil olmak üzere Windows işletim sisteminin storage yönetiminin bütün özellikleri Windows Internals 5th ed. Chapter 8 ‘Storage Management’ da anlatılmaktadır: http://technet.microsoft.com/en-us/sysinternals/bb963901
Windows Internals 6th Edition’ın ilk bölümü yayınlandı:
http://technet.microsoft.com/en-us/sysinternals/bb963901


Başar Güner
Sr. Support Engineer, Microsoft