Из Википедии, бесплатной энциклопедии
  (Перенаправлено с символической ссылки NTFS )
Перейти к навигации Перейти к поиску

Файловая система NTFS определяет различные способы ссылки на файлы , то есть , чтобы сделать точку файла в другой файл или его содержание. Указанный объект называется целью. Есть три класса ссылок:

  • Жесткие ссылки , файлы которых имеют одну и ту же запись MFT ( индексный дескриптор ) в одной файловой системе.
  • Символические ссылки , которые записывают путь к другому файлу, который должно отображаться в содержимом ссылок. Может принимать относительные пути. Сеть SMB ( путь UNC ) и поддержка каталогов добавлены в NTFS 3.1.
  • Точки соединения , похожие на символические ссылки, но определенные только для каталогов. Принимает только локальные абсолютные пути. [1]

Все ссылки NTFS разработаны так, чтобы быть прозрачными для приложений. Это означает, что приложение, обращающееся к ссылке, будет легко перенаправлено драйвером файловой системы, и никакой специальной обработки не требуется. Для пользователей они отображаются как обычные каталоги или файлы. Это также приводит к эффекту псевдонима : запись в ссылку передает запись в базовый связанный файл или запись MFT.

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

Символьная ссылка NTFS - это не то же самое, что файл ярлыка Windows , который является обычным файлом. Последний может быть создан в любой файловой системе (например, в более ранней FAT32 ), может содержать метаданные (например, значок, отображаемый при просмотре ярлыка в проводнике Windows ) и непрозрачен для приложений.

История [ править ]

Символические ссылки на каталоги или тома, называемые точками соединения и точками монтирования, были введены с NTFS 3.0, поставляемой с Windows 2000. Начиная с NTFS 3.1, символические ссылки можно создавать для любого типа объекта файловой системы. NTFS 3.1 была представлена ​​вместе с Windows XP , но эта функциональность не была доступна (через ntfs.sys) для приложений пользовательского режима. Однако сторонние драйверы фильтров, такие как senableдрайвер с открытым исходным кодом Масатоши Кимуры, могут быть установлены, чтобы сделать эту функцию доступной и в пользовательском режиме. Ntfs.sys, выпущенный вместе с Windows Vista, по умолчанию сделал эту функциональность доступной для приложений пользовательского режима.

Начиная с NTFS 3.1, символическая ссылка также может указывать на файл или удаленный сетевой путь SMB . В то время как точки соединения NTFS поддерживают только абсолютные пути на локальных дисках, символические ссылки NTFS позволяют связываться с использованием относительных путей. Кроме того, реализация символической ссылки NTFS обеспечивает полную поддержку ссылок между файловыми системами. Однако функциональность, разрешающая символические ссылки между хостами, требует, чтобы удаленная система также поддерживала их, что фактически ограничивает их поддержку Windows Vista и более поздних операционных систем Windows.

Ограничения и недостатки [ править ]

Параметры безопасности по умолчанию в Windows Vista / Windows 7 запрещают администраторам без повышенных прав и всем неадминистраторам создавать символические ссылки, но не переходы. Это поведение можно изменить, запустив secpol.msc в консоли управления локальной политикой безопасности (в разделе: Параметры безопасности \ Локальные политики \ Назначение прав пользователя \ Создать символические ссылки). Это можно обойти, запустив cmd.exe с параметром « Запуск от имени администратора» или runasкомандой. Начиная с Windows 10 Insiders, сборка 14972, требование повышенных прав администратора было удалено в Windows «Режим разработчика», что позволяет создавать символические ссылки без необходимости повышать права консоли с правами администратора. На уровне API SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEдля этого предоставляется флаг.[2]

Несоединяемые файлы [ править ]

Ни процесс запуска Windows NT, ни процесс запуска Windows Vista не поддерживают точки соединения, поэтому невозможно перенаправить определенные системные папки:

  • \ Windows
  • \ Windows \ System32
  • \ Windows \ Config

Однако можно перенаправить некритические папки:

  • \ Пользователи
  • \Документы и настройки
  • \Файлы программ
  • \ Program файлы (x86)

Создание соединений для \ Users и \ ProgramData, указывающих на другой диск, не рекомендуется, поскольку это нарушает обновления и приложения Магазина Windows. [3]

Создание соединений для \ Users, \ ProgramData, "\ Program Files" или "\ Program Files (x86)", указывающих на другие места, прерывает установку или обновление Windows. [4]

Создание соединений для «\ Program Files» или «\ Program Files (x86)», указывающих на другой диск, нарушает компонентное обслуживание Windows, которое жестко связывает файлы из своего репозитория \ Windows \ SxS с их установочным каталогом. [ необходима цитата ]

Примеры использования [ править ]

Встроенное использование [ править ]

  • Магазин компонентов Windows ( WinSxS ) использует жесткие ссылки для отслеживания различных версий библиотек DLL, хранящихся на жестком диске.
  • Символьные ссылки есть в Windows Server 2008 для \Users\All Users\ -> \ProgramData\перенаправления (при базовой установке).

Перенаправление программы [ править ]

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

Экономия места на диске [ править ]

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

Точно так же символические ссылки и жесткие ссылки полезны для объединения содержимого отдельных файлов.

Обход предопределенных путей [ править ]

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

Опасности отмены отложенной целевой [ править ]

Существенные опасности таятся в использовании схем жестких ссылок, которые либо:

  • включает в себя ссылку , которые ссылаются на свои родительские папки, например, создание жесткой ссылки , X:\path\to\parentкоторая указует либо X:\path\или X:\path\to\, или
  • укажите цели с помощью букв дисков томов, например X:, в X:\some\path\.

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

Обратите внимание, что оба перечисленных выше условия существуют в системе жестких ссылок, установленных на C:диске при установке Windows по умолчанию. Например, каждая установка Windows 10 определяет рекурсивный путь:

C: \ ProgramData \C: \ ProgramData \ Application Data \C: \ ProgramData \ Application Data \ Application Data \C: \ ProgramData \ Application Data \ Application Data \ Application Data \C: \ ProgramData \ Application Data \ Application Data \ Application Data \ Application Data \C: \ ProgramData \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ ...

Каждый дополнительный путь в этом, казалось бы, бесконечном наборе - это действительный путь Windows, который относится к тому же месту. На практике имена путей ограничиваются 260-символьным пределом пути DOS (или более новым 32 767-символьным ограничением), но усечение может привести к неполному или неправильному пути и именам файлов. Всякий раз, когда копия установки Windows архивируется с неповрежденными соединениями каталогов на другой том на том же или, что еще хуже, другом компьютере, архивная копия может по-прежнему включать в себя активные папки из запущенной установки. Например, в зависимости от метода копирования, резервная копия диска Windows X:\archive\...будет включать жесткую ссылку, X:\archive\Users\USERNAME\My Documentsкоторая по-прежнему указывает на папку C:\Users\USERNAME\Documents\в текущей активной установке.

Вторая форма отложенного целевого неверного направления, хотя концептуально проще, может иметь более серьезные последствия. Когда самосогласованный том или структура каталогов, содержащая жесткие ссылки, в которых используются имена путей с буквами дисков, копируются или перемещаются на другой том (или когда буква диска тома переназначается каким-либо другим способом), такие ссылки могут больше не указывать к соответствующей цели в скопированной структуре . И снова результаты зависят от программного обеспечения, которое использовалось для копирования; в то время как некоторые программы могут вмешиваться, изменяя любые полностью включенные жесткие ссылки в копии, чтобы сохранить структурную согласованность, другие могут игнорировать, точно копировать или даже переходить по жестким ссылкам, копируя их содержимое.

Серьезные проблемы возникают, если жесткие ссылки копируются точно так, что в новой копии они становятся жесткими ссылками между томами, которые по-прежнему указывают на исходные файлы и папки на исходном томе. Непреднамеренные жесткие ссылки между томами, такие как жесткие ссылки в папке «архива», которые по-прежнему указывают на места на исходном томе (в соответствии с буквой диска), являются катастрофами, ожидающими своего часа. Например, удаление того, что намного позже будет считаться неиспользуемым каталогом архива на неиспользуемом резервном томе, может привести к удалению текущих, активных данных пользователя или системных файлов.

Профилактическая мера для опасности буквы диска заключается в использовании синтаксиса пути GUID тома [5] вместо путей, содержащих буквы дисков тома, при указании целевого пути для соединения каталогов. Например, рассмотрите возможность создания псевдонима для X:\Some\Other\Pathat X:\Some\Path\Foo:

X:\Some\Path>linkd Foo X:\Some\Other\Path

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

X:\Some\Path>linkd Foo \\?\Volume{12345678-abcd-1234--abcdefghijkl}\Some\Other\Path

Это гарантирует, что соединение останется действительным, если буква диска X:будет изменена любым способом.

