iSCSI     iSCSI w systemach Windows, cz. II

iSCSI w systemach Windows, cz. I Udostępnij na: Facebook

Autor: Grzegorz Tworek

Opublikowano: 21 sierpnia 2007

Zawartość strony
Co to jest iSCSI  Co to jest iSCSI
Jak działa SCSI  Jak działa SCSI
Jak działa iSCSI  Jak działa iSCSI
Przeczytaj pozostałe części tego artykułu  Przeczytaj pozostałe części tego artykułu

Co to jest iSCSI

Na pytanie, czym jest iSCSI odpowiedzieć można na kilka sposobów, od bardzo prostych, poprzez złożone aż po zacytowanie stosownych numerów RFC. W niniejszym artykule podane zostaną nie tylko informacje na temat tego, co przesyłane jest w pakietach TCP/IP, ale i garść informacji pozwalająca na użycie tego bardzo ciekawego protokołu w praktyce.

W największym skrócie, iSCSI jest praktyczną realizacją prostego pomysłu: skoro SCSI ma strukturę warstwową i istnieje stos SCSI, skoro połączenia TCP/IP są coraz szybsze, to czemu nie podmienić dolnych warstw protokołu SCSI tak, żeby zamiast używać 68 żył taśmy wide SCSI urządzenia zaczęły używać TCP/IP? W dalszej części artykułu podane zostaną szczegóły techniczne, ale warto uwierzyć, że rozwiązanie takie mimo pozornie karkołomnej idei naprawdę daje się zrealizować.

Pierwszym odruchem osób słyszących o iSCSI jest reakcja „ale co z prędkością działania?”. SCSI uchodzi niemal za symbol wydajności, niezawodności i profesjonalnego „serwerowego” podejścia do pamięci masowych.

Jeżeli zastanowić się nad tematem poważniej, to okazuje się, że najszybsze SCSI pracuje z wydajnością 320MB/s. Jest to wydajność magistrali a pojedyncze dyski w praktyce są nieco wolniejsze. Popularnym standardem jest SCSI 160 a dyski SATA używają magistrali o wydajności 150MB/s. Tymczasem dostępna naprawdę za grosze sieć GigabitEthernet to około 125MB/s. Czyli wcale nie tak dużo wolniej! Poza tym, kto powiedział, że koniecznie trzeba korzystać z rozwiązań najtańszych? Zaletą iSCSI jest to, że można. Nie to, że trzeba. Jeżeli ktoś o iSCSI myśli poważnie, to zamiast rozwiązania GbE dostępnego za kilkadziesiąt złotych skorzysta z dedykowanych kart HBA, Ethernetu 10Gb lub połączy kilka interfejsów gigabit w jeden o wyższej (sumarycznej) przepustowości.

Drugim aspektem budzącym odruchowy opór przed ISCSI jest kwestia niezawodności. Magistrala SCSI uznawana jest za przemyślaną, stabilną i solidną metodę komunikacji. Jeżeli tylko ktoś nie pomiesza z terminacją, zastosuje taśmy dobrej jakości, to całość działa przez lata bez najmniejszej usterki. Próba zastąpienia „poważnego” rozwiązania takim zupełnie zwykłym Ethernetem może być niezbyt dobrze widziana. I znowu, podobnie jak w przypadku wydajności okazuje się, że tanie i powszechnie dostępne urządzenia to przywilej a nie konieczność. W świecie tradycyjnego SCSI zapłacenie kilkuset złotych za jeden kabel jest rzeczą oczywistą. W świecie iSCSI można skorzystać z rozwiązań profesjonalnych a można samodzielnie zacisnąć parę wtyczek na skrętce.. Oczywiście, profesjonalne podejście nakazuje pomyśleć o kartach używających światłowodów zamiast miedzianej skrętki, dedykowanym łączu tylko dla pamięci masowych, zwielokrotnieniu połączeń, światłowodowych switchach itp. iSCSI jest zmianą podejścia a nie rozwiązaniem SCSI dla ubogich. Fakt, że można osiągnąć efekty używając tanich technologii nie powinien odstraszać. Chyba, że ktoś zamierza zbudować poważną serwerownię w oparciu o iSCSI nie, dlatego że rozwiązanie jest lepsze, ale dlatego, że można je zbudować w oparciu o najtańsze komponenty.

 Do początku strony Do początku strony

