NTFS umí nativně symlinky jako Linux

MyEgo.cz

home foto blogy mywindows.cz kontakt

NTFS umí nativně symlinky jako Linux

Bezpečnost 08.11.05

Dosud jsem za jednu z předností Linuxových filesystémů považoval jejich strukturu a symlinky, tedy třeba příkaz ln -s cíl adresář. Věděl jsem, že Windows obsahují symlinky pro celé diskové oblasti, které je možno zařadit do stávající adresářové struktury, ale velice jsem postrádal symlinky pro adresáře a jednotlivé soubory.

Až Libor mě v komentářích upozornil na to, že existují dva produkty, které tuto funkci nabízí i pro Windows. Navíc se nejedná o žádnou magii, NTFS umí symlinky zcela nativně, jen pro tuto operaci Microsoft nenabízí ve standardní instalaci žádný nástroj (opravdu nechápu proč v běžné instalaci skrývá takto vynikající funkce; v nabídce je jen program linkd.exe v Resource Kitu).

K čemu jsou symlinky? Řekněme tomu, že právě pracujete na webu v adresáři D:\web\www\moc_hezký_web, pomocí symlinků si jej můžete dočasně umístit do C:\work. Stejně tak můžete adresář C:\Program Files přemapovat na nově zakoupený disk do D:\bin. Použití je rozmanité, a funguje naprosto všude a ve všech programech, protože je to vlastnost NTFS souborového systému.

K tvorbě symlinků Vám poslouží buď utilita Junction od Sysinternals (používá se z příkazové řádky; doporučuji nakopírovat do Windows\System32) nebo Junction Link Magic od Mikaella Nordela.

Následně již můžete definovat Vaše první junctions:

JunctionJunction od Sysinternals
Link MagicLink Magic

