[ Back to Table of Contents ] [ << ] [ >> ]


From:    Kan Yabumoto           tech@xxcopy.com
To:      XXCOPY user
Subject: Reparse Points and Hard Links
Date:    2009-12-30


    A "Reparse Point" is a type of NTFS file system object (implemented in
    Windows 2000 and later versions) that provides extended functionality
    to an NTFS volume.  The most notable examples of reparse points include
    junction point, volume mount point and symbolic link (plus other exotic
    features like remote storage service (RSS) and single instance store
    (SIS) that are not within the scope of this discussion).

    Junction point (also called directory junction) and volume mount point
    were introduced in Windows 2000.  More recently, the symbolic links
    (for directory and for file) were introduced in Windows Vista.

    The common characteristic of these reparse points is that they store
    a reference path (called target) and behave as if they were the
    target object when accessed by most application programs.
       In Vista and Windows 7, your old friend, "C:\Documents and Settings"
       is not a regular directory.  Rather, it exists as a junction point
       whose target is C:\Users.  Similarly, the "All Users" directory
       inside "\Documents and Settings" is replaced by a directory-type
       Symbolic Link, "C:\ProgramData\" whose file attributes are usually
       marked with the hidden and system bits.  These reparse points are
       presumably provided for the backward compatibility's sake.

    Microsoft's document states "Symbolic links are designed to aid in
    migration and application compatibility with Unix operating system."

       You should not be confused with reparse points and the Shortcut
       files (with the .LNK extension) which was introduced by Windows 95.
       A shortcut is an ordinary file which is accessed like any other
       file by most application programs except by Windows Explorer that
       treats a shortcut as an alias of the real file.

    Aside from reparse points, hard links are officially debuted in Vista
    (even though the NTFS volume had provision to support hard links from
    earlier days).  In the case of regular files, the file data is stored
    under a unique pathname.  On the other hand, using hard links, one
    set of file data is stored under two or more pathnames.  From the hard
    link viewpoint, if the file data is associated by only one path (link),
    the file is called a regular file (non-hard link).  Hard links refer
    to a case where the file data is accessed via multiple pathnames.
    When a file with two hard links is deleted using one pathname, then,
    it will become a regular file with only one pathname representing the
    file data.

Behavior of Reparse points:

    Unlike shortcuts (special .LNK files under Windows Explorer's control),
    reparse points behave almost like the object they represent.  For
    example, when an application accesses "C:\Documents and Settings",
    the underlying file system automatically delivers the "C:\Users"
    directory instead.  While this behavior is exactly what the reparse
    point mechanism is designed for for most purposes, it poses a problem
    for a backup occasion.
    Ideally speaking, when a source volume or directory is to be backed up,
    the destination should contain the same structure that was found
    in the source.  A reparse point in the source should be reproduced
    as teh same type of reparse point in the destination.  However, prior
    to v.3.00, XXCOPY was not capable of preserving reparse points as such.
    Rather, a reparse point in the source would become a subdirectory in the
    destination.  This behavior was not completely satisfactory.  It was
    not only space-consuming in the destination, but also simply wrong in
    the truest sense.  Most other traditional file copy utilities had the
    same problem.  That's because one of the purposes of the reparse point
    was to fool regular applications to treat it like a directory.
    Now, backup applications such as XXCOPY need to pay close attention to
    the peculiarity of the reparse point.  Unfortunately, a relatively small
    number of programs are available to copy and create reparse points at
    this writing.   Microsoft's MKLINK.EXE is one such tool (albeit quite
    rudimentary in its capability).  XXCOPY (v.3.0x) is one of the premier
    products that provide a wide range of functionality


    For the lack of better name, we refer to the various reparse points
    and hard link as J-thingies (for junction points, et al with many
    command switches that start with letter J) in XXCOPY's documentation.
    At present, reparse points includes only four types;

       1) Symbolic Link Directory
       2) Symbolic Link File
       3) Junction Point that is not volume mount point
       4) Volume Mount Point (a special case of junction point)

    XXCOPY recognizes the following types of reparse points, hard link,
    and regular file and regular directory

         Type  Abbr.   Description
          F    [FIL]   Regular File      (not symbolic link nor hard link)
          S    [SYM]   Symbolic Link File (a reparse point)
          H    [HLK]   Hard Link  (file data shared with another hard link)

          D    <DIR>   Regular Directory (not a reparse point)
          L    <LNK>   Symbolic Link Directory (a reparse point)
          P    <JCT>   Junction Point (a reparse point)
          M    <MNT>   Volume Mount Point (a reparse point)

          J            Represents all J-thingies  (S)(H)(L)(P)(M)
          R            Represents all Reparse Points (S)(L)(P)(M)

          The "Type" letters shown above will be used as the parameters
          for many command switches that are relevant to J-thingies.