Что касается упреждающих средств предотвращения сбоев соединения каталогов, команда dir /AL /S /B "X:\Some\Path"может использоваться для получения, для тщательного анализа перед совершением каких-либо необратимых изменений файловой системы, списка всех жестких ссылок "ниже" определенного местоположения файловой системы. Хотя по определению каждая ссылка в результирующем списке имеет имя пути, которое начинается с X:\Some\Path\, если какая-либо из этих жестких ссылок содержит цель, которая не входит в категорию X:\Some\Path, то указанная область была экранирована, а начальный каталог, который вы указали, не полностью - поголовье. В этом случае могут быть указаны дополнительные меры предосторожности, поскольку указанный каталог включает файлы и каталоги, которые находятся на других физических томах или чей собственный родительский переход к корневому каталогу не включает указанный каталог.

Инструменты командной строки и API [ править ]

Команда mklinkиспользуется для создания символической ссылки. Это встроенная команда cmd.exeв Windows Vista и более поздних версиях. [6] Команда также доступна в ReactOS . [7]

Командный синтаксис:

mklink [[/ d] | [/ ч] | [/ j]] <Ссылка> <Цель>
  • /d- Этот параметр создает символическую ссылку на каталог. mklink по умолчанию создает символическую ссылку на файл.
  • /h - Этот параметр создает жесткую ссылку вместо символьной ссылки.
  • /j - Этот параметр создает соединение каталогов.
  • <Link> - Этот параметр указывает имя создаваемой символической ссылки.
  • <Target> - Этот параметр указывает путь, на который ссылается новая символическая ссылка.
  • /? - Этот параметр отображает справку.

В комплекты ресурсов Windows 2000 и Windows 2003 входит программа под названием linkd для создания точек соединения. [8] В Windows XP утилита Марка Руссиновича способна работать с точками повторной обработки , теперь она предлагается Microsoft как часть пакета Sysinternals .junction

Windows предоставляет функцию CreateSymbolicLink в своем API, начиная с Windows Vista. New-SymLinkфункция использует вышеупомянутый API для реализации функциональности программных ссылок с помощью PowerShell . Расширения сообщества также содержат функцию New-SymLink.

Для жестких ссылок в Win32 API есть аналогичная функция CreateHardLink . Все версии Windows NT могут использовать GetFileInformationByHandle()для определения количества жестких ссылок, связанных с файлом. С записью MFT может быть связано до 1024 ссылок. [9]

Соединения сложнее создать. Они требуют ручного заполнения информации о точках повторной обработки. [10] Пример кода находится в libuv . [11] Соединения определены только для каталогов: хотя API не дает сбоев при создании соединения, указывающего на файл, соединение не будет успешно интерпретировано при использовании позже.

Удаление [ править ]

Во всех поддерживающих их версиях Windows жесткие и символические ссылки можно безопасно удалить, как и обычные файлы. Однако при запросе на удаление перекрестка проводник Windows до Windows Vista проследит за каталогом и удалит все его содержимое вместе с ним.

Чтобы правильно удалить только соединение , можно использовать rmdirкоманду в CMD из Windows Vista или новее. В качестве альтернативы можно использовать fsutil reparsepoint deleteкоманду в fsutil. [12] В Windows PowerShell была аналогичная проблема с соединениями. [13]

На уровне API соединения и символические ссылки, даже указывающие на каталоги, могут быть удалены с помощью pNtSetInformationFile. Реализация Libuv для unlinkWindows демонстрирует это использование. [14] В качестве альтернативы, с System.IO.Directory::Deleteними также работает метод .NET . [13]

Список перекрестков [ править ]

Список всех соединений, присутствующих в текущем каталоге, можно получить из командной строки с повышенными привилегиями в качестве администратора, выполнив dir /aL, а список всех соединений, присутствующих на томе диска, выполнив dir /aL /s C:\, где «C:» - это том для сканирования. .

Другие свойства [ править ]

Символические ссылки могут указывать на несуществующие цели, потому что операционная система не проверяет, существует ли цель. [15]

Ограничения [ править ]

Символьные ссылки не работают при загрузке, поэтому их невозможно перенаправить, например:

  • hiberfil.sys
  • \ Windows
  • \ Windows \ system32
  • \ Windows \ system32 \ Config

Установщик Windows не полностью поддерживает символические ссылки. Перенаправленный \ Windows \ Installer приведет к сбою большинства установщиков Windows на основе .msi с ошибкой 2755 и / или ошибкой 1632.

