231 просмотров

Как удалить Symlinks с дисков

Здравствуйте, друзья!

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

Дмитрий Евтифеев

к содержанию ↑

Типы ссылок

к содержанию ↑

Какая разница между Symlink и junction?

Для пользователя разница между ними часто незаметна, но на уровне файловой системы NTFS это два разных инструмента. Если говорить просто: Junction — это «старый и надежный» способ объединения папок, а Symlink — это «современный и гибкий» аналог ярлыка, который может указывать даже на файлы.

к содержанию ↑

Вот основные технические различия:

Сводная таблица сравнения

Характеристика Junction (<JUNCTION>) Symlink (<SYMLINKD>)
Что связывает Только папки И папки, и файлы
Тип пути Только абсолютный Абсолютный или относительный
Работа в сети Только локальные диски Поддерживает сетевые пути (UNC)
Права доступа Обычный пользователь Требует прав администратора
Совместимость Windows 2000 и новее Windows Vista и новее
Команда (CMD) mklink /j mklink /d (папка) или mklink (файл)
к содержанию ↑

Подробные отличия

1. Область применения (Файлы vs Папки)
Junction: Работает исключительно с директориями. Вы не можете создать Junction, указывающий на один конкретный файл (например, на .exe).

Symlink: Универсален. Вы можете сделать ссылку как на огромную библиотеку текстур, так и на один конфигурационный файл.

2. Локальность и сеть
Junction: Это «строгий» указатель. Он работает только в пределах локальных дисков одного компьютера. Вы не можете создать Junction, который ведет на сетевой ресурс \\Server\Share.

Symlink: Гораздо мощнее в этом плане. Он может перенаправлять запросы на сетевые пути, что часто используется системными администраторами.

3. Относительные пути
Junction: Всегда хранит полный путь (например, C:\Work\Projects\3D). Если вы переименуете родительскую папку Work в Jobs, связь сломается.

Symlink: Может использовать относительный путь (например, ..\Models). Это удобно, если вы переносите целый проект (папку со ссылками внутри) с одного диска на другой — связи внутри проекта сохранятся.

4. Права доступа
Для создания Junction обычно достаточно прав пользователя.

Для создания Symlink Windows по умолчанию требует прав администратора (хотя это можно изменить в политиках безопасности).

к содержанию ↑

Что и когда использовать?

Используйте Junction, если вам нужно просто «перекинуть» тяжелую системную папку (например, ProgramData или Users) на другой диск. Это самый стабильный метод, который понимает даже очень старый софт.

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

к содержанию ↑

Важное примечание по удалению

Как вы уже убедились на практике с вашими .bat файлами, удаление самой ссылки (хоть Junction, хоть Symlink) безопасно — это просто удаление «указателя». Но если зайти внутрь ссылки и начать удалять файлы там — они удалятся и в оригинальном месте.

к содержанию ↑

Показать все symlinks

Этот скрипт сначала назначит вашу текущую учётную запись владельцем всех файлов на диске I: и даст вам полные права, а затем выполнит поиск ссылок.

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

@echo off<br /> :: Проверка на права администратора<br /> net session >nul 2>&1<br /> if %errorLevel% neq 0 (<br /> echo [!] Нужно запустить от имени администратора!<br /> pause<br /> exit /b<br /> )</p> <p>set "targetDrive=I:"<br /> set "report=%userprofile%\Desktop\Drive_I_Final_Report.txt"</p> <p>echo === ШАГ 1: Забираем права владения на диске %targetDrive% ===<br /> :: takeown назначает вас владельцем<br /> takeown /f "%targetDrive%\" /r /d y >nul</p> <p>echo === ШАГ 2: Назначаем полные права доступа ===<br /> :: icacls дает вашей группе (Администраторы) полный доступ<br /> icacls "%targetDrive%\" /grant администраторы:F /t /c /l /q >nul</p> <p>echo === ШАГ 3: Поиск симлинков и точек соединения ===<br /> echo Это может занять время...<br /> dir "%targetDrive%\" /a:l /s > "%report%"</p> <p>echo.<br /> echo === ГОТОВО! ===<br /> echo Отчёт здесь: %report%<br /> pause<br /> start notepad "%report%"
к содержанию ↑

Удаление Symlinks с диска J

Создайте текстовый файл, вставьте этот код и сохраните его как Clean_Links_J.bat.

