Single Instance Storage w Windows Server

Single Instance Storage jest windowsowa nazwa tego, co ogólniej znane jest jako deduplikacja pamieci masowej. Specjaliscie obie nazwy cos powiedza, podczas gdy ktos z zewnatrz swiatka IT pewnie ani jednego ani drugiego okreslenia nie zrozumie. Tymczasem, idea jest bardzo prosta: Skoro uzytkownik A ma w swoim katalogu domowym zdjecia z imprezy integracyjnej a uzytkownik B tez byl na tej imprezie, wiec tez ma te same zdjecia, to moze by tak, zamiast trzymac zestaw identycznych plików, przechowac tylko informacje o nich, a powtarzajaca sie czesc wspólna – tylko raz? W oczywisty sposób skomplikuje to metode skladowania danych, ale w zamian pozwoli zaoszczedzic sporo miejsca. W rzeczywistych srodowiskach, okazac sie moze, ze realne oszczednosci siegaja 40%, wiec gra toczy sie o niemala stawke.

Jak to zrobic w praktyce? Nie jest to trywialne, ale i nie jakies strasznie skomplikowane. Wystarczy uzyc Windows Storage Server. Problem jednak w tym, ze jest to produkt dostepny jako OEM, co oznacza, ze kupuje sie gotowy serwer z taka funkcjonalnoscia. Czyli w praktyce niemozliwe jest legalne podejscie na zasadzie: "to ja to dzisiaj dla swojej firmy wlacze na starym serwerze, na którym konczy mi sie miejsce". Teoretycznie mozna to zrobic przy pomocy pakietu KB976833, ale to nie jest droga, która Microsoft popiera.

Zakladam wiec, ze mamy juz Windows Storage Server 2008R2 i to o takim systemie dalej pisze.

Na poczatek wspomniec trzeba o ograniczeniach. Przede wszystkim, SIS wymaga aby:

  • Deduplikowany dysk byl dyskiem lokalnym (nie sieciowym),
  • Deduplikowany dysk byl sformatowany jako NTFS,
  • Deduplikowany dysk nie byl dyskiem systemowym (boot volume ani system volume),
  • Istnialo nie wiecej niz 6 deduplikowanych dysków w jednym systemie.

Ostatnie wymaganie jest dosc dziwne, ale takie wlasnie zostalo zaszyte w mechanizmach SIS i nie ma praktycznie zadnej metody zwiekszenia tej wartosci.

Tak naprawde, deduplikacja musi opierac sie na dwóch oddzielnych procesach:

  • Deduplikacji – czyli poszukiwaniu powtarzajacej sie informacji i przeksztalcaniu jej na postac z pojedynczym przechowywaniem danych.
  • Dostarczaniu plików uzytkownikom. Mimo, ze zabralismy im prawdziwe dane i zeskladowalismy je w jednym egzemplarzu, to gdy poprosza o swój plik – powinni go dostac i najlepiej, zeby nic nie wiedzieli, ze costam w tle sie z nim dzialo.

Skupmy sie na pierwszym procesie. Deduplikacja zajmuje sie groveler. Jest to specjalny serwis systemowy, który "przeczesuje" dyski w poszukiwaniu powtarzajacych sie danych. Dlatego, do poprawnego dzialania wymaga, aby dzialal serwis systemowy, w którym groveler zostal zaimplementowany. Jak mozna sie domyslec, nazwa serwisu to Groveler.

image

Bez grovelera, zaden plik nie zostanie zdeduplikowany. Groveler "budzi sie" co jakis czas i plik po pliku sprawdza:

Czy plik nie jest zbyt maly. Zbyt malych plików nie oplaca sie deduplikowac, bo dane o sposobie ich odzyskania zajma wiecej miejsca niz wyniosa korzysci ze zwolnienia przez pliki miejsca na dysku.

  • Jaka jest suma kontrolna pliku.
  • Czy w bazie grovelera istnieje juz wpis dla pliku o takiej samej wielkosci, sumie kontrolnej i atrybutach.
  • Czy oryginal pliku, który teoretycznie sie powtarza (zostal znaleziony w bazie danych) daje sie normalnie odczytac
  • Czy pliki faktycznie (bajt po bajcie) sa identyczne.

Jezeli kandydat do deduplikacji zostanie zweryfikowany pozytywnie, aktualizowany jest dla niego wpis w bazie danych i sam plik faktycznie zostaje poddany deduplikacji i przeniesiony do folderu \SIS Common Store. Zamiast pliku, w oryginalnym miejscu zostaje tylko link do niego, dla systemu w praktyce od pliku nieodróznialny. Oczywiscie caly proces madrze zabezpieczony jest na przyklad przed zmianami w plikach podczas ich deduplikacji i innymi podobnymi, potencjalnie niebezpiecznymi zjawiskami. Jak wspomniano wczesniej, pliki przechowywane sa w specjalnym folderze (oddzielnie dla kazdego dysku). Kazdy plik dostaje nowa nazwe (GUID) z rozszerzeniem *.sis a poza samymi plikami, w folderze SIS przechowywana jest baza danych.

Oczywiscie, praca grovelera moze byc zarzadzana przez administratora. Sluzy do tego dosc wygodne narzedzie sisadmin. Narzedzie to pozwala miedzy innymi na:

  • Wlaczenie i wylaczenie grovelera (/e, /d). Oczywiscie wylaczony groveler oznacza tylko, ze zadne nowe pliki nie sa w systemie deduplikowane. Pliki juz przetworzone dzialaja bez zarzutu.
  • Aktywacja grovelera dla zadanego dysku (/i). Zakladany jest folder SIS i od tej pory pliki na tym dysku sa skanowane.
  • Odwrócenie dzialania grovelera (/u). Wszystkie zdeduplikowane pliki przywracane sa na ich wlasciwe miejsce a sam groveler jest wylaczany.
  • Przelaczenie grovelera w tryb foreground (/f – szybszy i zuzywajacy wiecej zasobów) lub background (/b – domyslny, wolniejszy, ale mniej obciazajacy serwer).
  • Wyswietlenie statystyk grovelera (/v), w tym zaoszczedzonego faktycznie miejsca.
  • Wyswietlenie informacji o wszystkich plikach (/l) albo o konkretnym pliku (/s).
  • Wymuszone przeskanowanie wszystkich plików na dysku (/r).
  • Przywrócenie folderowi SIS domyslnych uprawnien. Wprawdzie ta funkcjonalnosc nie jest udokumentowana, ale jest dostepna przy uzyciu parametru /a.

Po wlaczeniu grovelera mozna spróbowac skopiowac kilkukrotnie jeden plik do róznych folderów albo do plików o róznych nazwach.

Sisadmin /v pokaze, ze zostalo to wykryte:

image

A sisadmin /l powie dokladnie co i jak zostalo zdeduplikowane:

image

Oczywiscie plik o wdziecznej nazwie adb1edf7-e904-11e0-be55-000c298704ed.sis faktycznie istnieje w ukrytym folderze SIS:

image

Aby uzytkownik mógl nadal "normalnie" widziec zdeduplikowane pliki, do systemu dodawany jest specjalny sterownik sisss.sys, który przechwytuje odwolania do plików i kieruje je do danych lezacych w SIS Common Store.

image

I wszystko dziala. Osoby majace dostep do subskrypcji TechNet zachecam do skorzystania z dostepnych tam zasobów, dzieki którym Windows Storage Server (lub jego kawalki) mozna sobie zainstalowac na testowym serwerze Windows Server 2008 R2.

Autor: Grzegorz Tworek [MVP]