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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    В этой версии алгоритма мы использовали три основных дерева: локальное (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 файлов.

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

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

    Вход

    Как войти в Яндекс.Диск с Android:


    Использование

    Действия, которые можно выполнять в приложении:

    • сортировка документов или по имени, или по дате изменения;
    • выбор документа;
    • поиск по документам.

    Прикосновение к иконке «гамбургер-меню» даст возможность перейти в настройки диска. Здесь есть подпункты:

    1. Диск (перемещаемся в наше хранилище).
    2. Офлайн (переместит в окно, в котором доступны без интернета, как отдельные документы, так и их папки).
    3. Корзина (раскроется окно с удаленными документами).

    Касание надписи «Настройки» позволит ознакомиться с установленными на телефоне настройками:

    • увеличить размер диска;
    • очистить рубрику «Офлайн» или кеш;
    • опция, позволяющая осуществить «переезд с телефона на телефон».

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

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

    ---
    Команда Яндекс.Диска,
    помогаем сохранить важное
    ","html":"

    Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

    Управление синхронизацией папок доступно в настройках приложений.

    ---
    Команда Яндекс.Диска,
    помогаем сохранить важное

    ","contentType":"text/html"},"proposedBody":{"source":"

    Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

    Управление синхронизацией папок доступно в настройках приложений.

    ---
    Команда Яндекс.Диска,
    помогаем сохранить важное

    Для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.

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

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

    Управление синхронизацией папок доступно в настройках приложений.

    ---
    Команда Яндекс.Диска,
    помогаем сохранить важное

    ","contentType":"text/html"},"authorId":"120228024","slug":"57789","canEdit":false,"canComment":false,"isBanned":false,"canPublish":false,"viewType":"old","isDraft":false,"isSubscriber":false,"commentsCount":164,"modificationDate":"Tue Jan 29 2013 12:13:00 GMT+0000 (UTC)","showPreview":true,"approvedPreview":{"source":" для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","html":"В приложениях Яндекс.Диска для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","contentType":"text/html"},"proposedPreview":{"source":" для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","html":"В приложениях Яндекс.Диска для Windows и Mac OS X появилась важная функция - выборочная синхронизация. Теперь вы можете выбирать, какие папки хранить на компьютере, а какие - только на Яндекс.Диске.","contentType":"text/html"},"titleImage":null,"tags":[{"displayName":"Диск","slug":"disk","categoryId":"120469667","url":"/blog/company??tag=disk"}],"isModerator":false,"commentsEnabled":true,"url":"/blog/company/57789","urlTemplate":"/blog/company/%slug%","fullBlogUrl":"https://yandex.ru/blog/company","addCommentUrl":"/blog/createComment/company/57789","updateCommentUrl":"/blog/updateComment/company/57789","addCommentWithCaptcha":"/blog/createWithCaptcha/company/57789","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog":"/blog/company","urlEditPost":"/blog/56288d577eba6ef16f808526/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/56288d577eba6ef16f808526/publish","urlUnpublishPost":"/blog/56288d577eba6ef16f808526/unpublish","urlRemovePost":"/blog/56288d577eba6ef16f808526/removePost","urlDraft":"/blog/company/57789/draft","urlDraftTemplate":"/blog/company/%slug%/draft","urlRemoveDraft":"/blog/56288d577eba6ef16f808526/removeDraft","urlTagSuggest":"/blog/api/suggest/company","urlAfterDelete":"/blog/company","isAuthor":false,"subscribeUrl":"/blog/api/subscribe/56288d577eba6ef16f808526","unsubscribeUrl":"/blog/api/unsubscribe/56288d577eba6ef16f808526","urlEditPostPage":"/blog/company/56288d577eba6ef16f808526/edit","urlForTranslate":"/blog/post/translate","urlRelateIssue":"/blog/post/updateIssue","urlUpdateTranslate":"/blog/post/updateTranslate","urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/company/57789/translationInfo","urlRelatedArticles":"/blog/api/relatedArticles/company/57789","author":{"id":"120228024","uid":{"value":"120228024","lite":false,"hosted":false},"aliases":{},"login":"anyksenya","display_name":{"name":"anyksenya","avatar":{"default":"21377/120228024-6941905","empty":false}},"address":"[email protected]","defaultAvatar":"21377/120228024-6941905","imageSrc":"https://avatars.mds.yandex.net/get-yapic/21377/120228024-6941905/islands-middle","isYandexStaff":false},"originalModificationDate":"2013-01-29T08:13:52.000Z","socialImage":{"orig":{"fullPath":"https://avatars.mds.yandex.net/get-yablogs/49865/file_1465551301378/orig"}}}}}">

    Выборочная синхронизация папок на Яндекс.Диске

    ---
    Команда Яндекс.Диска,
    помогаем сохранить важное

    Если не требуется, чтобы файлы физически лежали на рабочем столе, то можно разместить на рабочем столе ссылки (ярлыки) на файлы с Яндекс-диска

    Как синхронизировать Ваш рабочий стол Windows к облаку

    Самая большая нижняя сторона доверия рабочему столу, чтобы хранить файлы, является всем, в чем Вы нуждаетесь, заблокирован внизу на одном PC. Итак, почему бы не послать Ваш рабочий стол в облако, где Вы можете получить доступ ко всем своим важным данным от других PC и мобильных устройств через SkyDrive (скоро через OneDrive)?

    Для этого наконечника Вы будете нуждаться в PC Windows 8.1 или Windows 7, XP или PC Перспективы с установленной программой рабочего стола SkyDrive, хотя та же самая основная процедура, также уверенно работает с Dropbox, Гугл-Драйв или любым другим синхронизирующим облаком обслуживанием, которое объединяется с File Explorer Windows.

    Прояснение для запуска

    Перейдите к своей папке SkyDrive и наверху окна File Explorer выберитеHome>New Folder. После этого назовите новую папку так, как Вам захочется. Затем запустите File Explorer. В Windows 8.1 откройте этот PC и найдите настольную папку. Если Вы используете другую версию Windows, направляетесь в Компьютер> Пользователи> [Ваше имя пользователя]> Рабочий стол, чтобы найти Вашу настольную папку. Важная подсказка: не щелкайте правой кнопкой мыши по значку на рабочем столе “Избранные” наверху окна File Explorer, поскольку Вы не достигнете того, чего хотите.

    Как только Вы нашли свою папку Desktop, щелкните правой кнопкой мыши по ней и выберите Свойства. В новом окне, которое открывается, нажмите на вкладку Местоположение. В основании выявите в движении … кнопку, которая откроет другое окно. Проведите к папке Desktop, которую Вы просто создали в пределах своей папки SkyDrive, и щелкните кнопкой Select Folder. Как только Вы возвращаетесь к имущественному окну, область ввода текста должна выглядеть примерно так “C:\Users\\SkyDrive\Desktop”

    Теперь нажмите «Применить». Windows спросит Вас, хотите ли Вы переместить все. Нажимаете «Да» и все будет перемещено. Теперь откройте SkyDrive в Сети, Android, IOS или Телефоне Windows, и Вы должны увидеть, что Ваши настольные файлы начинают перемещаться на Ваш счет хранения в облаке. В зависимости от числа и размера Ваших файлов, это может занять несколько минут.

    Синхронизация рабочего стола через PC

    Если Вы хотели бы синхронизировать рабочие столы через PC, просто повторите этот же процесс на каждом PC, поскольку Microsoft не встроил настольную синхронизацию в Windows как особенность по умолчанию. Удостоверьтесь, что указали на ту же самую настольную папку в SkyDrive каждый раз. Как только Вы делаете это, большинство Ваших коротких путей программы и веб-коротких путей должны работать точно также с различными PC, предполагая, что у Вас есть целевые программы и папки, установленные на обоих PC в том же самом местоположении. Вы можете заметить, что некоторые символы для программ не перейдут, но короткие пути все еще будут работать. Любые файлы и папки, сохраненные непосредственно на рабочий стол, будут также синхронизировать через PC без проблем.