@echo off<br /> setlocal enabledelayedexpansion</p> <p>:: Проверка прав администратора<br /> net session >nul 2>&1<br /> if %errorLevel% neq 0 (<br /> echo [!] ОШИБКА: Запустите этот файл от имени АДМИНИСТРАТОРА.<br /> pause<br /> exit /b<br /> )</p> <p>set "drive=J:\"</p> <p>echo.<br /> echo =========================================================<br /> echo ПОЛНАЯ ОЧИСТКА ССЫЛОК НА ДИСКЕ %drive%<br /> echo =========================================================<br /> echo.<br /> echo ШАГ 1: Получение прав доступа к объектам на диске...<br /> :: Назначаем текущего пользователя владельцем и даем полные права<br /> takeown /f "%drive%" /r /d y >nul 2>&1<br /> icacls "%drive%" /grant администраторы:F /t /c /l /q >nul 2>&1</p> <p>echo ШАГ 2: Поиск и удаление связей (папок и файлов)...<br /> echo (Данные на диске C: затронуты не будут)<br /> echo.</p> <p>:: Цикл поиска всех Reparse Points (/a:l)<br /> for /f "usebackq delims=" %%i in (<code>dir "%drive%" /a:l /s /b 2^>nul</code>) do (</p> <p> :: Проверка: папка это или файл<br /> if exist "%%i\" (<br /> echo [ПАПКА] Удаляю связь: "%%i"<br /> rmdir "%%i"<br /> ) else (<br /> echo [ФАЙЛ] Удаляю связь: "%%i"<br /> del /f /q "%%i"<br /> )<br /> )</p> <p>echo.<br /> echo =========================================================<br /> echo ОПЕРАЦИЯ ЗАВЕРШЕНА<br /> echo Диск %drive% теперь полностью изолирован от системы.<br /> echo =========================================================<br /> pause
к содержанию ↑

Сценарий для массовой очистки всех НЕсистемных дисков

Этот скрипт автоматически определит все доступные диски в системе, пропустит диск C: (в целях безопасности) и удалит все найденные ссылки на остальных дисках.

Создайте файл clean_all_secondary.bat и запустите от админа:

