Rozwiązujemy problem kolizji podpisów dysków

Rozwiązujemy problem kolizji podpisów dysków

Autor: Krzysztof Kapustka

Opublikowano: 9/25/2016, 12:00 AM

Liczba odsłon: 17436

W systemach Windows każdy nowy lub nierozpoznany dysk musi zostać uprzednio zainicjowany odpowiednim stylem partycji, a następnie przełączony do trybu online, zanim będziemy mogli położyć na nim poszczególne woluminy do przechowywania danych. Na tym etapie pierwszy sektor dysku przechowujący rekord MBR (lub protective MBR) wypełniany jest odpowiednimi informacjami, wśród których znajduje się szesnastkowy identyfikator dysku, nazywany formalnie jego podpisem (ang. disk signature). W niniejszym artykule pojęć podpis dysku, identyfikator dysku i sygnatura dysku będziemy używać zamiennie, by wprowadzić do tekstu pewne urozmaicenie.

Nas, jako przeciętnych użytkowników, dyski w postaci fizycznych urządzeń sprzętowych raczej mało interesują na co dzień, bo zazwyczaj nasza komunikacja z nimi odbywa się na nieco wyższym poziomie abstrakcji, tj. na poziomie logicznych partycji i woluminów, które w celu łatwiejszej identyfikacji oznaczamy sobie wygodnymi do zapamiętania literami i etykietami. Podobnie postępuje system Windows, z tym że musi on również być w stanie zaadresować i zidentyfikować nie tylko konkretną partycję czy wolumin, ale też dysk jako cały kontener. Identyfikacja poszczególnych urządzeń pamięci masowej odbywa się w systemach Windows właśnie za pomocą wspomnianych podpisów dysków. Standardowo każdy dysk ma swój własny identyfikator, który względem wszystkich pozostałych urządzeń powinien być globalnie unikalny. W tym artykule porozmawiamy o sytuacji, w której z powodu naruszenia tej zasady dochodzi do kolizji tychże podpisów.

Z kolizją podpisów mamy do czynienia, gdy w systemie Windows zarejestrowane zostaną dwa urządzenia pamięci masowej (fizyczne lub wirtualne) o identycznej sygnaturze, co nie pozwala ich dłużej jednoznacznie identyfikować. Jako że identyfikatory dla poszczególnych dysków dobierane są w sposób pseudolosowy, do kolizji podpisów raczej nigdy nie dochodzi przypadkowo, lecz są one wynikiem konkretnych czynności podjętych przez użytkownika. Chodzi tu o przypadek, w którym sami świadomie wprowadzamy do systemu nowy dysk charakteryzujący się takim samym podpisem, jaki został już rozpoznany przez system na innym urządzeniu. Ale jak przeciętny użytkownik może doprowadzić do zainicjowania w systemie dysku o już istniejącym podpisie, skoro w większości przypadków nie wie on nawet o istnieniu takiego identyfikatora? Otóż do sytuacji z kolizją dochodzi najczęściej wtedy, gdy korzystając z oprogramowania do wykonywania kopii zapasowej lub narzędzia do przeprowadzania konwersji P2V dokonaliśmy pełnego klonowania zawartości jednego dysku na drugi dysk - odpowiednio fizyczny lub wirtualny. Jako że proces takiego klonowania przebiega zazwyczaj sektor po sektorze i obejmuje całą zawartość dysku źródłowego, bierze w nim udział również pierwszy sektor z rekordem MBR, w którym to zawiera się właśnie podpis takiego dysku. W rezultacie otrzymujemy dwa różne urządzenia o takiej samej treści i takiej samej sygnaturze, co jest sytuacją niedopuszczalną, prowadzącą potencjalnie do niekontrolowanej utraty danych. Z tego powodu jasne jest, że oba te urządzenia nie mogą współistnieć obok siebie.

Jak Windows radzi sobie z kolizją podpisów?

