stringtranslate.com

Жесткая ссылка

В вычислительной технике жесткая ссылка — это запись каталогафайловой системе на основе каталогов ), которая связывает имя с файлом . Таким образом, каждый файл должен иметь по крайней мере одну жесткую ссылку. Создание дополнительных жестких ссылок для файла делает содержимое этого файла доступным через дополнительные пути (т. е. через другие имена или в других каталогах). [1] Это вызывает эффект псевдонима : процесс может открыть файл по любому из его путей и изменить его содержимое. Напротив, мягкая ссылка или «ярлык» на файл — это не прямая ссылка на сами данные, а скорее ссылка на жесткую ссылку или другую мягкую ссылку.

Каждый каталог сам по себе является специальным файлом во многих системах, содержащим список имен файлов вместо других данных. Следовательно, возможны множественные жесткие ссылки на каталоги, которые могут создать кольцевую структуру каталогов, а не разветвленную структуру, как дерево . По этой причине некоторые файловые системы запрещают создание дополнительных жестких ссылок на каталоги.

Операционные системы , совместимые с POSIX , такие как Linux , Android , macOS и семейство Windows NT , [2] поддерживают несколько жестких ссылок на один и тот же файл в зависимости от файловой системы. Например, NTFS и ReFS поддерживают жесткие ссылки, [3] а FAT — нет.

Операция

Иллюстрация концепции жесткой ссылки

Пусть две жесткие ссылки, названные "LINK A.TXT" и "LINK B.TXT", указывают на одни и те же физические данные. Текстовый редактор открывает "LINK A.TXT", изменяет его и сохраняет. Когда редактор (или любое другое приложение) открывает "LINK B.TXT", он может видеть эти изменения, внесенные в "LINK A.TXT", поскольку оба имени файла указывают на одни и те же данные. Так что с точки зрения пользователя это один файл с несколькими именами файлов. Редактирование любого имени файла изменяет "все" файлы, однако удаление "любого" имени файла, кроме последнего, сохраняет файл.

Однако некоторые редакторы, такие как GNU Emacs , нарушают концепцию жесткой ссылки. При открытии файла для редактирования, например, "LINK B.TXT", emacs переименовывает "LINK B.TXT" в "LINK B.TXT~", загружает "LINK B.TXT~" в редактор и сохраняет измененное содержимое в недавно созданный "LINK B.TXT". Теперь "LINK A.TXT" и "LINK B.TXT" больше не используют одни и те же данные. (Это поведение можно изменить с помощью переменной emacs backup-by-copying.)

Может быть создано любое количество жестких ссылок на физические данные. Чтобы получить доступ к данным, пользователю нужно только указать имя любой существующей ссылки; операционная система определит местоположение фактических данных. Даже если пользователь удалит одну из жестких ссылок, данные по-прежнему будут доступны через любую другую оставшуюся ссылку. После того, как пользователь удалит все ссылки, если ни один процесс не открыл файл, операционная система освободит дисковое пространство, которое когда-то занимал файл.

Подсчет ссылок

Упрощенная иллюстрация жестких ссылок на типичной файловой системе Unix. Обратите внимание, что файлы "A" и "D" указывают на одну и ту же запись индекса в таблице инодов файловой системы , что делает ее счетчик ссылок равным 2.

Большинство файловых систем , поддерживающих жесткие ссылки, используют подсчет ссылок . Система хранит целочисленное значение с каждым логическим разделом данных , которое представляет собой общее количество жестких ссылок, созданных для указания на данные. При создании новой ссылки это значение увеличивается на единицу. При удалении ссылки значение уменьшается на единицу. Когда счетчик становится равным нулю, операционная система освобождает логический раздел данных. (ОС может не сделать этого немедленно, например, когда открыты необработанные дескрипторы файлов, по соображениям производительности или для включения команды восстановления .)

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

В операционных системах, совместимых с POSIX , количество ссылок на файл или каталог возвращается системными вызовами stat() или fstat() в st_nlinkполе struct stat.

Ограничения

Чтобы предотвратить зацикливание в файловой системе и сохранить единообразие интерпретации файла " " ..(родительского каталога), операционные системы обычно не допускают жестких ссылок на каталоги. UNIX System V допускает их, но только суперпользователь имеет право создавать такие ссылки. [4] Mac OS X v10.5 (Leopard) и более новые версии используют жесткие ссылки на каталоги только для механизма резервного копирования Time Machine . [5]

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

