Ссылки NTFS

редактировать

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

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

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

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

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

Содержание
  • 1 История
  • 2 Ограничения и недостатки
    • 2.1 Несоединяемые файлы
  • 3 Примеры использования
    • 3.1 Встроенное использование
    • 3.2 Перенаправление программы
    • 3.3 Сохранение дисковое пространство
    • 3.4 Обход предопределенных путей
    • 3.5 Отложенные опасности отмены целевого объекта
  • 4 Инструменты командной строки и API-интерфейсы
    • 4.1 Удаление
    • 4.2 Перечень узлов
  • 5 Другие свойства
  • 6 Ограничения
  • 7 Поддержка символических ссылок в Windows XP
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки
История

Символические ссылки на каталоги или тома, называемые точками соединения и точки монтирования, были введены с 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.

Несоединяемые файлы

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

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

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

  • \Users
  • \ Documents and Settings
  • \ Program Files
  • \ Program Files (x86)

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

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

Создание соединений для" \ 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 \ Мои документы, который по-прежнему указывает на папку C: \ Users \ USERNAME \ Documents \в текущей активной установке.

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

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

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

X: \ Some \ Path>со ссылкой на 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
Разработчик (и) Microsoft, участники ReactOS
Первоначальный выпуск30 января 2007 г.; 13 лет назад (30.01.2007)
Операционная система Windows, ReactOS
Тип Команда
Лицензия Windows: Собственная коммерческое программное обеспечение. ReactOS: Стандартная общественная лицензия GNU
Веб-сайтdocs.microsoft.com / en-us / windows-server / Administration / windows-commands / mklink

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

. Синтаксис команды:

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

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

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

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

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

Удаление

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

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

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

Список соединений

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

Другие свойства

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

Ограничения

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

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

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

Тем не менее, перенаправление возможно:

  • \ Documents and Settings
  • \ProgramData
  • \ Program Files
  • \ Program Files (x86)
  • \ Users

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

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

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

Поддержка символических ссылок в Windows XP

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

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-31 07:27:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте