Hard link
In
Every directory is itself a special file on many systems, containing a list of file names instead of other data. Hence, multiple hard links to directories are possible, which could create a circular directory structure, rather than a branching structure like a tree. For that reason, some file systems forbid the creation of hard links to directories.
Operation
Let two hard links, named "LINK A.TXT" and "LINK B.TXT", point to the same physical data. A text editor opens "LINK A.TXT", modifies it and saves it. When the editor (or any other app) opens "LINK B.TXT", it can see those changes made to "LINK A.TXT", since both file names point to the same data. So from a user's point of view this is one file with several filenames. Editing any filename modifies "all" files, however deleting "any" filename except the last one keeps the file around.
However, some editors, such as GNU Emacs, break the hard link concept. When opening a file for editing, e.g., "LINK B.TXT", emacs renames "LINK B.TXT" to "LINK B.TXT~", loads "LINK B.TXT~" into the editor, and saves the modified contents to a newly created "LINK B.TXT". Now, "LINK A.TXT" and "LINK B.TXT" no longer shares the same data. (This behavior can be changed using the emacs variable backup-by-copying
.)
Any number of hard links to the physical data may be created. To access the data, a user only needs to specify the name of any existing link; the operating system will resolve the location of the actual data. Even if the user deletes one of the hard links, the data is still accessible through any other link that remains. Once the user deletes all of the links, if no process has the file open, the operating system frees the disk space that the file once occupied.
Reference counting
Most
This is a simple method for the file system to track the use of a given area of storage, as zero values indicate free space and nonzero values indicate used space. The maintenance of this value guarantees that there will be no dangling hard links pointing nowhere. The data section and the associated inode are preserved as long as a single hard link (directory reference) points to it or any process keeps the associated file open.
On
st_nlink
field of struct stat
.
Limitations
To prevent loops in the filesystem, and to keep the interpretation of the "..
" file (parent directory) consistent, operating systems do not generally allow hard links to directories.
Hard links can be created to files only on the same volume, i.e., within the same file system. (Different volumes may have different file systems. There is no guarantee that the target volume's file system is compatible with hard linking.)
The maximum number of hard links to a single file is limited by the size of the reference counter. On Unix-like systems the counter is 4,294,967,295 (on 32-bit machines) or 18,446,744,073,709,551,615 (on 64-bit machines). In some file systems, the number of hard links is limited more strictly by their on-disk format. For example, as of
On
Platform support
Windows NT 3.1 and later support hard links on the NTFS file system.[9] Windows 2000 introduces a CreateHardLink()
function to create hard links, but only for files, not directories.[10] The DeleteFile()
function can remove them.
To create a hard link on Windows, end-users can use:
- The
fsutil
utility (introduced in Windows 2000)[11] - The
mklink
internal command of - The
New-Item
cmdlet of PowerShell[13]
To interrogate a file for its hard links, end-users can use:
- The
fsutil
utility[11] - The
Get-Item
andGet-ChildItem
cmdlets of PowerShell. These cmdlets represent each file with an object; PowerShell adds a read-only LinkType property to each of them. This property contains the "HardLink
" string if the associated file has multiple hard links.[14]
The
On Unix-like systems, the link()
system call can create additional hard links to existing files. To create hard links, end-users can use:
To interrogate a file for its hard links, end-users can use:
- The
commandstat - The
ls -l
command - The
Get-Item
andGet-ChildItem
cmdlets of PowerShell (see above)[14]
Unix-like emulation or compatibility software running on Microsoft Windows, such as
OpenVMS supports hard links on the ODS-5 file system.[15] Unlike Unix, VMS can create hard links to directories.
See also
- Symbolic link: Points to a hard link, not the file data itself; hence, it works across volumes and file systems.
- NTFS links: Details the four link types that the NTFS supports—hard links, symbolic links, junction points, and volume mount points
- Shortcut: A small file that points to another in a local or remote location
- freedup – The
freedup
command frees-up disk space by replacing duplicate data stores with automatically generated hard links
References
- ^ Pitcher, Lew. "Q & A: The difference between hard and soft links".
- ^ "Link Shell Extension".
- ^ "Resilient File System (ReFS) overview". Microsoft Learn. 26 October 2022 – via Microsoft Docs.
- ISBN 9780132017992.
- ^ Pond, James (August 31, 2013). "How Time Machine Works its Magic". File System Event Store, Hard Links. Archived from the original on June 21, 2019. Retrieved May 19, 2019.
- ^ "Linux kernel source tree, fs/ext4/ext4.h, line 229".
- ^ "CreateHardLinkA function (winbase.h)". Windows App Development. 13 October 2021 – via Microsoft Docs.
- ^ Brown, Neil (23 November 2010). "Ghosts of Unix past, part 4: High-maintenance designs". Linux Weekly News. Retrieved 20 April 2014.
- ^ "How hard links work". Microsoft Docs. 6 January 2011.
- )
- ^ a b "Fsutil hardlink". Windows App Development. Microsoft. 18 April 2012 – via Microsoft Docs.
- ^ "Mklink". Microsoft Docs. Microsoft. 18 April 2012.
- ^ a b "New-Item (PowerShell 3.0)". Microsoft Docs. Microsoft. 22 June 2020.
If your location is in a FileSystem drive, the following values are allowed: If your location is in a FileSystem drive, the following values are allowed: File[,] Directory[,] Junction[,] HardLink
- ^ a b "FileSystemProvider.cs". PowerShell / PowerShell repo. Microsoft. 20 November 2021. Lines 8139–8234 – via GitHub.
- ^ "OpenVMS System Manager's Manual, Vol. I" (PDF). VSI. August 2019. Retrieved 2021-01-23.