Jak działa SCSI

Aby dobrze zrozumieć iSCSI konieczne jest pojęcie jak funkcjonuje podejście tradycyjne. Protokół SCSI ma wszystkie cechy rozwiązań informatycznych sprzed kilkudziesięciu lat, ale sprawdza się w praktyce tak dobrze, że zmiany w nim sprowadzają się niemal wyłącznie do zwiększenia prędkości taktowania magistrali (od 5MHz, poprzez 10MHz, 20MHz, 40MHz aż do stosowanej w SCSI320 prędkości 80MHz) oraz do zwiększenia szerokości magistrali z 8bit do 16bit. Wprowadzono również modyfikacje standardu pozwalające na zwiększenie maksymalnej długości kabli z kilkudziesięciu centymetrów do kilkunastu metrów. Co ważne, w ogromnej większości przypadków urządzenia same „dogadują” się między sobą na temat swoich możliwości i w efekcie wszystko powinno działać wydajnie i niezawodnie. Każdy, kto świadomie korzystał ze SCSI wie, że pewnym wyzwaniem jest kwestia terminacji. W bardziej złożonych przypadkach (na przykład pomieszanie urządzeń 8bit i 16bit na jednej magistrali) wymaga to chwili zastanowienia, ale zasadniczo nie jest wielkim problemem zwłaszcza, że ogromna część współczesnych urządzeń potrafi automatycznie ustawić właściwą terminację.

Protokół SCSI należy rozpatrywać w dwóch aspektach: od strony drutów i od strony Windows.

Od strony drutów, SCSI jest typową magistralą o architekturze równoległej. Szerokość magistrali to 8 lub 16 bitów. Poszerzona do 16 bitów magistrala tradycyjnie zwana jest wide SCSI. Każde urządzenie na magistrali musi mieć unikalny identyfikator. Identyfikator ten ma 3 lub 4 bity w zależności od tego, której szerokości magistrali dotyczy. Identyfikator ustawiany jest zazwyczaj zworkami na urządzeniu, jednak w przypadku dysków hotswap często wymuszany jest przez klatkę a nie przez samo urządzenie. Jednym z urządzeń na magistrali jest kontroler SCSI i on również musi mieć swój identyfikator (tradycyjnie jest to ID 7). W przypadku współczesnych kontrolerów identyfikator ustawiany jest raczej przez własny BIOS niż przez zworki.

Urokiem SCSI są złącza. Ilość standardów wtyczek chyba przez nikogo nie została tak do końca ogarnięta. Wewnątrz komputera spotkać można wtyczki 50 pinów, wtyczki 68 pinów, wtyczki 80 pinów a dodatkowo różne ciekawe wynalazki takie jak na przykład standard wtyczek na płytach głównych IBM RS/6000, które sprawiają że znalezienie jakiegokolwiek zastępczego kabla jest niemal niemożliwe. Jedynym źródłem części jest producent, który doskonale zdaje sobie sprawę ze swojej przewagi nad klientem, jednoznacznie to wykazując to na każdej fakturze. Inna sprawa, że praktycznie wszystkie przypadki uszkodzenia takich kabli to te, w których użytkownik bardzo się starał używać siły zamiast rozumu.