<br /> @echo off<br /> setlocal enabledelayedexpansion</p> <p>:: Проверка прав<br /> net session >nul 2>&1<br /> if %errorLevel% neq 0 (<br /> echo [!] ОШИБКА: Запустите от имени АДМИНИСТРАТОРА.<br /> pause & exit /b<br /> )</p> <p>echo ВНИМАНИЕ: Скрипт очистит ВСЕ ссылки на всех дисках, КРОМЕ диска C:<br /> echo Это безопасно для системы, но разорвет связи на старых дисках.<br /> pause</p> <p>:: Перебираем все буквы дисков от D до Z<br /> for %%d in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (<br /> if exist %%d:\ (<br /> echo --- Обработка диска %%d: ---<br /> for /f "usebackq delims=" %%i in (<code>dir "%%d:\" /a:l /s /b 2^>nul</code>) do (<br /> if exist "%%i\" (<br /> echo [ПАПКА] Удаляю связь: "%%i"<br /> rmdir "%%i"<br /> ) else (<br /> echo [ФАЙЛ] Удаляю связь: "%%i"<br /> del /f /q "%%i"<br /> )<br /> )<br /> )<br /> )</p> <p>echo.<br /> echo === Глобальная очистка завершена ===<br /> pause
к содержанию ↑

Как запретить Windows создавать новые симлинки?

Если вы хотите ограничить возможность системы и программ создавать такие связи в будущем, можно подкрутить политики безопасности. Однако учтите: это может привести к тому, что некоторые установщики программ (особенно тяжелого CAD-софта) будут выдавать ошибки.

Способ через Групповые политики:
Нажмите Win + R, введите gpedit.msc.

Перейдите: Конфигурация компьютера -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Назначение прав пользователя.

Найдите пункт «Создание символических ссылок».

По умолчанию там стоят «Администраторы». Если вы удалите их оттуда, программы не смогут создавать симлинки без вашего ведома.

4. Как отключить «Оценку» симлинков (для производительности)
Иногда симлинки замедляют работу сети или диска, потому что система тратит время на их проверку. Вы можете отключить возможность удаленной оценки ссылок командой:

fsutil behavior set SymlinkEvaluation L2L:1 R2R:0 L2R:0 R2L:0

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

к содержанию ↑

Почему windows 10 мне постоянно на всех дисках делает эти symlinks?

На самом деле Windows не делает это «постоянно» и «случайно». То, что вы видите на диске I:, — это не результат текущей активности системы, а «археологические слои» той Windows 10, которая там раньше стояла.

Windows использует три вида таких связей для решения вполне конкретных инженерных задач.

1. Обратная совместимость (Legacy Support)
Это самая частая причина. Когда Microsoft переходила с Windows XP на Vista/7/10, они радикально поменяли структуру папок.

Пример: Раньше все профили лежали в C:\Documents and Settings, а теперь в C:\Users.

Зачем нужен симлинк: Чтобы старые программы, в коде которых жестко прописан путь к Documents and Settings, не «вылетали» с ошибкой, система оставляет там «пустышку-указатель» (Junction), которая прозрачно перекидывает программу в Users.

2. Псевдонимы приложений (App Execution Aliases)
Те самые 0-байтовые .exe, которые вы нашли в папке WindowsApps, — это современная фишка Windows 10 и 11 для программ из Microsoft Store (и не только).

Суть: Сама программа (например, Python или Winget) может лежать глубоко в защищенной системной папке с длинным и сложным именем.

Зачем нужен симлинк: Windows создает маленький «алиас» в папке пользователя, которая добавлена в переменную PATH. Это позволяет вам просто написать python в консоли, и система по этой короткой ссылке мгновенно найдет реальный тяжелый файл.

3. Изоляция и обновления
Сложный софт (включая ваши инженерные пакеты вроде NX или SolidWorks) часто использует симлинки для управления версиями.

Как это работает: Программа может ссылаться на папку CurrentVersion. Сегодня эта ссылка указывает на папку v1.0, а после обновления установщик просто перенаправляет этот «мостик» на v2.0. Самой программе при этом не нужно менять свои внутренние пути — для неё путь к данным остался прежним.

4. Почему они на «всех» дисках?
На самом деле, Windows автоматически создает их только на системном разделе. Если вы видите их на диске I:, это значит одно из двух:

На этом диске была установлена ОС, и это её остатки.

Вы (или установщик софта) использовали Folder Redirection (перенаправление папок). Например, если вы переносили папку Рабочий стол или Документы с диска C: на диск I:, Windows обязана оставить на C: «заглушку», чтобы система не сошла с ума при поиске ваших файлов.

Немного истории
Концепция симлинков пришла в Windows из мира Unix/Linux, где это является стандартом десятилетиями. Microsoft внедрила это в файловую систему NTFS, чтобы сделать ОС более гибкой. Без этих «невидимых связей» половина старого софта и современных приложений из стора просто не смогли бы работать одновременно.

В вашем случае, после того как вы «отключили» их своим скриптом, вы просто удалили эти логические переходы. Для старого, не загрузочного диска это абсолютно правильное действие — оно превращает системный мусор в обычные папки, которые можно стереть.

к содержанию ↑

BAT-файл для полного отключения (удаления) всех типов ссылок на I:

@echo off<br /> setlocal enabledelayedexpansion</p> <p>:: Проверка прав администратора<br /> net session >nul 2>&1<br /> if %errorLevel% neq 0 (<br /> echo [!] ОШИБКА: Запустите файл от имени АДМИНИСТРАТОРА.<br /> pause<br /> exit /b<br /> )</p> <p>set "targetDrive=I:\"</p> <p>echo.<br /> echo === Поиск и отключение всех ссылок на диске %targetDrive% ===<br /> echo (Папки-Junction и Файлы-Alias будут удалены БЕЗ вреда для диска C:)<br /> echo.</p> <p>:: Мы используем цикл, который обрабатывает каждый найденный объект индивидуально<br /> for /f "usebackq delims=" %%i in (<code>dir "%targetDrive%" /a:l /s /b</code>) do (</p> <p> :: Проверяем, существует ли это как папка<br /> if exist "%%i\" (<br /> echo [ПАПКА] Отключаю: "%%i"<br /> rmdir "%%i"<br /> ) else (<br /> echo [ФАЙЛ] Отключаю: "%%i"<br /> del /f /q "%%i"<br /> )<br /> )</p> <p>echo.<br /> echo === ГОТОВО ===<br /> echo Все связи на диске %targetDrive% разорваны.<br /> echo Теперь вы можете безопасно очищать старые системные папки.<br /> pause

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