Тем не менее перенаправить можно:

  • \Документы и настройки
  • \Данные программы
  • \Файлы программ
  • \ Program файлы (x86)
  • \ Пользователи

Создание символических ссылок для \ Users и \ ProgramData, указывающих на другой диск, не рекомендуется, поскольку это нарушает обновления и приложения Магазина Windows. [16]

Создание символических ссылок для \ Users, \ ProgramData, "\ Program Files" или "\ Program Files (x86)", указывающих на другие места, прерывает установку, соответственно. апгрейд винды. [17]

Создание символических ссылок для «\ Program Files» или «\ Program Files (x86)», указывающих на другой диск, нарушает компонентное обслуживание Windows, которое жестко связывает файлы из своего репозитория \ Windows \ WinSxS с их установочным каталогом.

Поддержка символических ссылок в Windows XP [ править ]

Поскольку Windows XP использует ту же версию формата NTFS, что и более поздние выпуски, возможно включить в ней поддержку символических ссылок. Для использования символических ссылок NTFS в Windows 2000 и XP существует драйвер стороннего производителя, который устанавливает себя как фильтр файловой системы. [18] [19]

См. Также [ править ]

  • Точка монтирования тома NTFS
  • Точка повторной обработки NTFS
  • Символическая ссылка
  • Ярлык файла

Ссылки [ править ]

  1. ^ Цитата: «Обратите внимание, что Windows не поддерживает соединения с каталогами на удаленных общих ресурсах». Документация по Sysinternals Junction [1]
  2. ^ «Символические ссылки в Windows 10! - Блог разработчиков WindowsБлог разработчиков Windows» . blogs.windows.com .
  3. ^ «Перемещение каталога Users и каталога ProgramData на диск, отличный от диска, который содержит каталог Windows» . Проверено 12 марта 2015 .
  4. ^ «Вы столкнулись с ошибкой при попытке установить Windows 8.1 из-за перенаправления папки Users или Program Files в другой раздел» . Проверено 12 марта 2015 .
  5. ^ https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths
  6. ^ Архивные документы. «Мклинк» . technet.microsoft.com .
  7. ^ reactos / mklink.c на главном сервере · reactos / reactos · GitHub
  8. ^ База знаний Microsoft, 2007-02-20, Как создавать точки соединения NTFS и управлять ими, http://support.microsoft.com/kb/205524/en-us , http://www.microsoft.com/en- us / download / details.aspx? id = 17657
  9. ^ «MSDN - функция CreateHardLink» . Проверено 14 января +2016 .
  10. ^ «Ссылки NTFS, соединения каталогов и ярлыки Windows» . www.flexhex.com . Проверено 4 октября 2019 года .
  11. ^ "libuv / src / win / fs.c" . GitHub . Проверено 12 декабря 2019 .
  12. ^ «Как удалить соединение с помощью командной строки в Windows 7»
  13. ^ a b «PowerShell Remove Junction» . StackOverflow . Проверено 12 декабря 2019 .
  14. ^ "libuv / src / win / fs.c fs__unlink" . GitHub . Проверено 12 декабря 2019 .
  15. ^ «Соображения по программированию (Windows)» . msdn.microsoft.com .
  16. ^ «Перемещение каталога Users и каталога ProgramData на диск, отличный от диска, который содержит каталог Windows» . Проверено 12 марта 2015 .
  17. ^ «Вы столкнулись с ошибкой при попытке установить Windows 8.1 из-за перенаправления папки Users или Program Files в другой раздел» . Проверено 12 марта 2015 .
  18. ^ Hermann Schinagl (23 августа 2013). «ln - жесткие ссылки командной строки - символические ссылки для Windows XP» .
  19. ^ リ ン ク / ジ ャ ン ク シ ョ ン 作成 ツ ー ル

Внешние ссылки [ править ]

  • Документация по символическим ссылкам NTFS в MSDN
  • Функция CreateSymbolicLink в Win32 API
  • fsutil hardlink create - создает жесткую ссылку ( Windows 2000 и новее)
  • Статья базы знаний Майкрософт - «Как создавать точки соединения NTFS и управлять ими» ( заархивированная версия )
  • Утилита командной строки Junction от Microsoft TechNet
  • Статья Codeproject - обсуждение исходного кода утилиты junction point, предназначенная для программистов.
  • PC Mag Статья о добавлении любого каталога в меню «Пуск» (с возможностью предварительного просмотра в меню «Пуск» в виде подменю).