Złącza zewnętrzne są nie do opanowania nawet przez specjalistów. Nawet, jeżeli ktoś nauczy się wszystkich kształtów wtyczek, zapamięta przemiłe oznaczenia typu VHDCI, UHDI czy HDC - bardzo szybko okaże się, że rozmówca pod tymi skrótami rozumie zupełnie coś innego. Przy zamawianiu kabla SCSI normalną praktyką jest wysyłanie zdjęcia gniazdka, do którego trzeba dobrać wtyczkę. Inna metoda przekazania faktycznej potrzeby często nie daje się znaleźć. Taki już jest urok niemal każdego standardu, który ma kilkadziesiąt lat. Do niedawna tak samo wyglądała choćby kwestia Ethernetu, który dopiero niedawno zwyciężył w postaci RJ-45, pozostawiając jednak sporą rozmaitość we wszystkich standardach światłowodowych.

Patrząc na to, co przesyłane jest w magistrali, stwierdzić można, że każda sekwencja komunikacyjna składa się z adresu odbiorcy, polecenia dla niego i zestawu danych. Odbiorca interpretuje polecenie i realizuje je. Istotną cechą SCSI jest to, że nie istnieje nikt o charakterze arbitra. Każde urządzenie może rozmawiać z innym, jeżeli tylko czuje taką potrzebę. Jeżeli pojawi się jakiś konflikt – pierwszeństwo ma urządzenie z niższym numerem identyfikatora. Tyle. Działa. Od lat i bez większych zastrzeżeń.

Ostatnio pojawił się standard SAS polegający na tym, że tradycyjne równoległe magistrale SCSI zastępuje się szeregowymi. Taka jest obecnie moda w informatyce i tak jak kiedyś SATA zdetronizowało IDE tak pewnie SAS zastąpi znaczną część SCSI na szerokiej taśmie. W środku SAS pozostaje jednak SCSI i tak też należy go traktować.

Od strony poleceń, SCSI widoczne jest jako seria bloków CDB (Command Descriptor Block) wysyłanych od urządzenia do urządzenia. W nomenklaturze SCSI urządzenia nazywane są initiator oraz target odpowiednio dla inicjującego i adresata transmisji.

Typowy blok CDB składa się z polecenia w postaci ośmiobitowej liczby i następujących po nim parametrów. Przykładowo, operacja zapisu zawiera dodatkowo dane na temat pozwolenia na zapisanie danych w buforze zapisu, informację o konieczności czyszczenia nośnika przed zapisem czy określenie prawdopodobieństwa, że zapisywane dane będą w niedługim czasie ponownie odczytywane. Każda odpowiedź od target zawiera informacje zakończone statusem operacji wykazującym czy wykonanie zakończyło się sukcesem.

Każde urządzenie SCSI przedstawia się przy pomocy liczby określającej jednoznacznie jego typ. Poza znanymi powszechnie dyskami (00h - direct-access device), taśmami (01h – sequential access device) czy skanerami (06h - scanner device) na oficjalnej liście znajdują się takie wynalazki jak procesory, naświetlarki czy „object-based storage devices”.

Od strony systemu Windows komunikacja SCSI zorganizowana jest w stos.

Pierwszą (najwyższą) warstwą stosu jest I/O subsystem. Zarządza on wszystkimi operacjami sterowników wejścia/wyjścia, obsługuje dodawanie i usuwanie urządzeń oraz wiele innych operacji, które muszą być dostępne dla użytkownika i aplikacji.

Pod warstwą najwyższą schowane są dobrze znane mechanizmy systemu plików i obsługi partycji.

Kolejną warstwą jest sterownik klasy urządzeń. Sterownik klasy odpowiada za przygotowanie danych dla określonego rodzaju urządzeń. Przykładem może być tu sterownik napędów taśmowych lub sterownik dysków. W efekcie wszystkie dyski obsługiwane są na tej samej zasadzie, tylko sposób komunikacji sterownika klasy z urządzeniem jest inny.

Aby zapewnić łatwość komunikacji sterownikowi klas, stworzono następną warstwę: port/miniport.

Warstwa port odpowiada za komunikację w danym standardzie. Przykładem takiego sterownika może być IDE, IEEE-1394 czy SCSI. Dzięki temu jeden stos równie sprawnie obsłuży CD-ROM IDE jak i skaner SCSI i dysk podłączony przez firewire. Sterownik warstwy port dostaje polecenie do wykonania i w zależności od sytuacji zwraca rezultat bez połączenia, kolejkuje zapytanie lub łączy się z urządzeniem przy pomocy sterownika miniport dostarczanego zwykle przez producenta sprzętu.

Sterownik miniport odpowiada bezpośrednio za komunikację z urządzeniem.

W efekcie, urządzenie dostaje od sterownika „zamówienie” na dane. Przygotowanie i kolejkowanie takiego zamówienia trwa pojedyncze mikrosekundy. Odpowiedź od urządzenia (nawet od szybkiego dysku twardego) przychodzi po relatywnie bardzo długim czasie. Dlatego sterownik nie czeka na odpowiedź, tylko zapewnia oparty o przerwania sprzętowe mechanizm powiadamiania go, że dane już zostały przygotowane. Dane są przesyłane (najczęściej przy użyciu DMA) i po przetłumaczeniu mogą wędrować w górę stosu, wykorzystując wszystkie warstwy stosu, z których najwyższa daje użytkownikowi to, o co poprosił.

W przypadku typowej komunikacji SCSI, sytuacja jest zgodna z ogólnym modelem. Za translację danych odpowiada sterownik SCSIPort, który tłumaczy IRP (I/O Request Packet) na SRB (SCSI Request Block), który z kolei przekładany jest na serię CDB omówionych powyżej. Sterownik ten posiada jednak bardzo poważne ograniczenie: maksymalna długość kolejki to 254 pozycje. W efekcie dość dobrze sprawdza się w warunkach, kiedy magistrala ma kilkanaście urządzeń (maksimum dla Wide SCSI) natomiast nie poradzi sobie w środowiskach, kiedy komunikacja SCSI przesyłana jest inną drogą. Przykładowo, pętle FC mogą mieć do 126 urządzeń a środowiska zbudowane na switchach – teoretycznie nawet kilkanaście milionów. Obsłużenie wszystkich przy pomocy 254 pozycji bufora nie sprawdzi się w praktyce. SCSIPort słabo radzi sobie również sytuacjach, kiedy ma do czynienia z macierzą a nie z pojedynczym dyskiem.

Z tego powodu, Microsoft zaleca odchodzenie od starego (powstałego w 1994 w Windows NT 3.x) sterownika SCSIPort i zapewnianie dostępu do urządzeń przy pomocy storport. Storport jest w tej chwili zalecanym podejściem i producenci omijający ten sterownik będą mieli poważne problemy z uzyskaniem certyfikatów WHQL. Architektura (i API) storport jest bardzo zbliżona do SCSIPort, dzięki czemu migracja powinna być stosunkowo prosta. Microsoft zapowiedział, że nowe funkcjonalności rozwijane będą tylko w storport, więc w praktyce starszy sterownik skazany jest na zapomnienie.

Jeżeli przeanalizuje się na spokojnie strukturę stosu SCSI, widać od razu, że podmienienie miniportu na inny w niczym nie zakłóci działania I/O tak długo jak długo nowy miniport będzie się zachowywał poprawnie. W tej sytuacji, zmiana warstwy fizycznej z 68 żył SCSI na 8 żył Ethernetu nie wydaje się specjalnie dużym problemem. Tak jest faktycznie. Systemowi Windows nie robi różnicy, jakim przewodem dane przepłyną. Jeżeli tylko warstwy stosu komunikują się poprawnie – system wykryje nowe urządzenie niezależnie od tego czy będzie to dysk twardy, taśma, skaner czy nagrywarka DVD.

Oczywiście całość trzeba skonfigurować a na drugim końcu kabla umieścić urządzenie, które zechce w ten sposób porozmawiać. Ale tak czy inaczej idea nie wydaje się skomplikowana i powszechnie jest znana pod nazwą iSCSI.

 Do początku strony Do początku strony

Jak działa iSCSI

