Blog (66)
Komentarze (4.8k)
Recenzje (2)

Dowiązania symboliczne w Windows

@bachusDowiązania symboliczne w Windows28.08.2016 22:18

Dowiązania twarde i miękkie - funkcja w systemach *nix (ln ) istniejąca praktycznie od zawsze a traktowana po macoszemu w Windowsach. NTFS, archaiczno-prehistoryczny system plików, nie ma problemów z obsługą tej funkcji od czasów Windowsa 2000. Wpis ten ma na celu przekazanie podstaw pracy z dowiązaniami, oraz przykład ich użycia w systemach z rodziny Windows.

Dowiązania - od mklink (CMD) po Powershell i GUI

Czasem nawet nie zdajemy sobie sprawy, że dowiązania są używane zaraz po zainstalowaniu świeżego systemu. Tu przykład z katalogu głównego (Windows 10):

Jeszcze więcej (JUNCTION) jest w katalogu dowomym użytkownika (C:\Users\%username%):

No ale może po kolei...

Skróty w Windows

W Windowsie na co dzień korzysta się ze skrótów. Utwórzmy dwa foldery - najlepiej na innych dyskach, lub partycjach. W poniższym przykładzie będzie to C:\DOBREPROGRAMY, oraz G:\PLIKI:

mkdir C:\DOBPREPROGRAMY
mkdir G:\PLIKI

W katalogu G:\PLIKI należy umieścić dowolny plik, np. dokument tekstowy:

Teraz w C:\DOBREPROGRAMY\ tworzymy skrót (bez żadnej magii: przeciągamy prawym klawiszem myszy z opcją "Utwórz Skrót"):

Skrót (można go utworzyć zarówno dla pliku, jak i katalogu) jest informacją o lokalizacji pliku w systemie plików:

Zróbmy teraz to samo ze skrótem do katalogu:

W obu przypadkach wszystko działa po podwójnym kliknięciu w skrót: jesteśmy automagicznie przenoszeni na dysk G:\ do odpowiedniego katalogu, lub pliku. Jak jednak widać, nie można na tych skrótach wykonywać bezpośrednich akcji na dowiązanych obiektach: edycji dokumentu tekstowego, czy przechodzenia do katalogu.

Co jednak, gdybyśmy chcieli skorzystać z Linuksowej zasady działania "ln"?

Intepreter Windows (CMD) - mklink

Do obsługi dowiązań niezbędny jest system NTFS, system minimum Windows 2000 (tam jeszcze używało się programu JUNCTION, lub fsutil, ale od czasów MS Vista jest prościej) oraz uprawnienia administratora. Funkcja tworzenia to "mklink":

W wolnym tłumaczeniu:

[item]/J : punkt 'połączenia' dwóch katalogów - JUNCTION,[/item][item]/D : dowiązanie 'miękkie' katalogów,[/item][item]/H :dowiązanie twarde.[/item] Przykłady użycia... Z C:\DOBREPROGRAMY\ usuńmy wcześniej utworzone skróty (.lnk). Dla lepszego zrozumienia zagadnienia do katalogu G:\PLIKI\ można skopiować jakiś większy plik:

Utwórzmy teraz dwa dowiązania: "Link1" jako dowiązanie symboliczne i "Link2":

Na pierwszy rzut oka nie różnią się od standardowych skrótów. Spróbujmy jednak wyświetlić/kliknąć na zawartość tych katalogów:

Jak widać, nie jesteśmy przenoszeni na dysk G: do katalogu PLIKI, ale zawartość tego katalogu jest "mapowana" do utworzonych dowiązań na dysku C: w katalogu PLIKI. Patrząc na właściwości dowiązań nie jest wskazywana wielkość samego dowiązania (4kB jak to miało miejsce w przypadku .lnk), ale rzeczywista wielkość katalogu na dysku G:\

Jak łatwo się domyśleć - wygodna funkcja do "oszukania" programów, że rzeczywiste repozytorium plików znajduje się gdzie indziej. Dość podobnie wygląda sytuacja z tworzeniem dowiązań do plików:

mklink "C:\DOBREPROGRAMY\plik_Link1" G:\PLIKI\dokument1.txt

Tutaj wprawne okno powinno jednak dostrzec różnicę - link "miękki" zawiera dodatkową zakładkę "Shortcut":

To właśnie główna różnica między dowiązaniem "miękkim" a twardym "JUNCTION" - ten drugi lepiej "udaje" rzeczywisty katalog umieszczony w C:\PLIKI\

Mam w sieci domowej dysk sieciowy (NAS) z moim katalogiem domowym (\\NAS\BACHUS\). Utwórzmy na nim nowy katalog, oraz spróbujmy utworzyć dowiązanie miękkie "Link3"(przełącznik /D), oraz połączenie (JUNCTION) do katalogów "Link4" (przełącznik /J):

Jak widać, można utworzyć tylko dowiązanie miękkie, ponieważ JUNCTION wymaga dysku lokalnego - połączenie sieciowe (SMB) nie jest w ten sposób obsługiwane.

Powershell

A Co z Powershellowcami ? Microsoft miał dość spore opóźnienie w implementacji i dopiero w ostatniej (!) 5-tej wersji coś się ruszyło. Ja osobiście używam w Windowsie dowiązań często - może przez to, że przez lata zajmowałem się głównie systemami z rodziny *nix i po czasie przeszedłem na ciemną stronę mocy. Dla mnie to była jakaś parodia używanie dodatków w stylu "PowerShell Community Extensions" (PSCX ) oferujące dodatkowe funkcje jak "New-SymLink", "New-HardLink", "New-Junction" i podobne. Najbardziej mnie jednak "bolało" odwoływanie się do powłoki Windows (cmd) poprzez brzydkie wywoływanie z PS:

cmd /c mklink c:\ZRODLO\ D:\CEL

Jak wyżej wspomniałem, firma z Redmond w nowej piątej wersji dodała odpowiednie funkcje. Na początku warto się upewnić, czy mamy taką w systemie:

Get-Host

Zacznijmy od dowiązanie "miękkiego" do katalogu:

#
# link miekki - odpowiednik mklink /D Link10 "G:\PLIKI"
#
New-Item -ItemType SymbolicLink -Name Link11 -Target G:\PLIKI

Jak można się chyba domyśleć, JUNCTION utworzymy w podobny sposób:

#
# link twardy- odpowiednik mklink /J Link10 "G:\PLIKI"
#
New-Item -ItemType Junction -Name Link12 -Target G:\PLIKI

Może jeszcze nasuwać się pytanie - w jaki sposób wyświetlić w Powershell typy plików i dowiązań? Tak jest! Microsoft i PS wspaniałomyślnie na to pozwala:

Get-ChildItem | select Name,Mode,LinkType,Target | Format-Table

Jeszcze się może zdarzyć, że ktoś ma awersję do linii poleceń - CMD, lub Powershell przeraża, albo po prostu nie lubisz wpisywać długich komend. Mówiąc szczerze, nie używam żadnych GUI do tego celu i nie mam z tym doświadczenia. Po chwili poszukiwań widzę, że są ciekawe rozwiązania. Pierwsze co wypluła wyszukiwarka Google to mała aplikacja Alejandro Mora "Symlinker ". Używanie jej nie zwalnia jednak ze znania zasad rządących linkami twardymi i miękkimi:

Całkiem rozsądnie wygląda też "Link Shell Extension ":

[img=drophardlinkfolder id=211112 alt=[źródło: Link Shell Extension]]

A jak usuwać dowiązania? Tak samo, jak zwykłe skróty (.lnk) i inne pliki - skasowanie ich nie skasuje katalogów, lub plików docelowych.

Przykład zastosowania

Może pojawić się pytanie, co dają dowiązania symboliczne i jaki mają sens, szczególnie przy NTFS i literach dysku a nie punktach montowania.

Po pierwsze, może być wygodne w przypadku braku miejsca na np. partycji systemowej (najczęściej dysku C:\) a dany program (lub inny zasób systemu operacyjnego) nie pozwala na instalację, lub wygodną zmianę lokalizacji. Spotkałem się z wieloma programami, które po prostu chcą być na C:, chcą koniecznie tworzyć tam pliki ..koniec i kropka. Podobnie ma miejsce ze źle (lub specjalnie...) skonstruowanymi programami, które nie pozwalają na pewne operacje: np. DROPBOX, który w opcjach nie ma możliwości dodawania innych katalogów (poza głównym wskazanym przy instalacji). No ale może jakiś rzeczywisty przykład, do którego w sumie natchnął mnie ten wpis.

Przeniesienie repozytorium aktualizacji na inną partycję