W systemach Windows do wersji XP włącznie użytkownik nie miał praktycznie styczności z tego rodzaju problemem. Nawet jeśli doszło do kolizji podpisów, system sam nadpisywał je w taki sposób, aby każde urządzenie charakteryzowało się unikalnym identyfikatorem. W tamtym czasie to, czy dane urządzenie ma taki czy inny podpis nie miało żadnego znaczenia. Ważne było tylko, że każdy podpis był inny od pozostałych. Wraz z wydaniem Windows Vista pewna część architektury systemu uległa zmianie. Zmodyfikowany został chociażby proces rozruchu systemu, który od teraz do poszczególnych urządzeń odnosi się za pomocą nadanych im podpisów. Z tego powodu dotychczasowe zachowanie systemu Windows, gdzie system sam modyfikuje podpis dysku w celu uniknięcia jego zdublowania, doprowadzałoby do powstania rozbieżności pomiędzy konfiguracją danych rozruchu BCD a faktycznymi podpisami dysków. Tak więc w nowszych systemach Windows w przypadku wykrycia dwóch dysków o tej samej sygnaturze system po prostu przełącza w tryb offline dysk powodujący kolizję i zwyczajnie kontynuuje rozruch. W konsoli Zarządzanie dyskami użytkownik otrzymuje stosowny komunikat o wykryciu kolizji podpisów i odłączeniu problematycznego dysku, co umożliwia mu samodzielne przeanalizowanie całej sytuacji i podjęcie odpowiednich kroków.

Jak przebiega nadawanie podpisu dla dysku?

Bezpośrednio po wykryciu w systemie nowego dysku, który nie był nigdy wcześniej inicjowany lub nie jest przez system rozpoznawany, nie ma on żadnej nadanej sygnatury (Disk ID: 00000000). Dla takich urządzeń system zażąda od nas przeprowadzenia ich wstępnej inicjacji (termin stosowany w polskiej wersji systemu Windows). W ramach procesu inicjowania dysku wybieramy dla niego styl partycji MBR lub GPT, po czym dysk z nieprzydzieloną jeszcze przestrzenią zostaje przełączony do trybu online. W tym momencie dysk otrzymuje swój unikalny podpis. Dla schematu partycji MBR podpisem dysku jest 32-bitowy identyfikator szesnastkowy (np. AA5012BE), zaś w przypadku schematu GPT obszar ten jest zerowany (00000000), a faktycznym podpisem dysku staje się 128-bitowy identyfikator GUID (np. 231A5324-003D-4005-AA73-815A8918EE20). Jako że sygnatura ta przechowywana jest na samym dysku (jak również w rejestrze Windows pod kluczem HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices z kodowaniem little-endian), po takiej operacji dysk możemy dowolnie odłączać i przyłączać z powrotem, wliczając w to również operacje przełączania dysku do trybu offline i online z poziomu konsoli Zarządzanie dyskami. Podpis dysku pozostanie na nim w niezmienionym stanie, do momentu ponownej inicjacji wstępnej (dokonanej chociażby przez jego sformatowanie lub skonwertowanie na inny styl partycji). Od tej pory dla tak przygotowanego dysku dostępne są już narzędzia tworzenia woluminów, co pozwala nam podzielić go na odrębne części logiczne, które zostaną później zamontowane w systemie pod konkretnymi literami dysków.

Jak wygląda proces powstania kolizji podpisów?

Do komputera możemy bezproblemowo podłączać tyle dysków, ile tylko fizycznie zdołamy - dyski stare i nowe, talerzowe i półprzewodnikowe, sprawne i uszkodzone - a mimo to praktycznie nigdy w ten sposób nie dojdzie do kolizji ich podpisów. Problem kolizji powstanie dopiero wtedy, gdy jeden z dotychczasowych, obecnych w systemie dysków sklonujemy sektor po sektorze do postaci nowego, drugiego dysku, tak aby był on kompletną kopią dysku klonowanego.

