Жесткие и символические ссылки давно знакомы и активно используются Linux-администраторами, в то время как их Windows коллеги используют их гораздо реже, а некоторые вообще не знают о такой возможности. Тем не менее такая возможность в Windows существует и позволяет значительно упростить некоторые сценарии работы с папками и файлами. В данной статье мы рассмотрим все виды ссылок, доступные в среде ОС Windows, а также разные способы работы с ними, начиная от командной строки и заканчивая PowerShell.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Жесткие ссылки (HardLink)
Жесткие ссылки представляют собой дополнительную запись в файловой таблице раздела для существующего файла. Таким образом жесткая ссылка ничем не отличается от исходного файла, но файл при этом не копируется физически и остается на диске в единственном экземпляре. При изменении файла по любой из жестких ссылок, остальные обновляются автоматически (что логично, так как файл один).
Мы можем переименовывать, копировать, перемещать (в пределах логического тома) ссылки — размер занимаемого места при этом не изменится. При удалении ссылок файл продолжает существовать до тех пор, пока не будет удалена последняя жесткая ссылка на него. Фактически отличить, где находится оригинальный файл, а где жесткая ссылка невозможно, по сути, файл на разделе это и есть жесткая ссылка.
Жесткая ссылка может существовать только в пределах логического тома, поддерживается файловыми системами NTFS и ReFS начиная со сборки 19536.
Для создания жесткой ссылки можно воспользоваться утилитой mklink:
mklink /H C:\Folder1\LinkFileName C:\Folder\FileName
Где ключ /H предписывает создать именно жесткую ссылку, далее следует путь к новому файлу и целевому файлу, на который мы делаем ссылку. Путь можно указывать как абсолютные, так и относительные, в имени создаваемого файла не забывайте указывать расширение.
Ссылки можно создавать и при помощи PowerShell, для этого воспользуйтесь командой:
New-Item -ItemType HardLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName
Команда другая, но принцип тот же самый: -ItemType — тип создаваемой ссылки, в нашем случае жесткая ссылка, -Path — путь к создаваемому файлу ссылки, -Target — файл на который мы делаем ссылку.
Можно ли сделать жесткую ссылку на директорию? Нет, только на файлы.
Вроде бы все понятно, но если внимательный читатель заглянет в свойства папки с жесткой ссылкой, то он увидит, что ее размер равен исходному файлу, если сделаем в ней еще одну жесткую ссылку — двум исходным файлам. Как так? Не стоит переживать, все нормально. Для операционной системы жесткая ссылка ничем не отличается от обычного файла и при подсчете свободного места учитывается размер каждой ссылки, но на самом деле на диске хранится единственная копия. В этом можно убедиться, если одновременно с созданием жестких ссылок контролировать свободное место на диске.
При желании мы можем провернуть даже такой фокус:
Какой вывод можно сделать из того, что мы увидели и где нам могут пригодиться жесткие ссылки? Прежде всего для предоставления пользователям доступа к объемным архивам, образам или инсталляционным пакетам. Скажем у вас есть файловый сервер и несколько отделов, каждому из которых нужно предоставить доступ к одному и тому же большому файлу. При этом вы можете не бояться, что кто-то удалит файл, он удалит его только у себя в директории, для остальных пользователей он останется доступен.
Но при этом надо очень внимательно относиться к вопросу одновременного редактирования файла, так как он существует в единственном экземпляре, но доступен по множеству ссылок в этом сценарии могут возникнуть самые разные коллизии.
Точки соединения (Junction)
Очень старая технология, поддерживаемая еще начиная с Windows 2000, позволяет сделать один из каталогов псевдонимом другого каталога. Чем-то напоминает символические ссылки, но в крайне упрощенном варианте. В качестве цели можно использовать только локальные папки, но при этом нет ограничения по размещению их на одном томе. Т.е. целевая папка может находиться на диске C:, а точка соединения для нее на диске D: и все будет работать. Точки соединения поддерживаются файловыми системами NTFS и ReFS.
Для создания точки соединения можно использовать mklink:
mklink /J D:\LinkFolder C:\Folder
Ключ /J указывает на создание точки соединения, далее следует папка каталога-псевдонима и папка целевого каталога. При любом изменении целевого каталога (перемещение, переименование, удаление) точка соединения перестает работать.
Обратите внимание, что данная папка в проводнике отображается как ярлык, а выводе команды dir как точка соединения.
Это же действие в PowerShell:
New-Item -ItemType Junction -Path D:\LinkFolder -Target C:\Folder
Комментировать здесь особо нечего, краткость не входит в число добродетелей PowerShell, но не оставляет места догадкам, все просто и понятно.
Зачем сейчас нужны точки соединения? После появления в NT 6.0 настоящих символических ссылок не нужны, но вы можете встретиться с ними как в устаревших системах, так и в современных, где они могут присутствовать в виде наследия. Поэтому знать о них и уметь с ними работать современному администратору надо.
Символические ссылки (SymbolicLink)
Пожалуй, самый популярный вид связи, позволяет создавать множество псевдонимов для файлов или каталогов размещая их на любых поддерживаемых локальных файловых системах. В качестве цели могут быть использованы как локальные, так и сетевые объекты. При создании символической ссылки можно использовать как абсолютные, так и относительные пути. Но в последнем случае вы не можете перемещать ссылку — она перестанет работать. Символические ссылки поддерживаются начиная с NT 6.0 (Vista и Server 2008) и работают с файловыми системами NTFS и ReFS.
Для создания символических ссылок можно использовать mklink, без параметров она создает симлинк для файла:
mklink C:\Folder1\LinkFileName C:\Folder\FileName
При создании ссылки не забываем указать расширения для файла. Как и в случае с точкой соединения символическая ссылка отображается в виде ярлыка и обозначается в выводе команды dir:
Для создания символической ссылки на директорию добавьте ключ /D:
mklink /D D:\LinkFolder C:\Folder
В PowerShell все проще, тип объекта будет определен автоматически:
New-Item -ItemType SymbolicLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName
Если в качестве цели указан файл — будет создана ссылка на файл, каталог — ссылка на каталог.
При переименовании, перемещении или удалении исходного файла или каталога все символические ссылки работать перестанут:
При копировании символической ссылки за пределы локального тома будет скопирован исходный файл, даже если целевой том поддерживает работу со ссылками, но это не мешает создать новую ссылку на другом томе.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Ниже мы разберем понятие жестких и символических ссылок в Windows, расскажем про их основное предназначение и ключевые отличия. Также Вы сможете научиться быстро создавать ссылки стандартными способами Windows или при помощи специального ПО.
Содержание
- Символические ссылки
- Жесткие ссылки
- Как можно применить символические ссылки?
- Как упростить создание символических и жестких ссылок?
Символические ссылки
Символьные ссылки (также известный как «Мягкие ссылки» или «SymLink») представляют собой специальные объекты, в которых вместо информации и данных находится путь к конкретному файлу или каталогу на жестком диске компьютера.
Такой функционал имеет некоторые схожести с ярлыками, но в отличие от них, создается жесткая привязка символической ссылки к конкретному месту. Использование таких ссылок позволяет экономить место винчестере, а также получать своеобразную точку доступа к информации между различными файловыми системами, не заполняя носитель лишними копиями данных.
Ключевым моментом в использовании символических ссылок, является сохранение работоспособности программ и отдельных её объектов, на которые были созданы символические ссылки. Помимо этого, обычные ярлыки представляют собой ссылки, по которым можно перейти в оригиналы папок. Если пользователь перешел в оригинал папки по ярлыку, то все действия с файлами (удаление, изменение имени и т.д) будут иметь прямое воздействие на оригинал. В случае использования символических ссылок, пользователь сможет создать символический образ каталога (папки), в котором будут находиться символические ссылки на файлы оригинала. Стоит отметить, что такие данные имеют незначительный вес. Их размер примерно сопоставим с ярлыками, хотя из-за особенностей работы (символические ссылки буквально «обманывают» программы и операционную систему, выдавая под видом символической ссылки реально существующий объект), вес папки всегда будет показываться равным весу оригинала.
Жесткие ссылки
Жесткая ссылка или Hard Link имеет схожий функционал с символическими ссылками, но её ключевыми отличиями являются:
- Возможность работы только в одной конкретной файловой системе.
- Возможность работы в пределах только одного логического раздела.
- Жесткая ссылка так же, как и символическая ссылка воспринимается системой как оригинальный файл, но жесткая ссылка сохраняет свою оригинальность (все файлы жестких ссылок действительно являются оригиналами), в то время как при изменении настоящего файла или каталога символической ссылки, такие ссылки потеряют свою актуальность, поскольку им некуда будет ссылаться.
Таким образом жесткие ссылки имеют гораздо меньший круг применения, но обеспечивают безопасность при использовании, поскольку все жесткие ссылки не зависят от своего оригинала.
Как можно применить символические ссылки?
Символические ссылки могут иметь большое применение. Для примера, такие ссылки можно использовать при работе с виртуальными машинами или для более удобной работы с облачными хранилищами. Символьные ссылка позволяют не тратить ресурс жесткого диска, перемещая большие папки и файлы, а просто создавать символические ссылки, которые будут иметь такие же характеристики, полную работоспособность и другие возможности данных, куда была создана символьная ссылка.
Таким образом можно перемещать и синхронизировать объемные папки под видом символических ссылок в хранилища или перемещать программы с основного компьютера на виртуальную машину, без установки, траты места и с сохранением работоспособности утилиты. Это позволяет редактировать, работать или изменять структуру данных с виртуальной машины, синхронизировано с данными на реальном носителе ПК, при этом не открывая доступ с виртуальной машины на реальный компьютер.
Для примера, попробуем создать символическую ссылку на программу для восстановления данных RS Partition Recovery, чтобы сэкономить место, перенести её на другой диск и в то же время не переустанавливать утилиту в корень папки на новом системном диске.
Важно! Функции символьных ссылок доступны с Windows Vista. Более старые версии ОС не поддерживают работу с ними, поскольку в их функционале присутствует возможность создания только жестких и мягких (ярлыков) ссылок.
Процесс создания символической ссылки выглядит следующим образом:
Шаг 1. Работа с символическими ссылками происходит через стандартную утилиту Windows – «Командная строка». Нажимаем сочетание клавиш Win+R и в открывшемся окне вводим команду «cmd».
Шаг 2. В открывшемся окне вводим команду «mklink», при помощи которой можно получить описание функционала и возможные действия с символическими ссылками.
Шаг 3. Ознакомившись с ключами, попробуем создать символическую ссылку на каталог «C:\Program Files (x86)\Recovery Software\RS Partition Recovery 2.8» для этого нам потребуется ввести следующую команду «mklink /j «D:\recoverymk» «C:\Program Files (x86)\Recovery Software\RS Partition Recovery 2.8″».
Разберем подробнее каждый из пунктов команды.
- Mklink – основная команда связанная для создания символьных ссылок, её прописывают в начале.
- /j – ключ для создания символьный ссылки для каталога. Для создания файла следует использовать ключ /d. Для жесткой ссылки ключ /h.
- “D:\recoverymk” – путь куда будет сохранена символьная ссылка на каталог.
- «C:\Program Files (x86)\Recovery Software\RS Partition Recovery 2.8» – источник, откуда была создана символьная ссылка.
В нашем случае успешное создание символьной ссылки выглядит следующим образом:
Проверяем созданную ссылку и её работу в том месте, которое было указано при создании. В нашем случае это «D:\recoverymk».
Пробуем запустить утилиту через символическую ссылку.
Программа RS Partition Recovery (как и любые другие программы, архивы, игры и т.д) успешно заработала через символическую ссылку.
Также продемонстрируем наглядное пособие по созданию символической ссылки на конкретный файл. Для примера создадим символьную ссылку архива «карты», который расположен на диске C.
Для этого вводим «mklink /d «D:\карты» «C:\карты»»
В данном случае каждая часть команды отвечает за следующее:
- Mklink – основная команда для работы с ссылками.
- /d – ключ для создания символьных ссылок на конкретные файлы.
- «D:\карты» – место куда будет создана символьная ссылка.
- «C:\карты» – источник (оригинал) файла.
Важно! Для выполнения действий необходимо открыть командную строку от имени администратора. В противном случае утилита выдаст ошибку «Недостаточно прав».
Как упростить создание символических и жестких ссылок?
Для неподготовленных пользователей работа в командной строке может оказаться достаточно трудной и неудобной, поэтому многие предпочитают использовать специальный утилиты, добавляющие возможность быстрого создания ссылок различных типов из контекстного меню (меню, которое появляется при нажатии по файлу правой кнопкой мыши).
Одной из самых популярных программ для быстрого создания ссылок из контекстного меню является Link Shell Extension.
Процесс создания символической ссылки с дополнительными утилитами выглядит следующим образом:
Шаг 1. Нажимаем ПКМ по нужному объекту и выбираем пункт «Запомнить источник ссылки».
Шаг 2. Переходим в любой каталог, куда будет помещена ссылка, нажимаем ПКМ по пустому месту и выбираем пункт «Поместить как», после чего следует выбрать «Жесткую ссылку» или «Символическую ссылку».
Независимо от метода создания, ссылки будут функционировать в штатном режиме.
Используя жёсткие ссылки файлов и каталогов, можно иметь несколько различных имён файлов или каталогов, ссылающихся на одни и те же данные. В windows механизм работает в файловой системе NTFS. Статья о том, как сделать такие ссылки в windows.
Возможно вы сталикивались со следующими задачами:
- Установить приложение или игру на HDD диск, а часть перенести на SSD.
- Перетащить данные приложения, без правки конфигурации. (пример ниже для SQL Server)
- Приложение/данные не влазят на один диск, а на другом диске как раз есть свободное место под оставшуюся часть.
Всё это можно решить используя ссылки на файлы и каталоги. Например, начиная с Windows Vista в винде отсутствует каталог «Documents and Settings» а операционная система на него ссылается из папки «Users» для совместимости с приложениями написанными для Windows XP.
Создание символической ссылки
Для создание ссылки используется команда mklink
(из командной строки cmd
, кэп).
mklink
Создает символьную ссылку.
MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение
/D Создает символьную ссылку на каталог.
По умолчанию создается символьная ссылка на файл.
/H Создает жесткую связь вместо символьной ссылки.
/J Создает соединение для каталога.
Ссылка Указывает имя новой символьной ссылки.
Назначение Указывает путь (относительный или абсолютный), на который ссылается
новая ссылка.
Мне недавно хотелось удалить папку кеша обновлений Microsoft SQL Server, чтобы освободить 2 Гб на системном SSD диске. Вместо удаления я перенес данные на другой диск (D:). Cоздал символьную ссылку и, вуаля, место освобождено, а SQL Server думает, что данные на прежнем на месте.
C:\>mklink /D "c:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Update Cache" "d:\distr\Sql Server\Update Cache"
Символическая ссылка создана для c:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Update Cache <<===>> d:\distr\Sql Server\Update Cache
Существуют инструменты для создание ссылок через графический интерфейс, например Link Shell Extension или NTFS Link , также их можно легко сделать в Far’е по Alt+F6
Отличия жестких ссылок от символических ссылок и связей
Материал из справки Far Manager.
На разделах NTFS можно создавать жёсткие ссылки (HardLink) для файлов, связи (Junction) для папок и символические ссылки (SymLink) для файлов и папок с помощью команды Alt-F6.
Жёсткие ссылки
Жёсткая ссылка (HardLink) — это просто ещё одна запись в папке для данного файла.
Когда создаётся жёсткая ссылка, сам файл не копируется физически, а только появляется под ещё одним именем или в ещё одном месте, а его старые имя и местонахождение остаются нетронутыми. С этого момента жёсткая ссылка неотличима от первоначальной записи в папке. Единственное отличие — то, что для жёсткой ссылка не создаётся короткое имя файла, поэтому из ДОС-программ она не видна.
Когда меняется размер или дата файла, все соответствующие записи в папках обновляются автоматически. При удалении файла он не удаляется физически до тех пор, пока все жёсткие ссылки, указывающие на него, не будут удалены. Порядок их удаления значения не имеет. При удалении жёсткой ссылки в корзину количество ссылок у файла сохраняется.
FAR умеет создавать жёсткие ссылки, отображать их количество для каждого файла в отдельной колонке (по умолчанию это последняя колонка в 9-м режиме панелей), а также сортировать файлы по количеству жёстких ссылок.
Создавать жёсткие ссылки можно только на том же диске, на котором расположен исходный файл.
Связи
Эта технология позволяет отображать любые локальные папки на любые другие локальные папки. Например, если папка D:\SYMLINK указывает на C:\WINNT\SYSTEM32 в качестве своей цели, то программа, обращающаяся к D:\SYMLINK\DRIVERS, будет на самом деле обращаться к C:\WINNT\SYSTEM32\DRIVERS. В отличие от жёстких ссылок, связи папок не обязательно должны располагаться на том же диске.
В Windows 2000 нельзя напрямую создать связь, ссылающуюся на папку CD-ROM, но это ограничение можно обойти, смонтировав CD-ROM диск на папку NTFS-раздела.
Символические ссылки
Символические ссылки (SymLink) на NTFS поддерживаются, начиная с Windows Vista (NT 6.0). Они представляют собой улучшенный вариант связей каталогов — символические ссылки могут указывать как на папки, так и на файлы, как на локальные, так и на сетевые, при этом поддерживаются относительные пути.
UPD PowerShell
Создание символической ссылки с помощью New-Item
New-Item -Path C:\LinkDir -ItemType SymbolicLink -Value F:\RealDir
Как установить будильник на компьютере с Windows 10?
В операционной системе windows 10 есть встроенный будильник. Он так и назыается «Будильник и часы». Cочетает такие функции, как будильник, мировое время, таймер и секундомер.
Обновление баз NOD32 на компьютере без интернета
Инструкция по offline обновление баз антивируса NOD32, если есть лицензия или готовый архив с базами
Open with Code
Добавление пункта Open with Code после установки VS Code
Установка Composer на Ubuntu
Опыт установки composer’a в подсистему Ubuntu под Windows 10.
Cannot start virtual machine on Virtualbox
При сообщении Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT).
отключить компонент Windows — Hyper-V
и перезагрузиться.
PowerShell: Переменные окружения для одной команды
$env:FOO = 'BAR'; node ./index.js; Remove-Item Env:\FOO
Если вам когда-то приходилось просматривать расположения файлов штатных программ Windows, то возможно вы замечали одну странность. Некоторые файлы приложений дублируются, причем несколько раз. Например, в 64-разрядной Windows 8.1 обнаруживается целых 6 исполняемых файлов Блокнота notepad.exe, находящихся в разных каталогах системного раздела. Зачем вообще нужно такое странное дублирование?
А необходимо оно для обеспечения совместимости со сторонними приложениями, использующими Блокнот для каких-то своих нужд. Причина проста – в разных программах прописанный путь к Блокноту может отличаться, и чтобы исключить проблемы, разработчики Microsoft решили разместить notepad.exe в нескольких местах. То же самое касается ряда других штатных приложений, например, WordPad.
Жесткие ссылки или Hard Link
На самом деле дублирование совсем необязательно должно иметь место. То, что вы видите и определяете как реальный файл, в действительности может оказаться Hard Link — ссылкой особого типа, используемой для формирования путей к какому-нибудь файлу. Такие ссылки называются жесткими. Любопытно, что файл в NTFS может иметь до 1023 жестких ссылок, и все они будут выглядеть как его точная копия за исключением имени и размера. Как и ярлыки, жесткие ссылки могут иметь разные имена.
Зато содержимое и атрибуты у них общие, и если вы измените их в одной такой ссылке, то изменения коснуться всех остальных ссылок, даже тех, которые были удалены в Корзину. Что касается размера жестких ссылок, то это всего лишь одна видимость. Не имеющие практически никакого веса, ссылки этого типа определяются Проводником как имеющие реальный вес файлы, что иногда вызывает у пользователей немало вопросов и затруднений при ручной очистке ряда системных каталогов, того же Winsxs. Есть у Hard Link и свои ограничения. Так, создавать жесткие ссылки можно только на файлы и только в пределах одного тома.
К счастью, сталкиваться с жесткими ссылками рядовым пользователям приходится нечасто, иначе это наверняка бы привело к неразберихе и серьезным проблемам. Описывать все особенности поведения жестких ссылок мы не будем, так как это заняло бы слишком много времени. Вместо этого предлагаем вам создать Hard Link самостоятельно и поэкспериментировать с ними. Вот вам пример. Создайте на рабочем столе простой текстовый файл file1.txt и что-нибудь напишите в него. Теперь откройте командную строку и создайте на него пару жестких ссылок с именами file2.txt и file2.txt. Вот так:
cd %userprofile%\desktop
fsutil hardlink create file2.txt file1.txt
fsutil hardlink create file3.txt file1.txt
Обратите внимание, что после команды create первым идет имя жесткой ссылки, а затем имя оригинального файла. Также вы можете создавать жесткие ссылки на другие жесткие ссылки. В общем, развлекайтесь. Уверен, что вы найдете для себя немало интересного.
Символьные ссылки или Symbolic Link
В отличие от жестких, символьные ссылки или Symbolic Link обладают большей гибкостью. Предназначаются они для удобной организации объектов файловой системы, а также оптимизации производительности приложений на SSD-дисках. Ссылки этого типа могут создаваться и для файлов, и для каталогов, в том числе сетевых; они поддерживают связь между томами, используя относительные пути. Принципом работы символьная ссылка напоминает обычный ярлык.
Использование Symbolic Link может иметь смысл при необходимости получения доступа к одному файлу из разных мест. Создаются символьные ссылки командой mklink:
mklink D:\file2.txt %userprofile%\desktop\file1.txt
Первым после команды идет путь к символьной ссылке, вторым – путь к оригинальному файлу. Если нужно создать символьную ссылку для каталога, используется та же команда mklink, но с ключом \d.
mklink \d D:\folder2 %userprofile%\desktop\folder1
Внешне символьные ссылки почти ничем не отличаются от обычных ярлыков, за исключением пометки symlink в свойствах файла или даты создания вместо пути к оригиналу в каталоге. Также если вы удалите оригинал, а затем попробуете перейти по символьной ссылке, то она просто не откроется, тогда как при попытке открыть битый ярлык появится сообщение о недоступности оригинального файла. Но самое главное отличие от ярлыков в том, что при работе с символьными ссылками Windows по-прежнему будет считать, что вы работаете с оригинальным объектом.
На этом пока все. В следующий раз мы рассмотрим способ применения символьных ссылок на более конкретных примерах, а заодно узнаем, какие используются утилиты для работы с жесткими и символьными ссылками.
Отличного Вам дня!
В обсуждении записи про раздел реестра App Paths читатель YaNkEE подметил, что файл write.exe присутствует одновременно в папках Windows и System32. И это не единственный пример дублирования файлов. Вы можете убедиться, что в каждой из этих папок лежит по блокноту. Зачем это сделано?
Преданья старины глубокой
Два файла notepad.exe обеспечивают совместимость приложений, играя ту же роль, что и некоторые подразделы App Paths.
Увеличить рисунок
Сторонние программы
В данном случае речь идет о совместимости со сторонними программами, в которых жестко прописан путь к блокноту. Например, многие установщики программ до сих пор открывают readme.txt именно в нем, и кто его знает, как разработчики это прописали.
Все дело в том, что в Windows 3.0 местом хранения блокнота была папка Windows, а в Windows NT 3.х – папка System32. Несмотря на то, что обе системы давно стали пыльной историей, блокнот до сих пор размещают в обеих папках. Интересно, что делается это не во всех операционных системах Microsoft, а если и делается, то различными способами!
Реализация в разных операционных системах
В Windows XP и Windows Vista в обеих папках лежит по файлу notepad.exe. А разработчики Windows Server 2008 решили убрать блокнот из папки Windows, оставив его только в System32. Наверное, они сочли, что на серверной системе устанавливается меньше прикладных программ, и вероятность попадания на несовместимую программу намного ниже.
Судя по тому, что в следующих серверах от этой идеи не отказались, расчет оправдался. Любопытно, что после включения компонента Desktop Experience блокнот все-таки появляется в папке Windows (спасибо за информацию, Morpheus).
В Windows 7 и Windows 8 блокнот присутствует в обеих папках, но на диске размещен только один файл notepad.exe.
Его наличие в разных папках обеспечивают жесткие ссылки (hard links), которые и станут основными героинями сегодняшнего разговора. Аналогично, в серверных системах после включения компонента создается именно жесткая ссылка на notepad.exe, а не копия файла. Кстати, программа write тоже дублируется жесткой ссылкой.
Не совсем понятно, почему это решение не внедрили еще в Vista, но совершенно ясно, почему так не сделали в XP. Дело в том, что жесткие ссылки являются свойством файловой системы NTFS, а ХР можно было устанавливать еще и на FAT32.
[+] Дальше в программе
Как увидеть жесткие ссылки
Символические ссылки легко определить – в файловом менеджере их видно по значку, а в результатах команды dir напротив ссылок пишется SYMLINK. Жесткие ссылки не очевидны, в прямом смысле этого слова.
Проверить уникальность блокнота можно в командной строке, запущенной от имени администратора. Команда fsutil покажет вам жесткие ссылки на файл:
fsutil hardlink list %windir%\notepad.exe
Сюрприз! Блокнотов в Windows 7 не два, а четыре! Как видите, еще два обнаруживаются в папке winsxs.
А в 64-разрядной Windows 7 их вообще шесть.
Увеличить рисунок
Это связано с тем, что в папке System32 лежат 64-разрядные версии файлов, в том числе блокнот (я выделил еще одну занятную нестыковку Windows, уходящую корнями в прошлое). А в папке SysWOW64 хранится 32-разрядная версия notepad.exe, которая имеет свою жесткую ссылку в папке winsxs, в чем вы можете убедиться самостоятельно.
Внушительное количество жестких ссылок подводит нас к вопросу использования ими дискового пространства.
Сколько места на диске занимают жесткие ссылки
Нисколько! В файловой системе NTFS каждый файл можно считать жесткой ссылкой на самого себя. На файл может ссылаться сколько угодно жестких ссылок (точнее, не больше 1023). Они могут запускать его из разных расположений, и при этом неотличимы друг от друга в проводнике и результатах команды dir.
Физически на диске присутствует только один файл, но нестыковка между структурой файловой системы и ее отображением в оболочке порождает вопросы и даже деструктивные действия.
Самым ярким примером непонимания принципов работы и назначения жестких ссылок являются руководства по чистке папки winsxs. О ней меня недавно просил рассказать читатель блога Антон, и вот представился случай.
Не пропустите рассказы о том, как грамотно уменьшить размер папки winsxs в Windows 7 и в Windows 8 и новее.
Проводник видит папку winsxs так:
Но в реальности папка содержит немного уникальных файлов, которые изначально занимают на диске в среднем 400 Мб. Эта цифра относится к Windows Vista, и логично предположить, что в Windows 7 дело обстоит примерно так же (по крайней мере, понятен порядок цифры).
Все остальные файлы с помощью жестких ссылок проецируются в папки Windows, System32 и т.д. Появление папки winsxs связано с изменением платформы Windows, которая теперь складывается из компонентов как дом из кирпичей. По сравнению с Windows XP такая модель упрощает развертывание и обслуживание WIM-образов. Это верно даже после установки системы, поскольку она представляет собой образ, примененный к диску. Например, список компонентов и их состояние можно посмотреть командой
Dism /online /Get-Features
Может показаться, что зачистка папки winsxs никак не нарушает нормальную работу системы. Так, Антон лишился только русского языка в Internet Explorer, причем с его слов исключительно по невнимательности. Однако нарушения нормальной работы Windows не всегда заметны, если они происходят под капотом системы.
Для стабильной работы Windows необходимо нормальное управление компонентами, безотказное восстановление и правильное обновление.
Так, содержимое папки winsxs используется для проверки системных файлов (SFC), а хранящиеся в ней версии файлов обеспечивают подбор наиболее подходящей версии при установке и удалении обновлений.
Подробнее о назначении папки winsxs вы можете узнать из блогов создателей Windows и команды Windows Server Core (EN), а я предлагаю вернуться к разговору о жестких ссылках.
Как создать жесткие ссылки
Мы выяснили, что Microsoft использует жесткие ссылки для обеспечения совместимости (пример с блокнотами) и безотказного обслуживания операционной системы (пример с папкой winsxs). Предлагаю вам самостоятельно создать жесткие ссылки и поиграть с ними.
Жесткие ссылки необязательно должны иметь такие же имена, как файл, на который они указывают. Это легко проверить:
@echo off :: Переходим на рабочий стол cd %userprofile%\desktop :: Создаем произвольный текстовый файл echo Hello, Hard Links! > 1.txt :: Создаем жесткую ссылку на файл fsutil hardlink create 2.txt 1.txt :: Создаем жесткую ссылку на жесткую ссылку fsutil hardlink create 3.txt 2.txt pause
Все три файла имеют одинаковое содержимое и атрибуты.
Попробуйте изменить и сохранить третий файл, а потом открыть первый. Вы увидите сделанные вами изменения, хотя вы его не открывали до этого. Аналогично, если вы заблокируете изменения в любом файле атрибутом «Только для чтения», это немедленно отразится на всех ссылках.
Хотите еще поэкспериментировать? Удалите один из файлов в корзину. Теперь откройте любой из оставшихся файлов и измените его, а затем восстановите удаленный файл. Вы обнаружите в нем изменения, произошедшие за то время, что он валялся в корзине!
Кстати, вы заметили, что после удаления файла у его братьев на значке появился замок, загадка которого, похоже, до сих пор полностью не разгадана.
Замок пропадает, как только вы возвращаете файл из корзины и обновляете папку или любой из файлов.
Как ускорить свою работу с помощью ссылок
В комментариях все к той же записи про AppPath читатель jakv поделился своим опытом использования ссылок.
Имею папку MyTools, добавленную в PATH. В папку помещаю символические ссылки с краткими именами на необходимые мне программы. В результате при вызове программы не нужно вводить полный путь.
Раскрывая этот пример, допустим, что у вас утилита Process Explorer лежит в папке D:\Sysinternals. Можно назначить ей псевдоним pe одной командой, используя символическую или жесткую ссылку на выбор.
Вы уже видели, как создает ссылки fsutil. Давайте теперь сделаем это командой mklink.
:: Символическая ссылка на файл mklink D:\MyTools\pe.exe D:\Sysinternals\procexp.exe :: Жесткая ссылка на файл mklink /h D:\MyTools\pe1.exe D:\Sysinternals\procexp.exe
Во втором случае я использовал другой псевдоним, т.к. не получится создать в папке два файла с одинаковым именем.
В отдельном столбце проводника я отобразил атрибуты файлов, чтобы показать, что буква L обозначает символическую ссылку. Вы также можете добавить столбец «Цель ссылки», чтобы посмотреть, куда она ведет. Этот рисунок также хорошо подчеркивает разницу между жесткими и символическими ссылками. Первые являются полноценными файлами, а вторые больше похожи на ярлыки.
Из своей практики я уже делился примером укрощения программы, в которой был зашит абсолютный путь к одной из папок профиля. Кстати, пример резонирует с причиной наличия блокнота в каждой из системных папок. А недавно я решил перенести одну папку в другое место. Поскольку ранее я создал на нее ссылки в реестре, символическая ссылка избавила меня от необходимости выполнять поиск и замену пути в нем.
В чем разница между жесткими ссылками, символическими ссылками и соединениями
Поскольку эта запись логически завершает серию статей о ссылках NTFS, хотелось бы подвести итог и сопоставить их возможности.
Создание и удаление связей
Команда mklink в Windows 7 и Vista умеет создавать все три типа связей. Жесткие ссылки можно создать только на файлы, но не на папки — для этого исторически существуют соединения.
Символические ссылки совмещают в себе свойства соединений и жестких ссылок. Для пользовательских задач их вполне достаточно, и в большинстве случаев не возникает необходимости в применении других способов.
Удаление ссылок в Windows 7 и Vista не несет в себе особых сюрпризов, поскольку целевые файлы и папки остаются в целости и сохранности. Внимательным нужно быть лишь при рекурсивном удалении файлов из папки командой del /s, т.к. при этом будут удалены все файлы в целевой папке.
Сравнительная таблица
Для полноты картины в таблице отражены некоторые возможности, которых я не касался в своих материалах.
Возможность | Символическая (symbolic link) |
Жесткая (hard link) |
Соединение (junction) |
---|---|---|---|
Файловая система | NTFS | NTFS | NTFS |
Ссылка на локальную папку | Да | Нет | Да |
Ссылка на локальный файл | Да | Да | Нет |
Ссылка на сетевую папку или файл | Да (UNC путь) | Нет | Нет |
Относительный путь в ссылке | Да | Нет | Нет |
Связь между томами* | Да (абсолютные ссылки) |
Нет | Да (локальные тома) |
Команда для просмотра ссылок | dir | fsutil | dir |
* Не путайте том с диском или разделом. Тома могут включать в себя несколько разделов или даже дисков. Подробнее читайте в статье о конфигурировании динамических томов (мой перевод 2006 года:)
Различные типы связей между папками и файлами дают файловой системе NTFS преимущества, которые Microsoft использует для обеспечения совместимости приложений и стабильной работы Windows. В немалой степени именно по этой причине уже третье поколение систем Microsoft не устанавливается на файловую систем FAT32.
Проголосовавших за первые два пункта я прошу объяснить источники беспокойства, а выбравших п.1 еще и причину выделения под систему столь малого раздела. И расскажите в комментариях, сколько вы у себя насчитали блокнотов Нужна помощь с подсчетом?