«Яндекс.Диск»: синхронизация — это модно! Сохраняем данные. Автоматическая синхронизация с облачным сервисом Яндекс.Диск при помощи Link Shell Extension

В последнее время все большую популярность набирают сервисы облачного хранения данных, такие как Яндекс.Диск, Google Drive и т.д и т.п. Они позволяют Вам подстраховаться от потери важных данных, таких как документы фотографии и др. В принципе это удобно, за исключением одного момента — программное обеспечение сервиса создаёт на компьютере свою папку, с которой осуществляет синхронизацию облачный сервис, т. е. чтобы отправить какие-то данные в «облако» нужно скопировать их в эту папку. Это неудобно при больших объемах данных: так если у вас, к примеру, 300 Гб фотографий, то для синхронизации их нужно выделить и скопировать в папку сервиса (а копирование такого объема явно не для слабонервных), и это процесс нужно повторять при обновлении данных. Но нашлось решение проблемы — символическая ссылка.

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

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

Это по материалам Wikipedia, а если «по-русски», то все что у вас в каталоге, на который указывает ссылка, то и в целевом каталоге. Сама символьная ссылка широко используется на Linux системах, но есть возможность создать ее и в системе Windows.

Создать ссылку можно с помощью командной строки, но гораздо-гораздо проще с помощью утилиты Link Shell Extension , которая умеет создавать требуемый тип ссылки.

Рассматривать данный метод мы будем на примере сервиса Яндекс.Диск.

И так. Для начала необходима регистрация в системе Яндекс. Далее переходим на страницу Яндекс.Диск , скачиваем дистрибутив ПО Яндекс.Диск на компьютер и устанавливаем его. Появиться иконка в виде летающей тарелки с зеленой галочкой или синим кружочком со стрелочками на Панели задач возле часов.

Также будет создана папка Яндекс.Диск на компьютере в указанном вами месте.

Затем скачиваем утилиту Link Shell Extension , устанавливаем ее, перезагружаем компьютер и в контекстном меню, вызываемом нажатием правой кнопки мыши, у нас появляются новая строка «Запомнить источник ссылки».

Чтобы синхронизировать папку с «облаком», находим ее на Компьютере, нажимаем по ней правой кнопкой мыши и выбираем «Запомнить источник ссылки».

После всего этого переходим в папку Яндекс.Диск, нажимаем правой кнопкой мыши и выбираем «Поместить как -> Символическую ссылку»

Яндекс диск — это облачный сервис, который позволяет хранить любые ваши файлы на серверах компании Yandex. Вы можете обмениваться ссылками на файлы с любым из ваших знакомых или же по работе. Сервис построен по принципу синхронизации. Синхронизация происходит на всех устройствах и синхронизируются все изменения. Таким образом на каком бы устройстве вы не работали, все ваши изменения будут автоматически отражаться на других устройствах (компьютер, ноутбук, планшет или телефон), где установлен Yandex Disk и используется тот же аккаунт для входа.

Возможности Яндекс Диска

На данный момент Yandex при регистрации предлагает бесплатно 10 Гб дискового пространства. Этот объем можно увеличить до 20 Гб, если вы пригласите в сервис 10 своих друзей (по 512 Мб за каждого) и они примут приглашение и зарегистрируются. Если вам этого объема не достаточно, Яндекс предлагает за дополнительную ежемесячную плату расширить до максимум 1 Тб. Цены на сегодня следующие:

  • дополнительные 10 Гб за 30 рублей в чесяц;
  • объем диска 100 Гб за 150 рублей;
  • объем 1 Тб за 900 рублей в месяц;

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

На изображении ниже отображены текущие условия предоставления места для хранения. Если вы читаете статью значительно позже ее публикации, условия могут измениться.

Как установить яндекс диск на компьютер

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

Для установки софта перейдите по этой ссылке -> Yandex.Disk Setup . Скачайте необходимый для вашей операционной системы файл установки (обычно определяется автоматически) и установите на компьютер. Во время установки программа по умолчанию предложит установить дополнительные сервисы, которые лично по моему мнению абсолютно не нужны и я ими никогда не пользуюсь. Отключите галочки в соответствующих полях.

После установки программы, вам надо будет войти в аккаунт, используя почтовый ящик от Яндекс почты в качестве логина и пароль от вашего почтового аккаунта. Если вы еще не заводили почтовый ящик Mail.Yandex, нажимаете на ссылку зарегистрироваться и регистрируете аккаунт. После этого входите под этим логином.

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

Если вас устраивает хранить файлы в папке по умолчанию, нажимаете кнопочку «Начать работу». Для смены папки нажимаете «Настроить расположение папки» и по кнопке изменить указываете папку. Нажимаете начать работу.

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

Яндекс диск: как пользоваться

Чтобы начать пользоваться диском как хранилище ваших файлов, вам необходимо разместить эти самые файлы в облаке Яндекс в своем аккаунте. После установки на компьютер вы можете попасть в папку с файлами через «Мой компьютер», выбрав соответствующую папку «Яндекс. Диск» или же дважды кликнув на иконку летающей тарелки в системном трее. Управлять файлами в этой папке можно точно так же как и другими на вашем компьютере. Можно использовать буфер обмена для копирования/перемещения из другой папки, а можно использовать технологию «Drag-and-drop» перетаскивая папки и файлы мышкой.

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

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

Удаление файлов происходит так же как и при удалении файлов на вашем диске. Нажатие кнопки Del или же удаление по нажатию правой кнопкой мыши на объекте. Сразу же после этой операции программа автоматически удалит файл в облачном хранилище.

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

Откроется интерфейс, в котором будут находиться все ваши папки и файлы. Загрузить файлы на диск можно нажав на область «Загрузить файлы» или же просто скопировать объекты перетаскиванием в эту же область. Переход по папкам происходит по двойному нажатию.

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

Как и в веб интерфейсе, программа, установленная на вашем компьютере позволяет предоставлять доступ к файлам или папкам другому пользователю. Для этого нажимаете на значек в трее и выбираете меню Общий доступ -> Выбрать файл или папку и предоставить публичную ссылку. Причем вы можете предоставить доступ к файлам не только из папки Яндекс Диска, а и к любой папке/файлу на вашем компьютере. Программа автоматически добавит в этот объект в список синхронизации и создаст ссылку для доступа.

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

Как удалить яндекс диск

Чтобы удалить программу Yandex.Disk с компьютера, необходимо проделать некоторые действия в определенной последовательности. Первое, что необходимо сделать, это отключить локальную папку где хранятся файлы от удаленного сервера. Для этого зайдите в настройки программы и откройте вкладку «Аккаунт» и нажмите на кнопку «Отключить компьютер от диска». Нажимаете «Применить» или «Ок».

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

После отключения нажимаете «Пуск» и заходите в «Панель управления». Выбираете «Программы и компоненты» (это в том случае, если у вас Windows 7) и в списке находите программу Yandex.Disk и удаляете ее с компьютера.

Последний шаг, чтобы освободить место на диске, удаляете папку, которую вы создавали при установке и все содержимое. После этого Яндекс Диска на вашем компьютере больше нет.

Сравнение OneDrive, Google disc, DropBox, Яндекс Диск

Каждый раз, когда вы копируете файл в папку Яндекс.Диска, редактируете или удаляете файл, все изменения дублируются на сервере Диска: их можно видеть на . Если же вы загружаете файлы на странице сервиса, программа «Яндекс.Диск» на вашем компьютере автоматически отобразит их в программе Яндекс.Диск.

Таким образом со всех ваших устройств, подключенных к интернету, на Диске видны одни и те же файлы.

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

Что происходит, когда файл изменяется одновременно на разных устройствах?

Допустим, вы нарисовали картинку kartinka.jpg на компьютере, отключенном от интернета, а затем загрузили на Диск фотографию с тем же именем с мобильного телефона.

Когда вы подключите компьютер к интернету, Яндекс.Диск начнет синхронизацию. Обнаружив разные файлы с одинаковыми именами, Диск переименует один из них: в результате файлы будут называться kartinka.jpg и kartinka (2).jpg .

Выборочная синхронизация папок

Программа Яндекс.Диск 3.0 позволяет синхронизировать с компьютером не все файлы с вашего Диска, чтобы сэкономить место на компьютере. Например, если вы часто работаете с папкой «Документы» , включите для нее синхронизацию - эта папка будет храниться на компьютере. Остальные папки будут храниться только в облаке, но будут также доступны в программе.

Подробные инструкции по настройке выборочной синхронизации:

  • в программе для Windows ;
  • в приложении для macOS .

Состояние синхронизации в программе

Как синхронизируются измененные файлы?

Яндекс.Диск определяет, какие именно части файла были изменены, и выгружает на сервер только измененные фрагменты, а не файл целиком.

На скольких устройствах можно использовать Яндекс.Диск?

Теоретически вы можете установить приложение и программу Яндекс.Диск на любое количество устройств, но мы не рекомендуем этого делать. Если работать с одними и теми же файлами на разных устройствах одновременно, могут возникнуть конфликты - файлы могут дублироваться или пропадать.

Можно ли использовать съемный носитель в качестве папки для синхронизации?

Я отключил синхронизацию, но файлы все равно попадают на диск

Чужие файлы могут попасть на ваш Яндекс.Диск, если вы авторизуетесь на чужом мобильном устройстве. В этом случае при включенной автозагрузке файлы с устройства будут загружены на Яндекс.Диск.

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

Выйти на всех устройствах Чтобы на ваш Яндекс.Диск не попадали чужие файлы, выйдите из Яндекс.Диска на всех устройствах. Отозвать доступ программ

Также вы можете отозвать доступ программ и приложений Яндекс.Диска к вашим файлам на сервере:

  1. Откройте страницу .
  2. В списке найдите все строки с названием «Яндекс.Диск» .
  3. Нажмите на каждую строку и нажмите Удалить .
  • Алгоритмы ,
  • Разработка веб-сайтов
  • Яндекс.Диск - один из немногих сервисов Яндекса, частью которого является программное обеспечение для десктопа. И одна из самых важных его составляющих - алгоритм синхронизации локальных файлов с их копией в облаке. Недавно нам пришлось его полностью поменять. Если старая версия с трудом переваривала даже несколько десятков тысяч файлов и к тому же не достаточно быстро реагировала на некоторые «сложные» действия пользователя, то новая, используя те же ресурсы, справляется с сотнями тысяч файлов.

    В этом посте я расскажу, почему так получилось: чего мы не смогли предвидеть, когда придумывали первую версию ПО Яндекс.Диска, и как создавали новую.

    Прежде всего, о самой задаче синхронизации. Технически говоря, она состоит в том, чтобы в папке Яндекс.Диска на компьютере пользователя и в облаке был один и тот же набор файлов. То есть такие действия пользователя, как переименование, удаление, копирование, добавление и изменение файлов, должны синхронизироваться с облаком автоматически.

    Почему это не так просто, как кажется на первый взгляд?

    Теоретически задача может показаться достаточно простой, но в реальности мы сталкиваемся с разными сложными ситуациями. Например, человек переименовал папку на своем компьютере, мы это детектировали и послали команду на бекенд. Однако никто из пользователей не ждет, пока бекенд подтвердит успешность переименования. Человек сразу открывает свою локально переименованную папку, создает в ней подпапку, и, к примеру, переносит в нее часть файлов. Мы попали в ситуацию, в которой невозможно сразу выполнить все необходимые операции синхронизации в облаке. Сначала надо дождаться завершения первой операции и только потом можно продолжать.

    Ситуация может стать еще сложнее, если с одним аккаунтом одновременно работают несколько пользователей или у них есть общая папка. А это случается достаточно часто в организациях, использующих Яндекс.Диск. Представьте себе, что в предыдущем примере в тот момент, когда мы получили от бекенда подтверждение первого переименования, другой пользователь берет и переименовывает эту папку еще раз. В этом случае опять нельзя сразу выполнить действия, которые уже совершил первый пользователь у себя на компьютере. Папка, в которой он работал локально, на бекенде в это время уже называется по-другому.

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

    Прошлая версия алгоритма

    В прошлой версии десктопного ПО Яндекс.Диска для поиска изменений использовался алгоритм сравнения деревьев. Любое другое решение на тот момент не позволяло реализовать поиск перемещений и переименований, так как бэкэнд не имел уникальных идентификаторов объектов.

    В этой версии алгоритма мы использовали три основных дерева: локальное (Local Index), облачное (Remote Index) и последнее синхронизированное (Stable Index). Кроме этого, чтобы предотвратить повторную генерацию уже поставленных в очередь операций синхронизации, использовались ещё два вспомогательных дерева: локальное ожидаемое и облачное ожидаемое (Expected Remote Index и Expected Local Index). В этих вспомогательных деревьях хранилось ожидаемое состояние локальной файловой системы и облака, после выполнения всех операций синхронизации, которые уже поставлены в очередь.


    Процедура сравнения деревьев в старом алгоритме выглядела следующим образом:
    1. Если локальное ожидаемое дерево и облачное ожидаемое дерево пусты, инициализируем их, копируя последнее синхронизированное дерево;
    2. Сравниваем локальное дерево с облачным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации в облаке (создание коллекций, передача файлов в облако, перемещение и удаление в облаке);
    3. Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом облачном дереве;
    4. Сравниваем облачное дерево с локальным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации с локальной файловой системой (создание директорий, скачивание файлов из облака, перемещение и удаление локальных файлов и директорий);
    5. Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом локальном дереве;
    6. Если в очередь попадают одновременные операции с одним и тем же файлом или директорией (например, передача файла в облако и скачивание этого же файла из облака), то фиксируем конфликт - файл изменился в двух местах;
    7. После того, как операция синхронизации выполнена в облаке или с локальной файловой системой, заносим её результат в последнее синхронизированное дерево;
    8. Когда очередь операций синхронизации становится пустой, удаляем локальное ожидаемое и облачное ожидаемое дерево. Синхронизация закончена, и они нам больше не понадобятся.

    Почему нам пришлось придумывать новый алгоритм

    Главными проблемами алгоритма сравнения деревьев стали большое потребление памяти и необходимость сравнения деревьев целиком даже при небольших изменениях, что приводило к большой нагрузке на процессор. Во время обработки изменений даже одного файла использование оперативной памяти возрастало примерно на 35%. Допустим, у пользователя было 20 000 файлов. Тогда при простом переименовании одного файла размером 10Кб потребление памяти вырастало скачкообразно - со 116Мб до 167МБ.

    Также мы хотели увеличить максимальное количество файлов, с которым без проблем может работать пользователь. Несколько десятков и даже сотен тысяч файлов может оказаться, к примеру, у фотографа, который хранит в Яндекс.Диске результаты фотосессий. Эта задача стала особенно актуальной, когда у людей появилась возможность купить дополнительное место на Яндекс.Диске.

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

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

    Новый алгоритм

    Мы решили изменить структуру хранения данных и заменить три дерева (Local Index, Remote Index, Stable Index) на одно, что должно было привести к снижению избыточности в главной структуре данных. Из-за того что ключом в дереве является путь к элементу файловой системы, в результате объединения значительно сократился объем используемой оперативной памяти.


    Еще мы отказались от использования вспомогательных деревьев во время синхронизации, потому что каждый элемент дерева в новой версии хранит все нужные данные. Это изменение структуры сильно упростило отладку кода.

    Так как мы понимали, что это серьезное изменение, то создали прототип, подтвердивший эффективность нового решения. Рассмотрим на примере, как меняются данные в дереве во время синхронизации нового файла.

    1. После того как пользователь добавил в папку Диска новый файл, программа обнаружила его и добавила в дерево новый элемент. У этого элемента известно только одно состояние – local. Так как stable и remote состояния отсутствуют, память под них не выделяется;
    2. Программа выполняет upload файла. Из облака приходит push, подтверждающий появление нового файла, и в дерево добавляется remote состояние;
    3. Состояния local и remote сравниваются. Так как они совпадают, добавляется stable состояние;
    4. Состояния local и remote удаляются. Они больше не нужны, так как вся информация есть в stable.


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

    Другие улучшения

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

    Яндекс.Диск использует дайджесты sha256 и MD5 для проверки целостности файлов, обнаружения изменившихся фрагментов и дедупликации файлов на бекенде. Так как эта задача сильно нагружает CPU, в новой версии реализация расчетов дайджеста была существенно оптимизирована. Скорость получения дайджеста файла увеличена примерно в два раза.

    Цифры

    Синхронизация уникальных 20000 файлов по 10Кб

    Вычисление дайджестов уникальных 20000 файлов по 10кб (индексация)

    Запуск с 20000 синхронизированных файлов по 10Кб

    Upload 1Gb. Соединение Wi-Fi 10 МБит
    Время, сек

    Что получилось

    Из примеров видно, что новая версия ПО Яндекс.Диска использует примерно в 3 раза меньше оперативной памяти и примерно в 2 раза меньше нагружает CPU. Обработка мелких изменений не приводит к увеличению объема используемой памяти.

    В результате проделанных изменений существенно увеличилось количество файлов, с которым без проблем справляется программа. В версии для Windows – 300 000, а на Mac OS X - 900 000 файлов.