Jeszcze do niedawna klonowania dysków twardych dokonywaliśmy jedynie w ramach tworzenia pełnych kopii zapasowych zgromadzonych danych, czy przy okazji sporządzania obrazów dla dysków systemowych, mających posłużyć za obraz referencyjny do wdrożenia na setkach pozostałych maszyn. Teraz jednak proces klonowania wydaje się być stosowany dużo częściej niż kiedyś, głównie z dwóch powodów. Po pierwsze, nieustannie rosnąca popularność wirtualizacji skłania coraz więcej użytkowników do migracji na maszyny wirtualne, a jak wiemy migracja P2V polega właśnie na sporządzeniu wiernej kopii dysku fizycznego i zamknięciu jej w obrębie pliku dysku wirtualnego. Taki dysk będzie więc idealną kopią dysku pierwotnego, ze wszystkimi tego konsekwencjami, o których już sobie powiedzieliśmy. A tu warto zaznaczyć, że wirtualizacja przestała być już dłużej wyłącznie domeną środowisk serwerowych, czego dowodzi chociażby technologia Client Hyper-V, dostępna na systemach klienckich. Po drugie, coraz tańsze ceny dysków półprzewodnikowych skłaniają użytkowników do zakupu tego rodzaju urządzeń i migrowania na nie swoich dotychczasowych systemów właśnie drogą klonowania. Zależnie od tego, jak ten proces przeprowadzimy i jak będziemy potem korzystać z naszych dysków, możemy odpowiednio napotkać na problem kolizji podpisów lub też się przed nim uchronić.

Oczywiście operacja klonowania na docelowy dysk fizyczny czy wirtualny sama w sobie niczym nam nie zagraża, bo otrzymany w ten sposób dysk wirtualny podłączamy zazwyczaj do odseparowanej od głównego systemu maszyny wirtualnej, zaś po sklonowaniu starego dysku na nowy dysk SSD często pozbywamy się tego pierwszego. Problem pojawia się wtedy, gdy tak przygotowany dysk-klon podłączymy do systemu, w którym na tym samym poziomie pracuje już dysk oryginalny, będący źródłem dla przeprowadzonej operacji klonowania. Wtedy faktycznie otrzymamy dwa identyczne dyski o takim samym podpisie. Jest to sytuacja niedopuszczalna, gdyż system nie będzie już dłużej w stanie rozróżnić takich dysków.

Jakie konsekwencje niesie ze sobą kolizja podpisów?

Jeśli w systemie zaprezentowaliśmy dwa dyski o identycznej sygnaturze, ale dyski te służą wyłącznie magazynowaniu danych użytkownika, wówczas problemu kolizji podpisów nie odczujemy zbyt boleśnie. W takim przypadku dysk wykryty w systemie jako drugi zostanie przełączony do trybu offline, zaś w konsoli Zarządzanie dyskami, w graficznym obszarze reprezentującym taki dysk, widnieć będzie niebieska ikona z komunikatem "Dysk jest w trybie offline, ponieważ wystąpiła kolizja podpisów z innym dyskiem, który jest w trybie online". W tej sytuacji rozwiązanie problemu kolizji jest niezwykle proste i sprowadza się do kliknięcia w tym obszarze prawym przyciskiem myszy, a następnie wybrania opcji Online. Operacja ta spowoduje wymuszenie przełączenia dysku do trybu online, co w tym wyjątkowym przypadku nastąpi z powtórnym nadaniem mu odpowiedniej i niekolidującej z innymi podpisami sygnatury.

Gorzej wypada sytuacja, w której dwa kolidujące ze sobą dyski są dyskami rozruchowymi. Jako że Windows w swojej konfiguracji rozruchu systemu (Boot Configuration Data, BCD) odnosi się do dysków fizycznych właśnie za pomocą ich podpisów, a w tej sytuacji nie jest możliwe zidentyfikowanie właściwego dysku docelowego, start systemu Windows nie będzie już dłużej możliwy, co uniemożliwi nam dalsze korzystanie z komputera. W takim przypadku należy całkowicie odłączyć jeden z dysków, aby móc ponownie uruchomić system Windows. Przy tylko jednym obecnym dysku unikniemy problemu kolizji, ale jeśli na naszym komputerze będziemy chcieli korzystać z obu tych urządzeń jednocześnie, będziemy zmuszeni zmodyfikować podpis drugiego dysku, chociażby poprzez jego sformatowanie na innym komputerze.

Jak w praktyce wygląda kolizja podpisów i gdzie szukać sygnatur dysków?

