Hard link

Wpis w katalogu będący kolejną nazwą dla istniejącego inode. Wszystkie dowiązania twarde są równorzędne i wskazują te same dane na dysku.

Dowiązanie twarde (hard link) to po prostu kolejna nazwa wskazująca na ten sam inode, czyli na tę samą fizyczną porcję danych na dysku. W systemie plików nazwa pliku i jego zawartość to dwie różne rzeczy: katalog trzyma tylko parę „nazwa → numer inode”, a cała reszta (rozmiar, uprawnienia, czas modyfikacji i wskaźniki do bloków z danymi) siedzi w inode. Tworząc hard link, dokładasz po prostu kolejny wpis w katalogu wskazujący na ten sam numer inode. Żaden z tych wpisów nie jest „oryginałem” — wszystkie są równorzędne i nie da się powiedzieć, który powstał pierwszy.

Jak to działa i do czego służy

Każdy inode ma licznik dowiązań (st_nlink). Gdy tworzysz nowy hard link, licznik rośnie o jeden; gdy usuwasz nazwę poleceniem rm, licznik maleje. Dane z dysku znikają dopiero wtedy, gdy licznik spadnie do zera (i żaden proces nie trzyma pliku otwartego). Dlatego usunięcie jednej nazwy nie kasuje pliku, jeśli istnieje druga — pozostałe dowiązania nadal działają i pokazują tę samą treść. Zmienisz zawartość przez jedną nazwę, zobaczysz tę zmianę przez wszystkie, bo to dosłownie ten sam plik.

W praktyce hard linki służą do oszczędzania miejsca i do bezpiecznego współdzielenia tych samych danych pod różnymi ścieżkami, bez kopiowania bajtów.

Przykład z praktyki

Tworzysz dowiązanie poleceniem ln bez flagi -s (z -s robisz symlink, czyli zupełnie co innego):

  • ln plik.txt kopia.txt — obie nazwy wskazują ten sam inode
  • ls -li plik.txt kopia.txt — zobaczysz ten sam numer inode i licznik dowiązań równy 2

Klasyczne zastosowanie w realnym świecie to backupy przyrostowe: narzędzia takie jak rsync --link-dest albo Time Machine na macOS tworzą „pełne” snapshoty, w których niezmienione pliki to tylko hard linki do poprzedniej kopii. Dzięki temu każdy snapshot wygląda jak komplet danych, a zajmuje tyle, ile faktycznie się zmieniło.

Na co uważać

Dwie żelazne zasady wynikające z konstrukcji: hard link nie może przekraczać granicy systemu plików (numery inode są lokalne dla danego filesystemu, więc dowiązania na inną partycję czy dysk po prostu nie zrobisz), oraz zwykle nie da się hardlinkować katalogów — jądro tego zabrania, żeby nie tworzyć pętli w drzewie katalogów. Najczęstszy mit to mylenie hard linka z symlinkiem: symlink to mała ścianka z zapisaną ścieżką i „psuje się”, gdy cel skasujesz lub przeniesiesz; hard link żyje własnym życiem, bo trzyma się inode, nie ścieżki.

Pojęcia powiązane: inode, dowiązanie symboliczne (symlink), polecenie ln, licznik dowiązań st_nlink, system plików, polecenie stat.