Komentáře

  1. 1 MS DOS 08.11.05, 09:11:45
    FB

    To uměl i dos ne tam byl příkaz SUBST

  2. 2 Radek Hulán 08.11.05, 09:11:47
    FB

    [1] kdepak, SUBST pouze přiřazuje cestě jedno z 26 písmen jednotek, to není symlink

  3. 3 markon 08.11.05, 09:11:54
    FB

    [2] Jenom doplním, že příkaz SUBST je i ve Windows XP a je velice užitečný. Například lze nainstalovat Apache+Mysql+PHP na virtuální disk W: se zachováním stejných cest jako v linuxu W:etchttpd.conf

  4. 4 Radek Hulán 08.11.05, 09:11:57
    FB

    [3] jenže tím se dostáváme k omezení 26 písmenek, a to je prostě špatnej systém, symlink a jedna společná adresářová struktura pod C:, což je vlastně root, je přehlednější, a netrpí omezením na 26 písmenek

  5. 5 Spud 08.11.05, 10:11:45
    FB

    Stejně tak můžete adresář C:\Program Files přemapovat na nově zakoupený disk do D:\bin.

    To vypadá docela užitečně, jestli tomu dobře rozumím, tak když si přemapuju Program Files na jiný disk jak uvádíte, tak tam překopíruju všechny stávající data a cokoliv dalšího budu instalovat do %ProgramFiles% se bude sypat do D:\Bin. A co po restartu Woken, zůstane to přelinkování aktivní, nebo se to nalinkování bude muset spouštět v nějaké dávce po startu?

  6. 6 Radek Hulán 08.11.05, 10:11:55
    FB

    [5] ano, tak to funguje, Windows pod C:\Program Files vidí obsah, který je fyzicky na D:\bin. A žádná dávka není potřeba, toto nativně umí NTFS, je to jeho součástí, utilita junction.exe jen tento symlink vytvoří

  7. 7 k23 08.11.05, 11:11:56
    FB

    Velice užitečné, akorát mi přijde, že v linux umí udělat symlink na soubor, tady mi to jaksi nejde, což je škoda. Ale i tak velmi dobrá pomůcka :)

  8. 8 jirkaz_ 08.11.05, 12:11:01
    FB

    Symlinky určitě použiju, díky za info, mít vše v jedné struktuře není špatné.
    [4]
    Na druhou stranu, mít více disků také není k zahození. Windows totiž mají jednu výhodu - pamatují si u každého disku aktuální cestu. V průzkumníku to tak znát není ale třeba v total commanderu je to daleko pohodlnější, když si to u každého disku pomatuje kde jsem, pokud jsem na jednom disku mám smůlu. Ale asi hodně záleží na stylu práce, někomu jinému by to asi nechybělo.

  9. 9 Radek Hulán 08.11.05, 12:11:04
    FB

    [7] to není pravda, symlink jde udělat i na soubor, píšu o tom... Navíc odkazy na soubory se dají dělat přes klasické *.lnk.

  10. 10 Jiří Macich ml. 08.11.05, 12:11:21
    FB

    [4] Ale po vyčerpání jednoho písmenka mají nastoupit dvě. Třeba když dojdeš k Z, tak se objeví CA apod. Nezkoušel jsem to, ale je to v jednom návodu ;-)

  11. 11 jajro 08.11.05, 12:11:29
    FB

    Škoda že nieje stále možné možne mountnuť (juncktnuť) sieťový disk tak ako v linuxe.
    A link na súbor síce vytvoriť môžete, ale nebude fungovať ...

  12. 12 k23 08.11.05, 01:11:03
    FB

    [10] Mě to prostě nejde :( asi jsem lama, ale když dám vytvořit symlink na soubor, tak mi to napíše hlášku o neplatném adresáři :(

  13. 13 Libor 08.11.05, 03:11:16
    FB

    [12] jestli jen nepoužíváte špatnou utilitu ;-)
    http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fsutil_hardlink.mspx...
    Libor

  14. 14 Petr Dvořák 08.11.05, 03:11:33
    FB

    Pomocí Junction jsem to zkoušel už dříve, ale nepovedlo se mi vytvořit symlink na adresář na zašifrovaném disku (šifrováno pomocí TrueCrypt). Obráceně, tj. vytvořit symlink adresáře umístěného na nezašifrovaném disku na zašifrovaný, to jde bez problémů.
    Nemám tedy Win XP, ale Win 2000.
    Nezkoušel to někdo? Pokud ano, s jakým výsledkem? ;-)

  15. 15 xyz 08.11.05, 04:11:59
    FB

    [13] Jenom technický detail. On to pak není symlink, ale hard-link.

    Trochu mě celý článek zmátl, protože Windows sice nepoužívám, leč něco málo jsem o nich a jmenovitě i NTFS četl a měl jsem dojem, který ovšem i nyní po překontrolování dostupné dokumentace přetrvává, totiž: NTFS umí (něco jako) symlinky pro adresáře a hard linky pro soubory.

    Kromě odlišné implementace je zde uživatelsky asi nejpodstatnějším rozdílem: hard link, jakožto vlastně další jméno jednoho souboru, lze vytvářet pouze v rámci jednoho souborového systému.

  16. 16 dgx 08.11.05, 05:11:53
    FB

    Opatrně s tím! Při vysypání koše se mi občas stalo, že se "hardlinkované" soubory a adresáře smazaly (přesněji vyprázdnily). Neznám přesné příčiny, ale bylo to velmi nemilé...

  17. 17 Libor 08.11.05, 07:11:41
    FB

    [15] nejen v rámci jednoho souborového systému, ale bohužel i jen na jednom svazku. Souborové hardlinky nepoužívám, jen jsem s nimi tak trochu laboroval, ale s adresářovými symlinky nemám ve wxp už delší dobu žádné problémy, dokonce ani s tím, že by se mi nějaký symlinkovaný adresář [16] smazal sám od sebe. Používal jsem je i mezi flashdiskem a harddiskem, taktéž bez výraznějších problémů, dokud mě nezačala otravovat nutnost odpojovat flashdisk místo jeho prostého vytažení z USB... Libor

  18. 18 xyz 08.11.05, 08:11:27
    FB

    [17] Zdá se, že pod pojmem souborový systém (fs) chápeme různé věci. Neměl jsem na mysli celý strom, ale pouze jednu konkrétní instanci fs (i v případě, že je do stromu připojená), což by mohl být svazek nebo také soubor s fs připojený přes místní smyčku (pokud Windows něco podobného umí, ale tipují, že různé šifrované fs budou něco podobného). Ono to nakonec možná může být i přes více "fyzických" svazků, pokud Windows umí něco jako LVM(?). Hloupě řečeno (platí pouze pro výchozí win-chování): hard linky mohou být pouze v rámci disku se stejným "písmenkem".

    Když se dorozumíme, tak se určitě i shodneme. ;)

    [16] Jestli to nesouvisí s tím, že NTFS to sice umí (kompatibilita s některými vlastnostmi POSIX - popsáno zde), ale Windows a jejich výchozí nástroje s tím neumějí pracovat, ani s tím vlastně nepočítají (taky popsáno na té stránce). Proto je dost dobře představitelné, že běžné postupy (jako vysypávání koše) si neporadí se skutečností, že jeden soubor má v rámci fs více jmen (reprezentací).

  19. 19 Libor 08.11.05, 09:11:30
    FB

    [18] Ano, v tomto s vámi souhlasím, čili shodli a dorozuměli ;) . V každém případě považuji hardlinky pod Win za poměrně nebezpečné pohrávání si s daty.

  20. 20 Vlado Raab 09.11.05, 12:11:33
    FB

    pěkné ... velmi jenom čekám kdy Radek Hulán příjde taky na to, že existují nástroje které příkazy z linuxu portují na Win. To se jeden bude divit když se dočte o tom, že je možno použít ls -l místo DIR apod.

  21. 21 Keff 09.11.05, 01:11:19
    FB

    (znouvu a s diakritikou)
    Jen bych dodal (někomu by se to mohlo hodit :)), že pokud smažete běžnými nástroji symlink, smažete i vše co zastupuje, pokud chcete jen zrušit symlink, musíte opět použít jeden z uvedených nástroju pro práci se symlinky.
    (Jen pro pořádek, uz jsem nějaké články o symlinku četl, a v diskusi pod nimi se vždycky našel někdo koho by tohle varováni zachránilo pred ztrátou dat :)))

  22. 22 Radek Hulán 09.11.05, 09:11:50
    FB

    [21] absolutní omyl, symlink NEMAŽE vše, co zastupuje, smazáním symlinku se smaže jen tento symlink, a nikoliv obsah adresáře, na který ukazoval

  23. 23 Rado12 25.11.05, 10:11:04
    FB

    A ako sa vytvára odkaz na súbor? Lebo cez tie programiky to nejde a "*.lnk" mi nič nehovorí.

  24. 24 Bob 05.12.06, 08:12:38
    FB

    Já tu řeším trochu podobný problém a to jak pracovat v PHP s Opendir() a sítovým adresářem (Novell). To se mi nepovedlo ani pomocí symlinku. Neznáte někdo nějakej způsob aby to fungovalo? Díky

  25. 25 Milan Tuček 27.01.10, 06:01:26
    FB

    No, jestli se nepletu tak ve Win Vista i Win 7 je spousta simlinků již od inslace systému. Např. pro cestu C:\users je vytvořen (pro zpětnou kompatibilitu) simlink C:\Document and Settings apod. Jejich smazaním se opravdu odkazovaná data nesmažou!