Ten pierwszy rodzaj problemu, w którym system przełącza do trybu offline drugi co do kolejności wykrycia dysk o tej samej sygnaturze jest bardzo prosty do odtworzenia na dowolnym komputerze. Powstanie takiej kolizji możemy chociażby upozorować przy użyciu dynamicznych dysków wirtualnych o dowolnie małym rozmiarze. Spójrzmy więc na poniższy przykład.

Na początek otwieramy konsolę Zarządzanie dyskami. W tym celu klikamy prawym przyciskiem menu Start i wybieramy opcję Zarządzanie dyskami. Najpierw utworzymy sobie dwa dyski wirtualne typu dynamicznego, które zasymulują nam obecność w systemie dwóch dysków fizycznych. Z poziomu menu Akcja otwartej konsoli wybieramy opcję Utwórz dysk VHD. W nowo otwartym oknie dialogowym Tworzenie i dołączanie wirtualnego dysku twardego wprowadzamy w pełni kwalifikowaną ścieżkę docelową dla pliku dysku wirtualnego lub wskazujemy tę lokalizację i nazwę dla pliku poprzez kliknięcie przycisku Przeglądaj.

Nasz dysk umieścimy na ścieżce C:\VHD\ i nazwiemy go zwyczajnie DyskA.vhd. Następnie w polu Rozmiar wirtualnego dysku twardego podajemy rozmiar docelowego pliku. W naszym przykładzie utworzymy dyski o rozmiarze 500 MB, formacie VHD i typie dynamicznym (dla zaoszczędzenia miejsca na dysku). Pierwszy utworzony w ten sposób dysk pojawi się na spodzie listy konsoli w widoku graficznym, przy czym zostanie on oznaczony jako nieznany i wymagający zainicjowania. Klikamy ten dysk prawym przyciskiem (lewy obszar z nazwą dysku i ikoną) i wybieramy opcję Zainicjuj dysk. W oknie dialogowym Inicjowanie dysku wybieramy styl MBR i klikamy OK. Dysk nie zawiera jeszcze żadnej partycji, ale nas to nie w ogóle interesuje, gdyż najważniejsze jest to, że pierwszy dysk znajduje się teraz w trybie online. Tak utworzony dysk wirtualny symuluje nam oryginalny dysk fizyczny, który użytkownik mógłby zechcieć sklonować.

Teraz dokładnie w taki sam sposób tworzymy drugi dysk wirtualny o takich samych parametrach, ale oczywiście innej nazwie (DyskB.vhd). Będzie to dysk, na którym użytkownik mógłby zamieścić sklonowaną zawartość dysku A. Po jego utworzeniu inicjujemy go stylem MBR i upewniamy się, że po tej operacji obydwa dyski znajdują się w trybie online, jak na poniższym rysunku.

W kolejnym kroku upozorujemy operację klonowania pierwszego dysku na drugi, co skutkować będzie tym, że nasz drugi dysk wirtualny otrzyma taką samą sygnaturę (podpis), jaką ma pierwszy dysk wirtualny. Na początek upewnijmy się, że oba te dyski cechują się unikalnymi i różnymi od siebie podpisami. Podpisy rozpoznanych w systemie dysków przechowywane są co prawda w rejestrze Windows pod kluczem HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices, jednak my w celu ich odczytania posłużymy się dużo bardziej czytelnym narzędziem, jakim niewątpliwie jest program Diskpart.

Otwieramy Wiersz polecenia z podniesionymi uprawnieniami (klikamy prawym przyciskiem menu Start i wybieramy Wiersz polecenia (administrator)), po czym wykonujemy polecenie diskpart:

Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\Windows\system32>diskpart

W ramach powłoki polecenia diskpart wydajemy polecenie list disk, co ujawni nam numerację naszych dysków w obrębie bieżącej powłoki:

Microsoft DiskPart version 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
On computer: DESKTOP-N45S2ON

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online          119 GB      0 B
  Disk 1    Online          500 MB   498 MB
  Disk 2    Online          500 MB   498 MB