XXCOPY Command Switches for J-thingies:

     XXCOPY v.3.00.0 introduces many new functions that deal with the
      J-thingies (many of which are assigned to switches that starts with
      letter J).

      In the Windows system, reparse points behave very much like a real
      directory (or a file) when they are accessed by common application
      programs, including previous versions of XXCOPY.  On the other hand,
      in many occasions, we want such objects to be duplicated exactly as
      they are.

      The new XXCOPY allows you to choose either way to copy reparse points
      and hard links alike.  By default, the new XXCOPY (ver 3.00 or newer)
      treats all J-thingies (reparse points and hard link) as such.

        /JL   Treats directory symbolic links as symbolic links (default).
        /JP   Treats junction (non-mount) points as junction pts (default).
        /JM   Treats volume mount points as volume mount points(default).
        /JS   Treats file symbolic links as symbolic links (default).
        /JH   Treats file hard links as hard links (default).

        /JJ   Treats all J-thingies as such (shortcut for /JL/JP/JM/JS/JH)
        /JR   Treats reparse points as such (shortcut for /JL/JP/JM/JS)

      Or, you may let XXCOPY treat them as if they are a regular directory
      or file by the following switches.

        /JL0  Treats directory symbolic links as a regular directory.
        /JP0  Treats junction (non-mount) points as a regular directory.
        /JM0  Treats volume mount points as a regular directory.
        /JS0  Treats file symbolic links as a regular file.
        /JH0  Treats file hard links as a regular file.

        /JJ0  Treats all J-thingies as a regular directory or file.
        /JR0  Treats reparse points as a regular directory or file.

      ####### CAUTION to old XXCOPY users ###############################

        The default treatments of J-thingies by XXCOPY Ver 3.00 are now
        exact opposite to what they were with older XXCOPY versions.

        If you want XXCOPY to behave like the old versions with respect
        to the J-thingies, you need to add /JJ0 in the command line.


      You may use the object type for file/directory selection by
      the new exclusion function.

        /JX<mask>   Excludes one or more types of J-Thingies as well as
                    regular files and directories (F,D,S,H,L,P,M,J,R).

        /JI<mask>   Includes only the J-thingies specified.
                    This function is implemented as a shortcut of the
                    inverse function of /JX<mask>.

      When XXCOPY displays a reparse point on the screen, the path of the
      referenced object will be shown.

        /oR         Shows the reference path of a reparse point (default)
        /oR0        Disables the display of the reparse point reference path

      When an existing object in the destination is to be overwritten
      by a different J-thingy type, the user will be prompted.

        /PJ         Prompts on overwrite by a different J-thingy type
        /PJ0        Suppresses prompt on overwrite by different J-thingy type.

      When a file whose path contains a reparse point is to be deleted,
      the user will be prompted. 

        /PR         Prompts when a file with a reparse point path is to be deleted
        /PR0        Suppresses prompt on overwrite by different reparse point type.

      When an elements in the full path of the source or the destination
      specifiers contain a reparse point, XXCOPY will issue a warning prompt. 

        /WR         Warns when src/dst path contains a reparse point
        /WR0        Suppresses the warning for a reparse point in src/dst path 

      Since a reparse point directory can be created to form a cyclic
      reference, it could cause a recursive meltdown (for example,
      "C:\ProgramData\Application Data\" points to "C:\ProgramData\"
      that forms a infinite loop of reference).  XXCOPY detects such
      cyclic reparse points and prevents the recursive meltdown.
      XXCOPY has a command to show all occurrences of cyclic references.

        /JCYCLIC    Scans the source directory and lists all cyclic links

        /oC         Displays a cyclic link that is being skipped (default)
        /oC0        Suppresses the display of cyclic links that are skipped

      XXCOPY provides a bulk hardlink creation:

        /MLH        Makes a hard link file in dst for each file in src
        /ULH        Unlinks (convert hard links into regular files)

© Copyright 2016 Pixelab All rights reserved.

[ XXCOPY Home ] [ Table of Contents ] [ << ] [ >> ]

Join the XXCOPY group