Максимальное количество жестких ссылок на один файл ограничено размером счетчика ссылок. В Unix-подобных системах счетчик равен 4 294 967 295 (на 32-разрядных машинах) или 18 446 744 073 709 551 615 (на 64-разрядных машинах). В некоторых файловых системах количество жестких ссылок ограничено более строго их форматом на диске. Например, начиная с Linux 3.11, файловая система ext4 ограничивает количество жестких ссылок на файл до 65 000. [6] Ограничения Windows устанавливают ограничение в 1024 жестких ссылок на файл на томах NTFS . [7]

В Linux Weekly News Нил Браун критиковал жесткие ссылки как требующие большого обслуживания, поскольку они усложняют разработку программ, обрабатывающих деревья каталогов, включая архиваторы и инструменты использования диска. Эти приложения должны заботиться об удалении дубликатов файлов, которые связаны несколько раз в иерархии . Браун отмечает, что Plan 9 от Bell Labs , предполагаемый преемник Unix, не включает концепцию жесткой ссылки. [8]

Поддержка платформы

Windows NT 3.1 и более поздние версии поддерживают жесткие ссылки в файловой системе NTFS . [9] Windows 2000 представляет CreateHardLink()функцию создания жестких ссылок, но только для файлов, а не для каталогов. [10] Функция DeleteFile()может их удалять.

Чтобы создать жесткую ссылку в Windows, конечные пользователи могут использовать:

Чтобы проверить файл на наличие жестких ссылок, конечные пользователи могут использовать:

Хранилище компонентов Windows использует жесткие ссылки для отслеживания различных версий компонентов, хранящихся на жестком диске.

В Unix-подобных системах link() системный вызов может создавать дополнительные жесткие ссылки на существующие файлы. Для создания жестких ссылок конечные пользователи могут использовать:

Чтобы проверить файл на наличие жестких ссылок, конечные пользователи могут использовать:

Программное обеспечение для эмуляции или совместимости Unix-подобных систем, работающее в Microsoft Windows, например Cygwin и Subsystem for UNIX-based Applications , позволяет использовать интерфейсы POSIX.

OpenVMS поддерживает жесткие ссылки в файловой системе ODS-5 . [15] В отличие от Unix, VMS может создавать жесткие ссылки на каталоги.

Смотрите также

Ссылки

  1. ^ Питчер, Лью. «Вопросы и ответы: Разница между жесткими и мягкими ссылками».
  2. ^ «Расширение оболочки ссылки».
  3. ^ "Обзор Resilient File System (ReFS)". Microsoft Learn . 26 октября 2022 г. – через Microsoft Docs .
  4. ^ Бах, Морис Дж. (1986). Проектирование операционной системы UNIX . Prentice Hall. стр. 128. ISBN 9780132017992.
  5. Понд, Джеймс (31 августа 2013 г.). «Как Time Machine Works its Magic». Хранилище событий файловой системы, жесткие ссылки. Архивировано из оригинала 21 июня 2019 г. Получено 19 мая 2019 г.
  6. ^ "Исходное дерево ядра Linux, fs/ext4/ext4.h, строка 229".
  7. ^ "Функция CreateHardLinkA (winbase.h)". Разработка приложений для Windows . 13 октября 2021 г. – через Microsoft Docs .
  8. ^ Браун, Нил (23 ноября 2010 г.). «Призраки прошлого Unix, часть 4: Проекты с высокой степенью обслуживания». Linux Weekly News . Получено 20 апреля 2014 г.
  9. ^ "Как работают жесткие ссылки". Microsoft Docs . 6 января 2011 г.
  10. ^ "CreateHardLink Function". Windows Development . Microsoft . 10 марта 2011 г. Архивировано из оригинала 2 июля 2011 г. – через MSDN . Устанавливает жесткую ссылку между существующим файлом и новым файлом. Эта функция поддерживается только в файловой системе NTFS и только для файлов, а не для каталогов.{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  11. ^ ab "Fsutil hardlink". Разработка приложений для Windows . Microsoft . 18 апреля 2012 г. – через Microsoft Docs.
  12. ^ "Mklink". Microsoft Docs . Microsoft . 18 апреля 2012 г.
  13. ^ ab "New-Item (PowerShell 3.0)". Microsoft Docs . Microsoft . 22 июня 2020 г. Если ваше местоположение находится на диске FileSystem, допускаются следующие значения: Если ваше местоположение находится на диске FileSystem, допускаются следующие значения: File[,] Directory[,] Junction[,] HardLink
  14. ^ ab "FileSystemProvider.cs". PowerShell / PowerShell repo . Microsoft . 20 ноября 2021 г. Строки 8139–8234 – через GitHub .
  15. ^ "OpenVMS System Manager's Manual, Vol. I" (PDF) . VSI. Август 2019 . Получено 2021-01-23 .