W laptopie żony wylądowała 3 lata temu pierwsza w domu pamięć SSD o zawrotnej pojemności 60GB. Po czasie okazało się się, że jest jednak lekkim nieporozumieniem w przypadku Windowsa "kiszenie się" na takiej dostępnej pojemności - po zainstalowaniu podstawowych aplikacji, klienta pocztowego zaczyna wyjątkowo brakować miejsca. Do laptopa dodałem dodatkowy talerzowy dysk, przeniosłem tam gry, maile (Thunderbird), ale Windows pomimo czyszczenia zapycha się i tyle. Nie mam czasu i ochoty ślęczeć nad tym i odchudzać OS. Przyszło do aktualizacji Windows 7 do Windows 10, sam proces był awykonalny ze względu na dostępne 2-3GB miejsca. Procedura okazała się dość prosta, ale czasochłonna i wymagająca rozkręcania laptopa, oraz żonglowania dyskami i kieszeniami USB:

[item]sklonowanie (kopia 1:1) SSD 60GB na tymczasowy dysk 240GB,[/item][item]podmiana fizycznego dysku w laptopie,[/item][item]aktualizacja do Window 10,[/item][item]ponowne sklonowanie (240GB --> 60GB),[/item][item]podmiana dysków.[/item]Pomimo tego, że po całym procesie zrobiło się na dysku więcej miejsca, niż przy Windows 7, nadal było za mało GB na niektóre aktualizacje.

Główny "cache" aktualizacji Windows trzyma w C:\Windows\SoftwareDistribution\. Przechowywane są tam pobrane, oraz tymczasowe pliki. Przenieśmy go na dysk G:\ - z pomocą przyjdą nam dowiązania symboliczne. Aby to zrobić, należy najpierw zatrzymać odpowiedzialny serwis: można to zrobić z linii komend, lub klikając w serwis prawym klawiszem (services.msc). Najprościej jak sprawdzić, czy proces jest uruchomiony, oraz jak zatrzymać serwis:

sc query wuauserv
net stop wuauserv

Po zatrzymaniu WUAUSERV nie powinno być problemu ze zmianą nazwy katalogu, lub całkowite usunięcie: Windows sobie poradzi z odtworzeniem zawartości a czasem całkowite wyczyszczenie może okazać się lekarstwem na problemy z aktualizacjami:

Teraz należy utworzyć na docelowym dysku (w tym przykładzie D:\) nowy katalog - nazwa jest dowolna, jednak dla porzadu utworzyłem D:\Windows\SoftwareDistribution\, oraz dowiązanie miękkie:

mkdir D:\Windows\SoftwareDistribution
mklink /D "C:\Windows\SoftwareDistribution" "D:\Windows\SoftwareDistribution"

Tak, dowiązanie "miękkie" działa, ale jak ktoś nie ma pewności, może zawsze utworzyć "JUNCTION":

mklink /J "C:\Windows\SoftwareDistribution" "D:\Windows\SoftwareDistribution"

Teraz można uruchomić zatrzymany wcześniej serwis aktualizacji, oraz obserwować, że po chwili powinny pojawić się w nim nowe katalogi i pliki (co oznacza, że operacja się udała):

Może się zdarzyć, że próba aktualizacji wyświetli błędy:

Wynika to z błędnych ustawień poziomu dostępu do tego katalogu dla kont systemowych. Najprościej chyba skorzystać z 'troubleshootingu' i pozwolić Windowsowi na naprawę uprawnień:

Oczywiście można to zrobić ręcznie, przepisując uprawnienia z katalogu D:\Windows\SoftwareDistribution.old:

Poprawność konfiguracji można sprawdzić poprzez rozpoczęcie procesu aktualizacji i sprawdzenie, czy katalog na dysku D:\ zaczyna "puchnąć"

Uwagi

Należy szczególnie przemyśleć przenoszenie istotnych plików i katalogów systemowych, szczególnie na zasoby sieciowe. Po pierwsze należy mieć pewność, że dysk lokalny jest zawsze obecny w systemie i przetestować, co się stanie jak go zabraknie. Co do zasobów sieciowych: czy dostęp danego katalogu, czy pliku nie jest wymagany przed podniesieniem usług sieciowych. Mam nadzieję, że z grubsza wyjaśniłem na czym polegają dowiązania w systemie Windows. Borat jest dumny, że dotrwałeś do końca tego wpisu.

Wybrane dla Ciebie
Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.