Создание ссылок файловой системы

В прошлой записи я описал что такое ссылки файловой системы и как они работают. Сейчас поговорим об их создании и использовании.

В операционной системе для управления файловыми ссылками присутствуют встроенные fsutil и mklink.

Инструмент fsutil предоставляет доступ к различным функциям файловой системы, создание ссылок это лишь малая часть его функционала. Он позволяет создавать только жесткие ссылки (hardlink) и требует наличие прав администратора у пользователя. Но зато появился в операционной системе начиная с версии Windows XP.

Файловые ссылки с помощью fsutil создаются выполнением команды:

fsutil hardlink create <имя новой ссылки> <имя файла>

Где:

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

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

В операционной системе Windows Vista была добавлена утилита mklink для создания файловых ссылок. Для её использования не требуются права администратора. Также mklink позволяет создавать символические ссылки (symlinks), которые могут связывать файлы на разных дисках, а также применимы к папкам.

Команда mklink вызывается следующим образом:

mklink [[/d] | [/h] | [/j]] <имя новой ссылки> <имя файла>

Где:

При использовании mklink можно использовать один из следующих флагов:

  • /d — создание символической ссылки на папку с возможностью использование относительного пути
  • /h — создание жесткой ссылки
  • /j — создание точки соединения

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

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

Рассмотрим простой пример использования. Допустим имеется программа, которая сохраняет информацию строго в указанном месте, например по адресу «C:\Program Files\Program\Data». Разработчик прописал этот путь в коде программы, поэтому нет возможности его изменить. Но может возникнуть ситуация, когда на диске C: не хватит свободного места для сохранения очередного файла данной программой, хотя на компьютере могут быть другие свободные диски, например D:. Использование символической ссылки легко может решить эту проблему.

Для начала выберем новое путь для хранения данных. Например «D:\Data». Для этого на диске D: создадим папку с именем Data и перенесем в нее содержание нашей папки. Можно просто скопировать папку «C:\Program Files\Program\Data» на диск D:. Таким образом мы перенесли все данные по новому пути «D:\Data». Но программа пока об этом не знает. Так как путь «C:\Program Files\Program\Data» прописан в коде программы, то сообщить мы ей об этом не сможем. Но ведь нам требуется как-то перенаправить работу программы по пути «D:\Data». Для этого удалим папку «C:\Program Files\Program\Data» и создадим вместо нее символическую ссылку на папку «D:\Data». Для создание такой ссылки выполним команду:

mklink /d D:\Data "C:\Program Files\Program\Data"

Этим мы перенаправили путь «C:\Program Files\Program\Data» по пути «D:\Data». Теперь при переходе в «папку» по старому адресу на диске C: отображается содержание папки «D:\Data». Программа по-прежнему будет использовать старый путь для сохранения данных, но фактически они будут хранится по новому пути на диске D:.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *