Надеюсь, я смогу ответить на это так, чтобы это имело смысл для вас. Файловая система в Linux, как правило, состоит из раздела, который отформатирован одним из различных способов (должен любить!), В котором вы храните свои файлы. Будь то ваши системные файлы или ваши личные файлы ... все они хранятся в файловой системе. Эту часть вы, похоже, поняли.
Но что делать, если вы разбили свой жесткий диск на несколько разделов (например, Apple Pie разрезать на части) или добавили дополнительный жесткий диск (возможно, USB-накопитель?). Ради аргумента, у них всех также есть файловые системы.
Когда вы смотрите на файлы на вашем компьютере, вы видите визуальное представление данных в файловой системе вашего раздела. Каждое имя файла соответствует тому, что называется инодом, и именно там ваши данные за кулисами действительно живут. Жесткая ссылка позволяет вам иметь несколько «имен файлов» (из-за отсутствия лучшего описания), которые указывают на один и тот же индекс. Это работает, только если эти жесткие ссылки находятся в одной файловой системе. Вместо этого символическая ссылка указывает на «имя файла», которое затем связывается с индексом, содержащим ваши данные. Простите мою грубую работу, но, надеюсь, это объясняет лучше.
image.jpg image2.jpg
\ /
[your data]
Здесь, image.jpg и image2.jpg указывают непосредственно на ваши данные. Они оба жесткие ссылки. Тем не мение...
image.jpg <----------- image2.jpg
\
[your data]
В этом (сыром) примере image2.jpg не указывает на ваши данные, он указывает на image.jpg ... который является ссылкой на ваши данные.
Символические ссылки могут работать через границы файловой системы (при условии, что файловая система подключена и смонтирована, как ваша флешка). Однако жесткая ссылка не может. Он ничего не знает о том, что находится в вашей другой файловой системе или где хранятся ваши данные.
Надеюсь, это поможет лучше понять.
chroot(2)
реальной или контейнеризации вы можете иметь несколько иерархий, которые могут не иметь ничего общего друг с другом.chroot
изолирует часть иерархии для процесса и его потомков, но родительский элемент все еще имеет одну полную иерархию. Контейнерирование может сделать это, в зависимости от того, насколько близко это к виртуальной машине. Но сколько деталей можно добавить в комментарий? Спасибо,Файловая система состоит из структуры каталогов , составленной для записей каталога для организации файлов. Каждая запись каталога связывает имя файла с индексом .
Мягкие ссылки ( символические ) являются записями каталога, которые не содержат данных, они просто указывают на другую запись (файл или каталог в той же файловой системе или другой файловой системе). И когда вы удаляете указанный файл, символическая ссылка становится непригодной для использования.
Жесткие ссылки - это запись каталога, которая содержит имя файла и номер индекса . Когда вы удаляете последнюю жесткую ссылку, вы больше не можете получить доступ к файлу.
Вывод:
Поскольку индекс является структурой данных, используемой для представления объекта файловой системы, он является внутренним по отношению к файловой системе, и вы не можете указать на индекс другой файловой системы.
Таким образом, жесткие ссылки действительны только в пределах одной и той же файловой системы, но программные ссылки (символическая ссылка) могут охватывать файловые системы, поскольку они просто указывают на другую запись каталога (интерфейс файловой системы, а не внутренний объект).
источник
/mnt/myfile
. Если вы смонтируете другую файловую систему в/mnt/
. Мягкая ссылка будет разрешена для записи смонтированной файловой системы в/mnt/
. Таким образом, если вы смонтировали файловую систему с вашего USB-устройства/mnt
, программная ссылка разрешит запись в этой файловой системе.Корневая файловая система может состоять из нескольких файловых систем;
/usr/local
может быть смонтирован в отдельном разделе и/home
может находиться в другом разделе сетевого диска где-то еще. В этом случае жесткая ссылка/usr/local/bin/git
(например) не может быть создана вне/usr/local
, потому что она будет охватывать файловые системы .Причина этого заключается в том, что дескрипторы выделяются отдельно
/
,/usr/local
и/home
(опять же , в этом примере), а также при создании жесткой ссылки вы на самом деле просто сделать дополнительное имя для дескриптора.источник
Жесткие ссылки сохраняют свою цель живой. Пока любая жесткая ссылка достижима, система будет гарантировать, что ее цель не может быть освобождена. Поэтому необходимо, чтобы все носители, которые могли содержать жесткие ссылки на конкретный узел, были смонтированы в любое время, когда система будет пытаться определить, существуют ли какие-либо ссылки на него.
Принимая во внимание, что время жизни inode обычно определяется путем поддержания количества ссылок, а не сканирования ссылок, может быть возможно организовать вещи так, чтобы две или более файловых системы, которые содержали ссылки друг на друга, могли использоваться независимо при условии, что не было необходимости использовать ссылки, которые соединены между системами и при условии, что нет необходимости использовать fsck ни на одной из них. Однако, если подсчет числа узлов в одной из систем нарушен, единственный способ сделать эту систему снова полезной - это использовать форму операции fsck, которая может сканировать обе файловые системы на предмет ссылок. Из-за этого ограничения, хотя может быть возможно позволить использовать две взаимосвязанные файловые системы независимо друг от друга, выгоды от этого, вероятно, будут слишком ограничены, чтобы сделать это целесообразным.
источник
Один номер индекса используется для представления файла в каждой файловой системе. Все жесткие ссылки основаны на номере инода. Ссылка на файловую систему здесь .
источник