Jeżeli kogoś naprawdę interesują wnętrzności iSCSI, warto zajrzeć do RFC 3720. To kilkaset stron interesującej lektury, jednak wydaje się, że na potrzeby administrowania systemem Windows z wykorzystaniem iSCSI wystarczy wiedza skrócona.

Jak wspomniano powyżej, urządzenia SCSI w czasie transmisji nazywane są target (cel) i initiator (inicjator). W świecie iSCSI jest podobnie, ale w przeciwieństwie do rozwiązań DAS (Directly Attached Storage, czyli urządzenie podpięte kablem SCSI) można jednoznacznie określić, kto jest dostawcą usług, a kto ich klientem. Urządzenie SCSI dostępne przez sieć nazywane jest target a korzystający z niego komputer – initiator (inicjator). Choć wydaje się, że tradycyjna nazwa klient i serwer miałaby sens, to warto trzymać się stosowanej powszechnie nomenklatury, aby uniknąć nieporozumień.

W normalnych zastosowaniach komputer (serwer lub stacja robocza) będzie inicjatorem a celem – jakaś pamięć masowa. To, jaka to może być pamięć omówione zostanie w dalszej części artykułu. Na chwilę obecną przyjąć można, że to po prostu jakiś target iSCSI.

Znając adres i nazwę, działający w komputerze inicjator łączy się z celem i przedstawia systemowi, że udało mu się podłączyć dane urządzenie. Tak jak „zwykłe” SCSI nie chwali się informacjami o typie kabla tak i iSCSI nie musi nic mówić, że w środku używa TCP/IP. Co więcej, informacje o tym, że dysk czy streamer nie są podłączone bezpośrednio wcale nie jest łatwo znaleźć. System naprawdę nie przejmuje się rodzajem kabla przynajmniej tak długo jak długo wszystko działa poprawnie.

W środku iSCSI ma protokół TCP domyślnie działający na porcie 3260. Połączenie może być realizowane razem z całym ruchem sieciowym, nawet przez modem czy sieć bezprzewodową a może być skonfigurowane na dedykowanym interfejsie komunikującym się przez łącza światłowodowe. Aby zapewnić wysoką niezawodność, w poważnych zastosowaniach stosuje się rozwiązania MPIO (Multipath Input/Output) polegające na zwielokrotnieniu dróg komunikacji. Tak długo, jak długo działa choć jedna ścieżka z puli MPIO, tak długo urządzenie jest dostępne. MPIO ma na celu wyłącznie zwiększenie dostępności pamięci masowych i raczej nie jest przeznaczone do zwiększania wydajności połączenia. Poprawnie skonfigurowane MPIO sprawia, że system zmienia metodę dostępu do urządzenia bez przerywania pracy i w sposób zupełnie niezauważalny tak dla użytkownika jak i dla aplikacji.

Ciekawą sprawą jest nazewnictwo urządzeń biorących udział w komunikacji. W przypadku SCSI wystarczył numer trzy lub czterobitowy numer. Magistrala miała niewiele urządzeń i do zaadresowania właściwego nie trzeba było daleko szukać. iSCSI łączy się przez TCP/IP. Oznacza to, że urządzenie może znajdować się na drugim końcu krótkiego kabla, ale równie dobrze może być w sąsiedniej serwerowni, innym mieście czy na innym kontynencie. Poza tym, nikt nie powiedział, że jeden adres IP musi odpowiadać za dostęp do jednego tylko urządzenia! W praktyce najczęściej spotyka się rozwiązania, w których jeden adres celu iSCSI obsługuje dużą liczbę urządzeń nazywanych zwykle LUN (Logical Unit Number). Nazwa ta nie oddaje idealnie stanu faktycznego, ale analogia ze świata SCSI powoduje, że takie właśnie określenie jest stosowane. Dla faktycznej komunikacji, każdy jej uczestnik posługuje się unikalną nazwą. W chwili obecnej spotykane są trzy standardy nazw: iQN (iSCSI Qualified Name), EUI (Extended Unique Identifier) oraz NAA (T11 Network Address Authority). Zamieszanie zmniejsza odrobinę fakt, że każda nazwa iSCSI zaczyna się od iqn, eui lub naa, które jednoznacznie wskazują, z którym rodzajem adresu należy się liczyć.

