Debian. Шпаргалка сисадмина. Симлинки и хардлинки

Debian. Шпаргалка сисадмина. Симлинки и хардлинки
www.debian.org

Статья Debian. Шпаргалка сисадмина. Симлинки и хардлинки призвана пролить свет на понятия жестких и мягких ссылок, а также рассказать про индексные дескрипторы, которые лежат в основе.


Если вам интересна тематика Debian и связанных с ним приложений, рекомендую обратиться к тегу Debian на моем блоге.


Debian. Шпаргалка сисадмина. Симлинки и хардлинки

Начнем с самого главного.

Inode

Попытки разобраться в принципах работы файловой системы натолкнут вас на понятие inode (или индексный дескриптор). Эта структура хранит метаданные об объектах файловой системы (будь то файлы, каталоги или что-то другое). Метаданные предоставляют информацию о размере файла, его владельце, правах доступа, и многом другом, кроме имени.

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

Ext4 выделяет фиксированное значение inodes при создании файловой системы, которое приблизительно составляет 1% от размера тома. Из этого сразу следует, что на конкретном томе вы сможете создать ограниченное количество файлов/каталогов, даже если свободного места будет предостаточно – большое количество мелких файлов может просто сожрать все доступные inodes.

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

Увидеть номер inode файла или каталога можно всем знакомой командой ls с ключом -i:

Первая цифра и есть номер индексного дескриптора.

Посмотреть сводную информацию по inodes на каждом логическом томе можно командой df также с ключом -i (вывод команды сокращен):

Если нужно знать какой каталог сожрал больше всего inodes (другими словами в каком каталоге больше всего объектов), вы можете узнать это командой 1 (вывод сокращен):

А теперь рассмотрим жесткие ссылки.

Жесткие ссылки

Жесткую ссылку на файл можно создать командой:

Первым делом в статье я рассказывал про понятие inode и это было не просто так. Давайте посмотрим вывод команды ls:

Бросается в глаза тот факт, что inode у файла и его жесткой ссылки одинаковые! То есть, по сути, это один и тот же объект с точки зрения файловой системы и жесткая ссылка просто указывает на индексный дескриптор.

Cразу же можно сделать несколько выводов. Во-первых, при перемещении файла его жесткая ссылка продолжит работать. Во-вторых, жесткие ссылки можно создавать на файлы только в пределах границ одной файловой системы, поскольку в противном случае inodes не будут уникальны.

Есть ещё одна очень интересная особенность у жестких ссылок и я хочу её продемонстрировать. Для этого давайте удалим исходный файл:

После этого, проверив работоспособность оставшейся “осиротевшей” жесткой ссылки вы обнаружите, что она осталась работоспособной! То есть, данные останутся доступны до тех пор, пока не будет удален сам файл и все его жесткие ссылки.

Можно пойти ещё дальше и сделать вывод, что сам файл и есть жесткая ссылка на данные, располагающиеся на запоминающем устройства. Это легко подтверждается выводом команды ls (на всякий случай продублирую его ещё разок):

Обратите внимание на цифру, выделенную жирным шрифтом. Она обозначает количество жестких ссылок на файл.

Ну а теперь об ограничениях – создать жесткую ссылку на каталог у вас не получится, иначе возникает потенциальная возможность создания зацикленных указателей (подкаталог будет иметь жесткую ссылку на своего родителя).

Мягкие ссылки

Мягкие ссылки (симлинки, символические ссылки) создаются все той же утилитой, но с дополнительным ключом:

Если сейчас мы посмотрим на индексные дескрипторы файла и его симлинка:

… то увидим, что они отличаются. Другими словами, для файловой системы это абсолютно разные объекты и симлинк просто содержит информацию о пути к файлу. Отсюда можно сделать вывод, что при перемещении файла симлинк на него окажется в “подвешенном” состоянии, то есть работать перестанет. То же самое случится и при удалении исходного файла.

Но если симлинк – это отдельный объект файловой системы, то мы сразу избавляемся от массы ограничений. Например вполне можно создать симлинк на файл за границей текущей файловой системы, ведь мы больше не ограничены индексным дескриптором. Также никто не запрещает создать симлинк на каталог.

Вот и все особенности.

Яндекс.Метрика