Oprogramowanie Oracle VM VirtualBox jest całkiem fajnym i udanym narzędziem do wirtualizacji, ale jak wszystko, musi mieć też swoje wady oraz irytujące „dziwactwa”.

Jednym z takich irytujących „dziwactw”, jest błąd „Cannot register the hard disk … with UUID … because a hard disk …. already exists”, który potrafi nam się pojawić, gdy próbujemy podłączyć wirtualny dysk do wirtualnej maszyny:

I wtedy pojawia się nam dziwna mina na twarzy w stylu: „Że o co ci kaman chodzi???” 🙂

I niezbyt miły pewnie fakt w tej kwestii jest też taki, że aby rozwiązać ten problem, dobrze jest zrozumieć najpierw, skąd się on bierze. Odpowiedź może od tego zależeć, i niekoniecznie może brzmieć: należy zmienić numer UUID dysku wirtualnego na inny…

 

Pierwsze co musimy wiedzieć, to fakt, że VirtualBox nadaje każdemu dyskowi wirtualnemu niepowtarzalny numer identyfikacyjny (UUID), który jest przechowywany wewnątrz tego wirtualnego dysku, i po tym numerze poznaje potem, że to jest ten sam dysk (i bynajmniej nie jest to jakiś własny oryginalny pomysł Virtualbox’a). Po drugie, i teraz istotniejsze: VirtualBox odmówi uruchomienia/obsłużenia dwóch nośników dysku wirtualnego o tym samym identyfikatorze UUID (znajdujących się wtedy z logiki w różnych lokalizacjach/ścieżkach na dysku fizycznym).
I teraz najlepsze: może się okazać, że VirtualBox mimo faktu, że tego wirtualnego dysku z tym UUID nie ma w tej chwili w lokalizacji/ścieżce o jakiej nam mówi, że niby tam jest (bo został usunięty z dysku np.), to i tak mimo wszystko błąd się pokaże, bo przecież był tu wcześniej 😉

Czyli, gdy dany wirtualny dysk o danym UUID pojawia się po raz pierwszy, to VirtualBox w „Menedżerze nośników wirtualnych” zapisuje sobie, że obsługuje on taki wirtualny dysk o takim numerze UUID, i znajduje się on w takiej dokładnie ścieżce/lokalizacji na dysku. I przywiązuje te dwie informacje do siebie:

Jeżeli ktoś będzie teraz próbował dodać dysk z takim samym UUID z innej lokalizacji (niż ta zanotowana), to wyrzuci błąd jak powyżej. I co też równie istotne: jeżeli ktoś będzie próbował dodać dysk z już zanotowanej w menedżerze dla któregoś z dysków lokalizacji/ścieżce, ale z innym numerem UUID (niż aktualnie przypisany do tej ścieżki), to także wyrzuci błąd jak powyżej.

 

 

Przykład z życia wzięty, kiedy na taki błąd się nadziejemy:

Utworzyłem wirtualną maszynę, i zrobiłem sobie z tego jej wirtualnego dysku „zip” (bo tak mniej miejsca zajmuje), i tenże „zip” wrzuciłem na dysk USB. Stwierdziłem po jakimś czasie, szukając akurat jakichś oszczędności miejsca na dysku fizycznym (wiecznie tam za mało miejsca), że tego wirtualnego dysku w sumie teraz jednak już nie potrzebuję, a też przecież na dysku USB mam jakby co ten dysk wirtualny w „zip’ie”, no to w sumie mogę go spokojnie usunąć. Ale samej wirtualnej maszyny usuwać nie będę, bo co mi tu przeszkadza.
Minęło tak troszkę czasu, i nagle się okazuje, że jednak przydałoby mi się tą wirtualną maszynę uruchomić. Tylko, że bez wirtualnego dysku to nie ma się co uruchomić… Bierzemy więc wtedy dysk USB, i rozpakowujemy z niego ten „zip” z tym wirtualnym dyskiem, ale jednak już do innej lokalizacji na naszym dysku niż to było wcześniej. Próbujemy ten dysk podłączyć z tej „nowej” lokalizacji pod wirtualną maszynę, i wtedy VirtualBox wyrzuca nam błędem jak na początku artykułu, mówiąc nam coś w stylu:
– Panoćku, ale taki dysk z takim numerem identyfikacyjnym, to ja mam zanotowane, że tu mamy już, i Panoćku, ale ten dysk mamy zanotowane, że jest przypisany do innej lokalizacji na dysku… Także nie możemy tego dysku podpiąć…
– Hmm, ale przecież tego dysku tam nie ma, bo go usunąłem?
– Ale był…
– No, ale teraz go już nie ma!
– A skąd my to mamy wiedzieć? A może ta lokalizacja to do dysku USB jest, do pen-drive’a, i może za chwilę się on w tej lokalizacji pojawi… A  wtedy będzie ten sam dysk razy dwa, w różnych lokalizacjach…
– A jaki to niby problem rodzi?
– A bo to dziwne Panoćku, żeby to samo było w dwóch miejscach na raz…

 

Co ciekawe, inne rozwiązania oprogramowania wirtualizacyjnego (czyli VMware Hyper-V), takiego pomysłu nie wykorzystują, a więc i takiego problemu nie tworzą…

I oczywiście, takich przykładów jak powyższy, można by mnożyć różnych więcej… Na przykład jednym z częstszych, to chyba również próba ręcznego klonowania wirtualnej maszyny, poprzez przekopiowanie wirtualnego dysku twardego i spróbowanie z wykorzystaniem tej kopii utworzenia nowej wirtualnej maszyny.

 

 

 

To jak rozwiązać problem z tym błędem numeru UUID?

I tu trochę trudna sprawa, gdyż powstaje dobre pytanie, co jest przyczyną problemu…

Jak już powiedzieliśmy, dla VirtualBox’a istotne jest, że ma ze sobą przywiązany numer UUID dysku wirtualnego oraz jego lokalizację/ścieżkę. Czyli muszą się zgadzać te dwie rzeczy.
Jeżeli pojawi się dysk z zanotowanym już UUID, ale w innej lokalizacji, to mamy błąd. Jeżeli pojawi się w tej lokalizacji, która już jest przypisana do jakiegoś dysku wirtualnego, ale z innym UUID niż ma to tam zanotowane, to mamy błąd.
Powstaje więc pytanie, czy problemem tak naprawdę jest niewłaściwy numer UUID, czy jednak lokalizacja/ścieżka? Gdyż od tego zależy, jakie będzie właściwe rozwiązanie…

 

Jeżeli okazuje się, że wrzuciliśmy dysk z UUID jakie już jest znane VirtualBox’owi, ale ten dysk wg. niego powinien być w innej lokalizacji, to wtedy rozwiązaniem jest zmiana numeru UUID.

Jeżeli okazuje się, że wrzuciliśmy dysk do lokalizacji/ścieżki (mówimy o pełnej ścieżce, wraz z nazwą pliku) jakie już jest znane VirtualBox’owi, ale ten dysk co wrzuciliśmy ma inny numer UUID niż wg. niego powinien być dla tej lokalizacji, to wtedy rozwiązaniem już nie jest zmiana UUID, a wystarczy zmienić ścieżkę (choćby zmieniając nawet jedną literkę w nazwie pliku wirtualnego dysku).

 

Najczęstszym problemem w praktyce, jest jednak scenariusz pierwszy, wymagający zmiany numeru UUID dysku wirtualnego.

 

 

 

To jak zmienić numer UUID wirtualnego dysku?

 

Musimy to zrealizować wykorzystując narzędzie wiersza poleceń, jakim jest VBoxManage.

