|  | @@ -568,6 +568,7 @@ dictionary created by the ``Item`` class that contains:
 | 
	
		
			
				|  |  |  * gid
 | 
	
		
			
				|  |  |  * mode (item type + permissions)
 | 
	
		
			
				|  |  |  * source (for symlinks)
 | 
	
		
			
				|  |  | +* hlid (for hardlinks)
 | 
	
		
			
				|  |  |  * rdev (for device files)
 | 
	
		
			
				|  |  |  * mtime, atime, ctime in nanoseconds
 | 
	
		
			
				|  |  |  * xattrs
 | 
	
	
		
			
				|  | @@ -1246,3 +1247,28 @@ For example, using 1.1 on a repository, noticing corruption or similar issues an
 | 
	
		
			
				|  |  |  ``borg-1.0 check --repair``, which rewrites the index and hints, results in this situation.
 | 
	
		
			
				|  |  |  Borg 1.1 would erroneously report checksum errors in the hints and/or index files and trigger
 | 
	
		
			
				|  |  |  an automatic rebuild of these files.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +HardLinkManager and the hlid concept
 | 
	
		
			
				|  |  | +------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Dealing with hard links needs some extra care, implemented in borg within the HardLinkManager
 | 
	
		
			
				|  |  | +class:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- At archive creation time, fs items with st_nlink > 1 indicate that they are a member of
 | 
	
		
			
				|  |  | +  a group of hardlinks all pointing to the same inode. For such fs items, the archived item
 | 
	
		
			
				|  |  | +  includes a hlid attribute (hardlink id), which is computed like H(st_dev, st_ino). Thus,
 | 
	
		
			
				|  |  | +  if archived items have the same hlid value, they pointed to the same inode and form a
 | 
	
		
			
				|  |  | +  group of hardlinks. Besides that, nothing special is done for any member of the group
 | 
	
		
			
				|  |  | +  of hardlinks, meaning that e.g. for regular files, each archived item will have a
 | 
	
		
			
				|  |  | +  chunks list.
 | 
	
		
			
				|  |  | +- At extraction time, the presence of a hlid attribute indicates that there might be more
 | 
	
		
			
				|  |  | +  hardlinks coming, pointing to the same content (inode), thus borg will remember the "hlid
 | 
	
		
			
				|  |  | +  to extracted path" mapping, so it will know the correct path for extracting (hardlinking)
 | 
	
		
			
				|  |  | +  the next hardlink of that group / with the same hlid.
 | 
	
		
			
				|  |  | +- This symmetric approach (each item has all the information, e.g. the chunks list)
 | 
	
		
			
				|  |  | +  simplifies dealing with such items a lot, especially for partial extraction, for the
 | 
	
		
			
				|  |  | +  FUSE filesystem, etc.
 | 
	
		
			
				|  |  | +- This is different from the asymmetric approach of old borg versions (< 2.0) and also from
 | 
	
		
			
				|  |  | +  tar which have the concept of a main item (first hardlink, has the content) and content-less
 | 
	
		
			
				|  |  | +  secondary items with by-name back references for each subsequent hardlink, causing lots
 | 
	
		
			
				|  |  | +  of complications when dealing with them.
 |