В чем разница между hardlink и копированием (cp) файла в Linux?

«В чем разница между hardlink и копированием (cp) файла в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Hardlink (ln) и копирование (cp) кардинально различаются с точки зрения использования дискового пространства и синхронизации данных.

Аспект Hardlink Копирование (cp)
Inode Совместно использует тот же inode с оригиналом. Создает новый inode и новые блоки данных на диске.
Дисковое пространство Практически не потребляет дополнительного места (только запись в каталоге). Занимает столько же места, сколько исходный файл.
Синхронизация данных Изменения в одном хардлинке мгновенно видны во всех других, так как это один набор данных. Копия полностью независима. Изменения в оригинале не затрагивают копию, и наоборот.
Удаление Удаление одного хардлинка не удаляет данные. Данные удаляются, когда удален последний хардлинк. Удаление копии не влияет на оригинал.

Практический пример: Допустим, у меня есть большой лог-файл, который активно пишется приложением, и мне нужно его ежедневно архивировать.

# ПЛОХО: Копирование заблокирует файл и может скопировать неконсистентные данные
$ cp /var/log/app.log /backup/app.log.$(date +%F)

# ЛУЧШЕ (шаг 1): Создать хардлинк для моментального "снимка"
$ ln /var/log/app.log /backup/snapshot.log
# Теперь snapshot.log и app.log указывают на одни данные.

# (шаг 2): Скопировать этот снимок, уже не мешая работе основного лога
$ cp /backup/snapshot.log /backup/app.log.$(date +%F)

# (шаг 3): Удалить временный хардлинк
$ rm /backup/snapshot.log
# Основной лог-файл app.log продолжает работу без проблем.

Таким образом, хардлинки полезны для создания консистентных снапшотов без простоев, а копирование — для создания независимых резервных копий или распространения файлов.