суббота, 15 марта 2014 г.

Решение проблемы нехватки места на диске с помощью Junction

    Иногда происходит так, что место на диске С:\ заканчивается в не очень подходящий момент. И если возможности ничего удалить нет, а место получить нужно, то ситуация не очень приятная. Да, во многих программах можно настроить папку установки и\или место хранения каких-то используемых файлов. Но это работает не для всех. А еще это может быть виртуальная машина, на которой ничего такого не стоит, но места уже нет на системном диске.

    В таком случае очень поможет поддержка символических ссылок на каталоги, которая уже довольно давно появилась в Windows (с версии Windows 2000).

    В чем суть этой технологии. На другом диске создается папка - копия существующей. А с исходного диска файлы удаляются и создается символическая ссылка. После этого при обращении пользователя\программы\системы к файлу на исходном диске происходит работа с этим файлом - "копией" (которая теперь является оригиналом). 

    Стандартными средствами Windows  этого сделать нельзя. Но есть бесплатная программа Junction, которую можно скачать здесь. С помощью неё можно легко и просто создать символическую ссылку на папку. Это консольное приложение с очень небольшим набором команд, в которых сложно запутаться.
    Рассмотрим на примере задачу, решение которой и привело меня к этой утилите.
   Есть виртуальная машина с дисками С  и D. На ней стоит Hudson. По умолчанию он свои проекты складывает C:\Documents and Settings\<username>\.hudson. 



    Проект в svn по размеру огромный, поэтому при попытке его выкачать Hudson столкнулся с тем, что место на диске С закончилось. А на диске D места много. Самый простой способ в этой ситуации - создать символическую ссылку с  C:\Documents and Settings\<username>\.hudson.  например на  E:\hudson. Тогда все файлы будут доступны по старым ссылкам на диск С, но фактически они будут храниться ( и занимать место) на диске D. 
    Итак, наконец, последовательность действий:
1. Скачиваем Junction
2. Распаковываем архив в любую папку
3. Открываем cmd (Нажимаем Win+R, в открывшееся окно пишем cmd, нажимаем enter)
4. Копируем все файлы из "C:\Documents and Settings\<username>\.hudson" в "E:\hudson"
5. Удаляем "C:\Documents and Settings\<username>\.hudson"
6. Выполняем команду junсtion "C:\Documents and Settings\<username>\.hudson" "E:\hudson"

    Директория "C:\Documents and Settings\<username>\.hudsonсоздастся при успешном выполнении команды. 

   Если после запуска ошибок не появилось, то можно убедиться в успешности переноса перейдя в "C:\Documents and Settings\<username>\.hudson" и увидев там все файлы, находящиеся в исходной папке на диске D.

Чтобы удалить привязку выполняем команду junction -d "C:\Documents and Settings\<username>\.hudson".

    Какие могут возникнуть проблемы:
1. 'junction' is not recognized as an internal or external command,
operable program or batch file. - при возникновении такой ошибки нужно 
1.1. или открыв cmd перейти в папку с распакованным junction (выполнить cd <junctiondir>)
1.2. или при выполнении команды указывать полный путь до файла, например
"C:\Program Files\Junction\junction.exe" "C:\dir" "D:\dir"
2.  Error setting junction for c:\dir: The data present in the reparse point buffer is invalid. - эта ошибка происходит при неправильном указании пути - проверьте, что пути указаны правильно, а если они с пробелами, то в кавычках.

Комментариев нет:

Отправить комментарий