W naszym przykładzie utworzone przez nas dyski wirtualne noszą kolejno oznaczenia Disk 1 i Disk 2. Sprawdzamy więc informacje szczegółowe dla pierwszego dysku...

DISKPART> select disk 1

Disk 1 is now the selected disk.

DISKPART> uniqueid disk

Disk ID: AA506B4F

...a następnie wykonujemy taką samą operację dla drugiego dysku:

DISKPART> select disk 2

Disk 2 is now the selected disk.

DISKPART> uniqueid disk

Disk ID: AA506B57

To, co interesuje nas w przypadku obydwu uzyskanych wyników, to pozycja Disk ID, która zwraca nam przechowywany na dysku identyfikator podpisu. W tym przykładzie są to identyfikatory: AA506B4F oraz AA506B57 (oba dla schematu MBR).

Teraz zobaczymy co by się stało, gdyby użytkownik zechciał sklonować zawartość dysku A i umieścić ją na dysku B. My oczywiście nie będziemy niczego klonować, a jedynie upozorujemy tę operację w taki sposób, że drugiemu dyskowi nadamy sztucznie identyfikator pierwszego dysku. W końcu chodzi nam wyłącznie o uzyskanie kolizji pomiędzy podpisami obu tych dysków.

Po ostatniej komendzie select disk 2 jesteśmy nadal ustawieni na dysku B, więc za pomocą polecenia:

DISKPART> uniqueid disk id=AA506B4F 

możemy od razu nadać temu urządzeniu taki sam podpis, jaki znajduje się na dysku A. Po wydaniu powyższej komendy system zarejestruje kolizję, a konsola Zarządzanie dyskami przełączy nasz drugi dysk (dysk B) do trybu offline, oznaczając go przy tym komunikatem "Dysk jest w trybie offline, ponieważ wystąpiła kolizja podpisów z innym dyskiem, który jest w trybie online". Przekaz ze strony systemu Windows jest dość jasny - dwa dyski o tej samej sygnaturze (podpisie) nie mogą ze sobą współistnieć na tym samym poziomie systemu.

Jeśli teraz nasz drugi dysk (ten przełączony do trybu offline) klikniemy w konsoli prawym przyciskiem i przeniesiemy go w tryb Online, system sam przygotuje dla niego nową sygnaturę, podobnie jak to miało miejsce w starszych wydaniach systemu Windows. O tym, że faktycznie tak się stało możemy przekonać się poprzez ponowne sprawdzenie sygnatur obu tych dysków. Ponownie wydajemy oba powyższe polecenia w powłoce diskpart i widzimy, że system zmienił podpis drugiego dysku na nowy, który nie koliduje z żadną inną sygnaturą.

DISKPART> select disk 1

Disk 1 is now the selected disk.


DISKPART> uniqueid disk

Disk ID: AA506B4F


DISKPART> select disk 2

Disk 2 is now the selected disk.


DISKPART> uniqueid disk

Disk ID: AA506B1E

Teraz możemy już odłączyć oba dyski przy użyciu opcji Odłącz dysk VHD w konsoli Zarządzanie dyskami, a następnie usunąć reprezentujące je pliki .vhd z wybranej przez nas lokalizacji.

Podsumowanie

Kolizje podpisów dysków zachodzą w systemie Windows dosyć rzadko i praktycznie zawsze są wynikiem jawnych czynności ze strony użytkownika, zazwyczaj związanych bezpośrednio z klonowaniem zawartości dysków twardych (zarówno klonowaniem tradycyjnym, jak i klonowaniem w ramach procesu konwersji P2V). Zależnie od tego, czy sklonowaliśmy dysk rozruchowy czy archiwalny, skutki wprowadzenia do systemu dwóch dysków o tej samej sygnaturze mogą być dla nas mniej lub bardziej odczuwalne. Na koniec warto podkreślić, że jeśli z bliżej nieokreślonych przyczyn nasz dysk przestał być widoczny w oknie Ten komputer, wszelkich wskazówek czy dodatkowych komunikatów przybliżających nas do rozwiązania danego problemu warto szukać w konsoli Zarządzanie dyskami - podstawowym narzędziu systemu Windows do zarządzania urządzeniami pamięci masowej.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia