Snapshot (informatyka)

Snapshot – rodzaj zrzutu danych rozumianego jako sposób zapewniania dostępu do starszych wersji danych przechowywanych w pamięci masowej, zwłaszcza dyskowej. Ze względu na brak utrwalonego i zaakceptowanego odpowiednika w języku polskim zjawisko to opisywane jest czasami przy pomocy kalki językowej migawka.

Sposób realizacji

Zazwyczaj snapshoty danych wykonywane są w taki sposób, że realizujący je obiekt (dysk, baza danych, system plików itp.) zaczyna zapisywać nowe dane w miejscu niezajętym dotąd przez starsze informacje. Równocześnie, zapewniony jest sposób odczytu zarówno danych współczesnych, jak i starszych.

Podczas odczytu danych współczesnych, dane starsze, zastąpione już nowszymi są ignorowane, mimo że fizycznie nadal znajdują się na nośniku. W efekcie, użytkownik nawet nie musi być świadomy, że takie starsze dane nadal przechowywane są na przykład na dysku twardym.

Podczas odczytu danych starszych, dane nowsze są ignorowane, a starsze (nienadpisane) dane są udostępniane aplikacjom.

Większość współczesnych realizacji funkcjonalności snapshotów umożliwia tworzenie wielu snapshotów i w efekcie dostęp do wielu wersji historycznych.

Aby móc zrealizować funkcjonalność snapshotów, należy zagwarantować:

  • odpowiednią ilość miejsca w pamięci masowej. Ponieważ starsze dane są przechowywane na dyskach, ilość zajętego miejsca jest większa niż byłaby gdyby dostępne były wyłącznie dane aktualne. Należy przy tym zwrócić uwagę, że przyrost ilości danych zajętych przez snapshot jest bezpośrednio zależny od ich zmienności po wykonaniu snapshotu.
  • API umożliwiające dostęp zarówno do danych starszych, jak i bieżących. Często dostęp taki realizowany jest poprzez tworzenie wirtualnych obiektów o właściwościach analogicznych do obiektu rzeczywistego. Na przykład snapshot katalogu może z punktu widzenia sięgającego do niego użytkownika wyglądać jak katalog, a snapshot bazy danych – jak baza danych.
  • spójność danych. Przykładowo, aby cała funkcjonalność miała sens, aplikacja pracująca na serwerze musi umieć przeczytać i poprawnie zinterpretować dane ze snapshotu. Oznacza to, że zazwyczaj nie wystarczy utworzenie snapshotu w dowolnym momencie i że potrzebny jest ze strony aplikacji jakiś rodzaj sygnału, informującego pamięć masową, że w danym momencie dane są spójne i że na pewno zostaną zrozumiane.

Implementacje

Funkcjonalność snapshotów realizowana może być na kilku warstwach stosu związanego z zapisywaniem danych w pamięci masowej. W szczególności, mogą być to:

Macierze dyskowe

Niektóre macierze dyskowe umożliwiają wykonanie snapshotu. Starsze dane mogą być udostępniane na przykład przy pomocy specjalnego LUN.

System plików

Systemy plików (na przykład ZFS, UFS i NTFS) realizują funkcjonalność snapshotów, rezerwując na nie część przestrzeni dyskowej. Użytkownik systemu ma możliwość sięgnięcia do starszych wersji danych, na przykład, gdy w systemie Windows Vista nadpisze lub skasuje pliki. W systemach Microsoft Windows snapshoty często określane są nazwą Shadow Copy, a usługa odpowiedzialna za ich obsługę nazywa się VSS.

Bazy danych

Microsoft SQL Server w edycji Enterprise umożliwia tworzenie migawek przy pomocy polecenia CREATE DATABASE xxx AS SNAPSHOT OF yyy. W takiej sytuacji oryginalna baza yyy nadal jest dostępna i normalnie pracuje, podczas gdy użytkownik uzyskuje dostęp tylko do odczytu do bazy xxx będącej snapshotem. W prosty sposób można zarówno skasować snapshot (gdy nie jest już potrzebna), jak i powrócić do zachowanego w migawce stanu danych.

Dyski maszyn wirtualnych

Jednym z praktycznych zastosowań snapshotów jest „zamrożenie” stanu dysków maszyn wirtualnych. Dzięki takiej funkcjonalności możliwe jest przywrócenie stanu maszyny do zapamiętanego wcześniej punktu. Umożliwia to proste odtwarzanie w przypadku niektórych rodzajów awarii lub problemów związanych z konfiguracją. Praktyczna realizacja takich snapshotów może opierać się zarówno na mechanizmach udostępnianych przez system plików, jak i na wirtualnych dyskach, zapisywanych w wielu plikach na dysku twardym.