Жесткая ссылка
В вычислительной технике жесткая ссылка — это запись каталога (в каталога на основе файловой системе ), которая связывает имя с файлом . Таким образом, каждый файл должен иметь хотя бы одну жесткую ссылку. Создание дополнительных жестких ссылок для файла делает содержимое этого файла доступным по дополнительным путям (т. е. по другим именам или в разных каталогах). [ 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
.)
Может быть создано любое количество жестких ссылок на физические данные. Для доступа к данным пользователю достаточно указать имя любой существующей ссылки; операционная система определит местоположение фактических данных. Даже если пользователь удалит одну из жестких ссылок, данные по-прежнему будут доступны по любой другой оставшейся ссылке. Как только пользователь удаляет все ссылки и файл не открыт ни в одном процессе, операционная система освобождает дисковое пространство, которое когда-то занимал файл.
Подсчет ссылок
[ редактировать ]Большинство файловых систем , поддерживающих жесткие ссылки, используют подсчет ссылок . Система сохраняет целочисленное значение для каждого раздела логических данных , которое представляет общее количество жестких ссылок, созданных для указания на данные. При создании новой ссылки это значение увеличивается на единицу. При удалении ссылки значение уменьшается на единицу. Когда счетчик становится нулевым, операционная система освобождает логический раздел данных. (Операционная система может не сделать это немедленно, например, когда есть открытые дескрипторы файлов, из соображений производительности или для включения команды восстановления .)
Это простой метод файловой системы отслеживать использование определенной области памяти, поскольку нулевые значения указывают на свободное пространство, а ненулевые значения указывают на использованное пространство. Поддержание этого значения гарантирует отсутствие висящих жестких ссылок, указывающих в никуда. Раздел данных и связанный индексный дескриптор сохраняются до тех пор, пока на него указывает одна жесткая ссылка (ссылка на каталог) или пока какой-либо процесс сохраняет связанный файл открытым.
В 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, конечные пользователи могут использовать:
- The
fsutil
утилита (введенная в Windows 2000 ) [ 11 ] - The
mklink
внутренняя команда командной строки Windows (введена в Windows Vista и Windows Server 2008 ) [ 12 ] - The
New-Item
командлет PowerShell [ 13 ]
Чтобы запросить файл на наличие жестких ссылок, конечные пользователи могут использовать:
- The
fsutil
полезность [ 11 ] - The
Get-Item
иGet-ChildItem
командлеты PowerShell. Эти командлеты представляют каждый файл с объектом; PowerShell добавляет к каждому из них свойство LinkType, доступное только для чтения. Это свойство содержит "HardLink
"строка, если связанный файл имеет несколько жестких ссылок. [ 14 ]
Хранилище компонентов Windows использует жесткие ссылки для отслеживания различных версий компонентов, хранящихся на жестком диске.
В Unix-подобных системах link()
системный вызов может создавать дополнительные жесткие ссылки на существующие файлы. Для создания жестких ссылок конечные пользователи могут использовать:
Чтобы запросить файл на наличие жестких ссылок, конечные пользователи могут использовать:
- The
stat
команда - The
ls -l
команда - The
Get-Item
иGet-ChildItem
командлеты PowerShell (см. выше) [ 14 ]
Unix-подобное программное обеспечение эмуляции или совместимости, работающее в Microsoft Windows, такое как Cygwin и Subsystem for UNIX-приложения , позволяет использовать интерфейсы POSIX.
OpenVMS поддерживает жесткие ссылки в файловой системе ODS-5 . [ 15 ] В отличие от Unix, VMS может создавать жесткие ссылки на каталоги.
См. также
[ редактировать ]- Символическая ссылка : указывает на жесткую ссылку, а не на сами данные файла; следовательно, он работает с томами и файловыми системами.
- Ссылки NTFS : подробно описаны четыре типа ссылок, которые поддерживает NTFS: жесткие ссылки, символические ссылки, точки соединения и точки подключения тома.
- Ярлык : небольшой файл, указывающий на другой файл в локальном или удаленном расположении.
- свободный -
freedup
команда освобождает дисковое пространство, заменяя дублирующиеся хранилища данных автоматически сгенерированными жесткими ссылками.
Ссылки
[ редактировать ]- ^ Питчер, Лью. «Вопросы и ответы: Разница между жесткими и мягкими ссылками» .
- ^ «Расширение оболочки ссылки» .
- ^ «Обзор отказоустойчивой файловой системы (ReFS)» . Microsoft Learn . 26 октября 2022 г. – через Microsoft Docs .
- ^ Бах, Морис Дж. (1986). Проект операционной системы UNIX . Прентис Холл. п. 128. ИСБН 9780132017992 .
- ^ Понд, Джеймс (31 августа 2013 г.). «Как машина времени творит чудеса» . Хранилище событий файловой системы, жесткие ссылки. Архивировано из оригинала 21 июня 2019 года . Проверено 19 мая 2019 г.
- ^ «Дерево исходного кода ядра Linux, fs/ext4/ext4.h, строка 229» .
- ^ «Функция CreateHardLinkA (winbase.h)» . Разработка приложений для Windows . 13 октября 2021 г. — через Microsoft Docs .
- ^ Браун, Нил (23 ноября 2010 г.). «Призраки прошлого Unix, часть 4: Проекты, требующие сложного обслуживания» . Еженедельные новости Linux . Проверено 20 апреля 2014 г.
- ^ «Как работают жесткие ссылки» . Документы Майкрософт . 6 января 2011 г.
- ^ «Создать функцию HardLink» . Разработка Windows . Майкрософт . 10 марта 2011 г. Архивировано из оригинала 2 июля 2011 г. - через MSDN .
Устанавливает жесткую связь между существующим файлом и новым файлом. Эта функция поддерживается только в файловой системе NTFS и только для файлов, а не каталогов.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Jump up to: а б «Жёсткая ссылка Fsutil» . Разработка приложений для Windows . Майкрософт . 18 апреля 2012 г. – через Microsoft Docs.
- ^ «Мклинк» . Документы Майкрософт . Майкрософт . 18 апреля 2012 г.
- ^ Jump up to: а б «Новый элемент (PowerShell 3.0)» . Документы Майкрософт . Майкрософт . 22 июня 2020 г.
Если ваше расположение находится на диске файловой системы, разрешены следующие значения: Если ваше расположение находится на диске файловой системы, разрешены следующие значения: File[,] Directory[,] Junction[,] HardLink
- ^ Jump up to: а б «ФайлСистемПровидер.cs» . PowerShell/репозиторий PowerShell . Майкрософт . 20 ноября 2021 г. Строки 8139–8234 — через GitHub .
- ^ «Руководство системного менеджера OpenVMS, Том I» (PDF) . ВСИ. Август 2019 года . Проверено 23 января 2021 г.