Nazwa EUI składa się z 64 bitów zapisanych w formie liczby szesnastkowej. Przykładem takiej nazwy może być eui.1234567890ABCDEF. Standard EUI opisany jest w rozdziale 3.2.6.3.2 RFC 3720.

Nazwa NAA składa się z 64 lub 128 bitów. Wygląda ona zazwyczaj tak: naa.FEDCBA0987654321 lub naa.FEDCBA0987654321FEDCBA0987654321. Standard NAA opisany jest w RFC 3980.

Nazwa iQN jest najbardziej interesująca, najłatwiejsza do zapamiętania i w praktyce najczęściej spotykana. Nazwa iQN składa się z:

  • Identyfikatora „iqn.” Pozwala on odróżnić format nazwy
  • Daty w formacie yyyy-mm. Data ta oznacza moment przejęcia kontroli nad domeną używaną w dalszej części nazwy. Miesiąc zawsze zapisywany jest przy pomocy dwóch cyfr. W przypadku problemów z ustaleniem daty przejęcia – dopuszczalne jest użycie innej daty pod warunkiem, że w tym czasie domena była własnością użytkownika
  • Kropki
  • Odwróconej nazwy domeny. Przykładowo dla domeny iscg.pl będzie to pl.iscg
  • Dwukropka
  • Nazwy urządzenia zgodnego z lokalną nomenklaturą w danej sieci

Cała nazwa nie może przekroczyć 223 znaków.

Przykładowo, jeżeli praca odbywa się w domenie iscg.pl, jest sierpień 2007, istnieje schemat nazewniczy to nazwa urządzenia może wyglądać tak: iqn.2007-08.pl.iscg:storage.disks.rack3.shelf3.vdisk5. Systemy Windows (występujące zazwyczaj w roli inicjatora) domyślnie mają nazwy iqn.1991-05.com.microsoft:nazwa_komputera.

Nazwa iSCSI musi być unikalna w danej sieci, a użycie nazw domen sprawia, że nietrudno zapewnić unikalność na skalę całego świata. Podejście takie jest najlepsze i powszechnie zalecane. Nazwy iQN mogą zawierać znaki narodowe, jednak zdrowy rozsądek nakazuje tego unikać. Duże i małe znaki w nazwach traktowane są tak samo (case insensivity).

Choć możliwe jest stworzenie czegoś podobnego do DNS (nazywa się to iSNS i zostanie omówione w dalszej części artykułu) to jednak rozwiązanie takie nie jest obowiązkowe i dlatego poza samą nazwą urządzenia warto znać jego adres IP oraz numer portu. W efekcie, aby znaleźć urządzenie iSCSI należy mieć jego adres IP, port (domyślnie 3260) oraz nazwę urządzenia.

 Do początku strony Do początku strony

Przeczytaj pozostałe części tego artykułu


Grzegorz Tworek Grzegorz Tworek (Konsultant ISCG, MVP)
Inżynier systemowy, komputerowiec w drugim pokoleniu. Od wielu lat aktywnie promuje idee związane z bezpieczeństwem informatyki, zwłaszcza w powiązaniu z systemami Microsoft. Autor artykułów i książek na temat security, prelegent na rozmaitych konferencjach. Aktywnie uczestniczy w działaniach SEClub. Równie duży zapał do tworzenia jak i do psucia systemów sprawia, że w projektach najchętniej uczestniczy jako audytor. W lipcu 2007 został nagrodzony tytułem Most Valuable Professional w kategorii Enterprise Security. Prowadzi polski blog TechNet.
 Do początku strony Do początku strony

 

iSCSI     iSCSI w systemach Windows, cz. II