hostprofi.ru
Подобрать хостинг
Термин·буква H

Hardlink

краткое определение

Hardlink (жёсткая ссылка) — альтернативное имя файла в Linux, указывающее на те же данные (inode) на диске. В отличие от символической ссылки, hardlink — полноценная запись в директории: данные удаляются только после удаления всех hardlink на inode.

Hardlink (жёсткая ссылка) — запись в файловой системе, указывающая на существующий inode. Inode — структура данных файловой системы, хранящая метаданные файла (права, размер, временны́е метки) и указатели на блоки данных. Hardlink создаёт ещё одно имя для того же inode — как псевдоним.

Как работает

Создание hardlink:

ln original.txt hardlink.txt

После этого original.txt и hardlink.txt — равноправные имена одного файла. Удаление original.txt не уничтожает данные — они остаются доступны через hardlink.txt. Данные удаляются только при нулевом счётчике ссылок (link count, поле nlink в inode). Команда ls -li показывает inode-номер и счётчик ссылок.

Ограничения hardlink: нельзя создать hardlink на директорию (только суперпользователь в специальных случаях), нельзя создать hardlink между разными файловыми системами (разными разделами/устройствами).

Символическая ссылка (ln -s target link) — отличный механизм: содержит путь к целевому файлу, может указывать на директории и пересекать файловые системы, но «ломается» при удалении цели.

История

Концепция inode и ссылок введена в Unix Version 1 (1969) в Bell Labs. Система ссылочных счётчиков — фундаментальная часть Unix и всех производных ОС (Linux, macOS, BSD). ext2/ext3/ext4 — основные файловые системы Linux — полностью поддерживают hardlink.

Практическое применение в хостинге

Hardlink используется в системах резервного копирования (rsync с --link-dest): инкрементальная копия хранит hardlink на неизменившиеся файлы предыдущего бэкапа, занимая место только для изменённых файлов. Это позволяет хранить 30 дней полных снимков сервера в пространстве, равном 1–2 полным копиям.

Жёсткие и символические ссылки

Hard link — дополнительное имя для того же inode. Удаление исходного файла не удаляет данные (пока есть хотя бы один hard link). Только для файлов (не директорий), только в пределах одной файловой системы. ln source hardlink. Symbolic link — ссылка на путь: ln -s /target /link.

Применение в хостинге

Hard links используются в инкрементальных бэкапах: rsync --link-dest создаёт hard links для неизменённых файлов — бэкап занимает лишь место изменений. Symbolic links: /var/www/current → /var/www/releases/20240101 — атомарное переключение деплоев (blue-green deploy).

Диагностика

ls -li — inode-номера файлов (одинаковый = hard link). find / -inum 1234567 — все hard links конкретного inode. stat file — число ссылок на inode. При достижении максимума hard links (65535 в ext4) — новые создать невозможно.

Иноды и ограничения файловой системы

Каждый файл потребляет один inode. ext4: по умолчанию 1 inode на 4 КБ диска (~256 инодов/МБ). Переполнение инодов при тысячах мелких файлов: df -i — проверка использования. Для систем с кэш-файлами PHP/WordPress: увеличить число инодов при форматировании: mkfs.ext4 -N 10000000 /dev/sdb.

Атомарный деплой через symlink

Паттерн: releases/ с версиями, current → symlink. Деплой: создать releases/v2 → тест → ln -sfn releases/v2 current (атомарная операция). Nginx перечитает symlink немедленно без reload. Rollback: ln -sfn releases/v1 current за секунду. Capistrano использует этот паттерн для Rails.

Hard links широко используются в инкрементальных бэкапах через rsync. Symbolic links применяются при Blue-Green деплоях. Оба типа ссылок работают в любой файловой системе Linux: LVM-тома, RAID-массивы. Docker использует overlay filesystem со схожей концепцией.

Другие термины