W tym celu w systemie gospodarza, uruchamiamy wiersz poleceń, przechodzimy do katalogu C:\Program Files\Oracle\VirtualBox (konkretnie do katalogu, gdzie zainstalowaliśmy aplikację VirtualBox – także jak zainstalowaliśmy gdzieś indziej, niż ten podany domyślny, to oczywiście musimy przejść do tego katalogu gdzie my mamy zainstalowaną tą aplikację), wykorzystując polecenie:
[simterm theme=”dark”]

cd C:\Program Files\Oracle\VirtualBox

[/simterm]

Teraz możemy już wydać polecenie zmiany numeru identyfikacyjnego UUID wirtualnego dysku, zgodnie ze schematem:

[simterm theme=”dark”]

VBoxManage internalcommands sethduuid  {ścieżka do dysku}

[/simterm]

gdzie pod {ścieżka do dysku} podajemy ścieżkę do pliku wirtualnego dysku, dla którego chcemy zmienić numer identyfikacyjny UUID (warto wiedzieć, że ścieżkę do dysku można także uzupełnić przeciągając po prostu plik dysku wirtualnego z eksploratora plików do okna wiersza poleceń).

 

Przykładowo:

i teraz nasz dysk wirtualny otrzymał już, jak można zauważyć, nowe unikalne UUID, i będzie można go już podłączyć do maszyny wirtualnej.

 

 

 

 

Jest jeszcze w sumie inny, całkiem uniwersalny sposób (choć może nie zadziałać czasem).

Sposób ten ma przede wszystkim sens wtedy, gdy okaże się, że próbujemy dodać dysk wirtualny, którego faktycznie już nie ma przyłączonego do żadnej innej wirtualnej maszyny, został usunięty z dysku fizycznego, a teraz wrzuciliśmy ten sam dysk wirtualny (z tym samym UUID), ale do innej lokalizacji.

Możemy po prostu zrobić VirtualBox’owi swoistą hipnozę, w której zrobimy coś w stylu: nie masz takiego dysku, i nigdy go u ciebie nie było…

 

W tym celu należy przejść w głównym oknie VirtualBox do „Menedżera nośników wirtualnych” (menu Plik>Menedżer nośników wirtualnych), następnie musimy znaleźć na liście dysk wirtualny, który nas interesuje, zaznaczyć go, a potem skorzystać z opcji „Usuń” (i taka ciekawostka: żółty trójkącik z wykrzyknikiem przy wirtualnym dysku wskazuje, że pliku tego wirtualnego dysku w zanotowanej ścieżce nie ma, gdyż np. został usunięty wcześniej, co nie znaczy, że nadal aplikacja pamięta iż tam był):

i wtedy nie ma VirtualBox już w swojej bazie informacji, że obsługuje taki dysk wirtualny, w takiej ścieżce, i z takim UUID. Czyli możemy już dysk z takim UUID, czy w takiej ścieżce, dodać, gdyż będzie on dla niego dyskiem nowym, takim jakiego jeszcze nie zna.

Przy czym, jeżeli się opcja „Usuń” nie świeci, to znaczy, że dysk ten jest aktualnie podłączony do jakiejś wirtualnej maszyny, i należy najpierw go odłączyć, używając wtedy opcji „Release”, a dopiero potem można dysk usunąć (tylko tu właśnie, czasem może się zdarzyć, że nie wiedząc dlaczego, ale nie idzie usunąć, a po restarcie kompa już idzie…, stąd często szybciej i łatwiej zmienić UUID, bądź ścieżkę, zależnie co jest problemem).

Za to metoda ta jest uniwersalna, rozwiązuje w sumie obydwie wcześniej przestawione przyczyny problemu, chyba, że faktycznie chcemy mieć kopię wykorzystywanego już wirtualnego dysku z jednej z wirtualnych maszyn (ale do tego pytanie czy nie lepiej używać funkcjonalności klonowania wirtualnych maszyn – szybciej, łatwiej, mniej problematycznie…)

 

 

 

Udostępnij, jeśli ci się spodobało: