Почему яндекс диск дублирует файлы
В данном посте речь пойдёт о Яндекс.Диске, моих фото и о двояком чувстве (собственно, в названии это и прописано).
Но начну из далека. Итак:
Владел я телефоном, на котором было огромное количество прошивок, а так же быстро выходили последние версии последнего андроида. В результате этого перепрошивался мой телефон огромное количество раз. Доходило до того, что за месяц мог прошить его раз 5. Само собой, при перепрошивке удалялись все не перенесённые на пк файлы. Так же я довольно часто фотографировал природу, архитектуру и интересные места (и кучу тетрадей с конспектами). Но по разным причинам (то забыл, то места нет, то фото не очень важные, то при очередном патче система сломалась) перепрошивался без сохранения файлов. Самое обидное было, когда прочитал пост Велопрогулка в Чимганских горах и вспомнил про свой поход по тем же местам с друзьями и захотел тоже "запилить" пост. Но на пк я фото не нашёл, на телефоне тоже, облаками не пользовался, у одного друга фото не было давно, у другого сгорел жёсткий диск да и старый телеграм аккаунт с этими фото был удалён. К счастью, смог восстановить часть фото, но некоторые забавные фото были (как я считал) утеряны навсегда.
Ну а теперь перейдём к сути:
На днях потребовалось мне поделиться некоторыми файлами с несколькими людьми и тут я вспомнил, что когда-то давно регистрировался на Яндекс.Диске и решил скинуть туда и открыть доступ. Зайдя туда, увидел несколько файлов и удалил их всех (места стало свободно 10 ГБ из 10ГБ) . А потом случайно нажал на папку Фото. Там была большая часть фотографий за период от июля 2017, до июля 2018 года. Там же я нашёл все фото с похода на Чимган (которые я считал утерянными), там же были все фото с телефона, который постоянно чистился и фото удалялись. Скажу сразу - именно в этот промежуток пк у меня не было - в августе 2017 уехал в другую страну и временно был без пк, а вот ноут у меня появился только в июле 2018 года (т.е. автоматическая синхронизации с пк и отправки на облако не было). На телефоне НИКОГДА не устанавливался Яндекс.Диск. Единственное, что стояло от яндекса, на тот момент, это яндекс браузер с Алисой, но суммарно на моём телефоне они были не больше месяца и устанавливал я его осенью/зимой (но уж точно не летом). В сам Яндекс.Диск в тот период я так же не заходил.
И вот сейчас у меня двоякое чувство - с одной стороны, теперь у меня есть куча фото, которые я считал удалёнными и за которые было жалко. С другой стороны мучает вопрос - каким образом все эти фото передавались на облако яндекса без моего ведома (и почему они не занимают на нём место) и что ещё они туда могут загружать?
У нас проблема. Сегодня редактировали сайт, куда-то нажали, после чего гостям сайта перестали быть видны документы, загруженные на сайт. Документы были
установил на компьютер яндекс диск. образовался раздел в мой компьютер яндекс диск фото 1. захожу в него ,а там- пустота фото 2. захожу на яндекс диск
Здравствуйте. Подскажите почему при загрузке на яндекс диск фото или видео эти же файлы дублируются на компьютере на диске C в папке YandexDisk и занимают
Добрый день. Имеется очень большая структура файлов и папок на Яндекс диске, которая полностью синхронизируется на компьютер, и до нужного файла порой
Первый раз установила приложение, выбрала папки для автоматической загрузки. Из 3500 фото и видео часть фото загрузилась, и вот уже пару часов висит в
Почему при попытке сохранить с яндекс диска на свой яндекс диск просит войти, я пытаюсь войти со своего аккаунта, но не могу войти, постоянно выкидывает
Я пытаюсь загрузить два файла на яндекс-дис. 4,5 и 2,5 Гб. Синхронизируется уже неделю и никаких результатов. В день на час-два я подключаюсь к
Проблема такая: скачивала новеллы, одна скачалась другие нет.выскакиевает: извлечь в. копировать в. а дальше ничего не происходит, куда не нажимай
Не пользовалась яндекс диском примерно 5-6 месяцев. Сейчас при входе запрашивают номер телефона, который был указан в аккаунте как основной. Этим номером
Я являюсь владельцем двух различных аккаунтов на одном Яндекс диске. На одном - предельная загруженность. а на другом пусто. Нужно переместить из одного
Оба браузера на этом же компьютере. На браузере Гугл Хром - есть диск с файлами загруженными ранее, установленный новый браузер Яндекс браузер. Старые
Интересует путь решения проблемы именно с приложением. Через браузер все работает нормально. Но это не удобно. Переустанавливать , перезагружать,
После 6 марта 2018 фотографии переехали из папки в которую падали мои фотографии с мобильного в отдельную папку Фото. Заходим туда и видим возможность
После блокировки всех сервисов Яндекса на Украине перестал работать Яндекс.диск. В настройках Диска имеется возможность подключить прокси. Как это сделать
Нужно загрузить большой файл, больше 10 гб. Сделала архив, начала загружать на яндекс диск, архив не грузится. Загрузила просто папку, начала грузиться.
И второе: некоторые открываются с Adabe Reader, а другие нет. Как сделать, чтобы все открывались с ним. Спасибо.
по необходимости даю доступ ко многим моим файлам с яндекс-диска открываю публичную ссылку. Но такие ссылки остаются открытыми длительное время, даже
Каждый раз, когда вы копируете файл в папку Яндекс Диска, редактируете или удаляете файл, все изменения дублируются на сервере Диска: их можно видеть на сайте Яндекс Диска. И наоборот — если вы загружаете файлы на сайте, они автоматически отобразятся в программе Яндекс Диск на вашем компьютере.
Таким образом со всех ваших устройств, подключенных к интернету, на Диске видны одни и те же файлы. И если, например, вы удалите файлы на компьютере, они удалятся и из облака. Если вы хотите удалить файл с компьютера, но сохранить на сервере, настройте выборочную синхронизацию.
Примечание. Синхронизировать файлы на телефоне не получится. Скачивать и загружать файлы можно только вручную. Но вы можете включить безлимитную автозагрузку фото и видео.
Как использовать Диск на нескольких устройствах
Допустим, вы создали документ document.docx в папке Диска на домашнем ноутбуке, отключенном от интернета, а затем загрузили на Диск файл с тем же именем с рабочего\nкомпьютера.
Когда вы подключите ноутбук к интернету, Яндекс Диск начнет синхронизацию. Обнаружив разные файлы с одинаковыми именами, Диск переименует один из них: в результате файлы будут называться document.docx и document (2).docx .
На скольких устройствах можно использовать Яндекс Диск?
Теоретически вы можете установить приложение и программу Яндекс Диск на любое количество устройств, но мы не рекомендуем этого делать. Если работать с одними и теми же файлами на разных устройствах одновременно, могут возникнуть конфликты — файлы могут дублироваться или пропадать.
Цифры
Синхронизация уникальных 20000 файлов по 10Кб
Версия ПО | Загрузка на CPU. Расчет дайджестов | Нагрузка на CPU upload | Использование оперативной памяти, Мб |
---|---|---|---|
Яндекс.Диск 1.3.3 | 28% (1 ядро 100%) | Примерно 1% | 102 |
Яндекс.Диск 1.2.7 | 48% (2 ядра 100%) | Примерно 10% | 368 |
Вычисление дайджестов уникальных 20000 файлов по 10кб (индексация)
Версия ПО | Нагрузка на CPU | Время, сек | Использование оперативной памяти, Мб |
---|---|---|---|
Яндекс.Диск 1.3.3 | 25% (1 ядро 100%) | 190 | 82 |
Яндекс.Диск 1.2.7 | 50% (2 ядра 100%) | 200 | 245 |
Запуск с 20000 синхронизированных файлов по 10Кб
Версия ПО | Нагрузка на CPU | Время, сек | Использование оперативной памяти, Мб |
---|---|---|---|
Яндекс.Диск 1.3.3 | 25% (1 ядро 100%) | 10 | 55 |
Яндекс.Диск 1.2.7 | 50% (2 ядра 100%) | 22 | 125 |
Upload 1Gb. Соединение Wi-Fi 10 МБит
Версия ПО | Нагрузка на CPU | Время, сек |
---|---|---|
Яндекс.Диск 1.3.3 | 5% | 1106 |
Яндекс.Диск 1.2.7 | 5% | 2530 |
Почему нам пришлось придумывать новый алгоритм
Главными проблемами алгоритма сравнения деревьев стали большое потребление памяти и необходимость сравнения деревьев целиком даже при небольших изменениях, что приводило к большой нагрузке на процессор. Во время обработки изменений даже одного файла использование оперативной памяти возрастало примерно на 35%. Допустим, у пользователя было 20 000 файлов. Тогда при простом переименовании одного файла размером 10Кб потребление памяти вырастало скачкообразно — со 116Мб до 167МБ.
Также мы хотели увеличить максимальное количество файлов, с которым без проблем может работать пользователь. Несколько десятков и даже сотен тысяч файлов может оказаться, к примеру, у фотографа, который хранит в Яндекс.Диске результаты фотосессий. Эта задача стала особенно актуальной, когда у людей появилась возможность купить дополнительное место на Яндекс.Диске.
В разработке тоже хотелось кое-что поменять. Отладка старой версии вызывала трудности, так как данные о состояниях одного элемента находились в разных деревьях.
К этому времени на бекенде появились id объектов, с помощью которых можно было более эффективно решить задачу обнаружения перемещений — ранее мы использовали пути.
Скорость синхронизации
Чтобы увидеть, с какой скоростью идет синхронизация, нажмите значок Яндекс Диска: скорость загрузки и скачивания будет указана во всплывающем окне.
Скорость синхронизации рассчитывается с учетом экономии трафика и ресурсов системы. Также скорость может ограничиваться вашим провайдером — проверьте скорость соединения с интернетом.
Что произойдет, если я удалю файлы из папки Яндекс Диска?
Когда вы удаляете файлы в программе, они попадают в Корзину и хранятся в ней 30 дней. После этого они автоматически удаляются с сервера. Восстановить удаленные с сервера файлы нельзя.
Внимание. Файлы, перемещенные в Корзину, продолжают занимать место на вашем Диске. Если вам не хватает места, очистите Корзину.
Что получилось
Из примеров видно, что новая версия ПО Яндекс.Диска использует примерно в 3 раза меньше оперативной памяти и примерно в 2 раза меньше нагружает CPU. Обработка мелких изменений не приводит к увеличению объема используемой памяти.
В результате проделанных изменений существенно увеличилось количество файлов, с которым без проблем справляется программа. В версии для Windows – 300 000, а на Mac OS X — 900 000 файлов.
Многие пользуются удобным сервисом Яндекс Диск для хранения своих файлов, и причин этому немало - одна из них в том, что Яндекс Диск предоставляет удобный доступ к содержимому файлов по популярному протоколу WebDAV - можно просто подключить свое хранилище как сетевой диск в Windows и пользоваться им - из проводника, из Total Commander или любым удобным способом.
Возможность подключение по протоколу WebDAV была анонсирована яндексом, размещена на странице поддержки (сейчас стыдливо выпилена), и активно пиарилась в сети. На пикабу есть пост с описанием подключения Яндекс Диска в качестве сетевого через WebDAV.
Но в какой-то момент жадность победила что-то пошло не так и компания решила, что ей плевать на пользователей ни к чему все это, и вероломно по-тихому, без объявления войны без официального объявления и уведомления пользователей ограничила возможности использования протокола, причем своеобразным образом - небольшие файлы загружаются нормально, а файлы размером больше нескольких десятков мегабайт оказываются нулевого размера, при этом загрузка якобы происходит успешно, в результате пользователь считает, что файл сохранен на Яндекс Диске, а фактически его нет. Таким образом без какого-либо предупреждения на моем Яндекс Диске исчезли несколько десятков файлов, которые я загружал на свой Яндекс Диск посредством проводника и файловых менеджеров в течение последнего месяца.
В ответ на вопросы пользователей техподдержка заявляет (пример отзыва, другой пример), что пусть они жрут пирожные устанавливают себе шпионскую программу клиент яндекс, который будет следить за ними и тормозить систему сама загружать обновления файлов на яндекс диск.
В общем, будьте внимательны и не доверяйте жуликам следите за своими файлами (проверьте файлы, загруженные через WebDAV после 10 октября, если они размером больше 20мб).
Другие улучшения
В новой версии мы поработали и над другими улучшениями, повлиявшими на производительность. Сохранение дерева сделали инкрементальным, что позволяет записывать в файл только последние изменения.
Яндекс.Диск использует дайджесты sha256 и MD5 для проверки целостности файлов, обнаружения изменившихся фрагментов и дедупликации файлов на бекенде. Так как эта задача сильно нагружает CPU, в новой версии реализация расчетов дайджеста была существенно оптимизирована. Скорость получения дайджеста файла увеличена примерно в два раза.
Что произойдет, если переместить папку Яндекс Диска?
Если вы перенесете папку Яндекс Диска, не указав новое положение в настройках программы, программа создаст папку заново на прежнем месте. Как переместить вашу копию Диска, см. в разделе Как выбрать другую папку для синхронизации с сервером.
Новый алгоритм
Мы решили изменить структуру хранения данных и заменить три дерева (Local Index, Remote Index, Stable Index) на одно, что должно было привести к снижению избыточности в главной структуре данных. Из-за того что ключом в дереве является путь к элементу файловой системы, в результате объединения значительно сократился объем используемой оперативной памяти.
Еще мы отказались от использования вспомогательных деревьев во время синхронизации, потому что каждый элемент дерева в новой версии хранит все нужные данные. Это изменение структуры сильно упростило отладку кода.
Так как мы понимали, что это серьезное изменение, то создали прототип, подтвердивший эффективность нового решения. Рассмотрим на примере, как меняются данные в дереве во время синхронизации нового файла.
- После того как пользователь добавил в папку Диска новый файл, программа обнаружила его и добавила в дерево новый элемент. У этого элемента известно только одно состояние – local. Так как stable и remote состояния отсутствуют, память под них не выделяется;
- Программа выполняет upload файла. Из облака приходит push, подтверждающий появление нового файла, и в дерево добавляется remote состояние;
- Состояния local и remote сравниваются. Так как они совпадают, добавляется stable состояние;
- Состояния local и remote удаляются. Они больше не нужны, так как вся информация есть в stable.
На этом примере видно, что в новом алгоритме синхронизации обрабатываются только те элементы и события, данные об изменениях в которых были получены от файловой системы или облака, а не всё дерево целиком, как это было ранее. При необходимости будут обработаны родительские или дочерние узлы (например, в случае перемещения папки).
Cинхронизация с двумя аккаунтами
Если к программе Диска подключены два аккаунта, то синхронизация будет происходить сразу для обоих. Процесс будет идти параллельно: и для текущего аккаунта, и для фонового.
Папка синхронизации у каждого аккаунта будет своя — программа добавит логины в названия папок Диска.
Почему это не так просто, как кажется на первый взгляд?
Теоретически задача может показаться достаточно простой, но в реальности мы сталкиваемся с разными сложными ситуациями. Например, человек переименовал папку на своем компьютере, мы это детектировали и послали команду на бекенд. Однако никто из пользователей не ждет, пока бекенд подтвердит успешность переименования. Человек сразу открывает свою локально переименованную папку, создает в ней подпапку, и, к примеру, переносит в нее часть файлов. Мы попали в ситуацию, в которой невозможно сразу выполнить все необходимые операции синхронизации в облаке. Сначала надо дождаться завершения первой операции и только потом можно продолжать.
Ситуация может стать еще сложнее, если с одним аккаунтом одновременно работают несколько пользователей или у них есть общая папка. А это случается достаточно часто в организациях, использующих Яндекс.Диск. Представьте себе, что в предыдущем примере в тот момент, когда мы получили от бекенда подтверждение первого переименования, другой пользователь берет и переименовывает эту папку еще раз. В этом случае опять нельзя сразу выполнить действия, которые уже совершил первый пользователь у себя на компьютере. Папка, в которой он работал локально, на бекенде в это время уже называется по-другому.
Бывают случаи, когда файл на компьютере пользователя нельзя назвать так же, как он называется в облаке. Это может произойти, если в имени есть символ, который не может использоваться локальной файловой системой, или в том случае, когда пользователя приглашают в общую папку, а у него есть своя папка с таким именем. В таких случаях нам приходится использовать локальные псевдонимы и отслеживать их связь с объектами в облаке.
Как синхронизируются измененные файлы
Яндекс Диск определяет, какие именно части файла были изменены, и выгружает на сервер только измененные фрагменты, а не файл целиком.
Можно ли не держать файлы, хранящиеся на Диске, на своем компьютере?
Программа Яндекс Диск 3.0 позволяет синхронизировать с компьютером не все файлы с вашего Диска, чтобы сэкономить место на компьютере. Например, если вы часто работаете с папкой Документы , включите для нее синхронизацию — эта папка будет храниться на компьютере. Остальные папки будут храниться только в облаке, но будут также доступны в программе.
Настроить выборочную синхронизацию можно по инструкции Выборочная синхронизация папок.
Яндекс.Диск — один из немногих сервисов Яндекса, частью которого является программное обеспечение для десктопа. И одна из самых важных его составляющих — алгоритм синхронизации локальных файлов с их копией в облаке. Недавно нам пришлось его полностью поменять. Если старая версия с трудом переваривала даже несколько десятков тысяч файлов и к тому же не достаточно быстро реагировала на некоторые «сложные» действия пользователя, то новая, используя те же ресурсы, справляется с сотнями тысяч файлов.
В этом посте я расскажу, почему так получилось: чего мы не смогли предвидеть, когда придумывали первую версию ПО Яндекс.Диска, и как создавали новую.
Прежде всего, о самой задаче синхронизации. Технически говоря, она состоит в том, чтобы в папке Яндекс.Диска на компьютере пользователя и в облаке был один и тот же набор файлов. То есть такие действия пользователя, как переименование, удаление, копирование, добавление и изменение файлов, должны синхронизироваться с облаком автоматически.
Прошлая версия алгоритма
В прошлой версии десктопного ПО Яндекс.Диска для поиска изменений использовался алгоритм сравнения деревьев. Любое другое решение на тот момент не позволяло реализовать поиск перемещений и переименований, так как бэкэнд не имел уникальных идентификаторов объектов.
В этой версии алгоритма мы использовали три основных дерева: локальное (Local Index), облачное (Remote Index) и последнее синхронизированное (Stable Index). Кроме этого, чтобы предотвратить повторную генерацию уже поставленных в очередь операций синхронизации, использовались ещё два вспомогательных дерева: локальное ожидаемое и облачное ожидаемое (Expected Remote Index и Expected Local Index). В этих вспомогательных деревьях хранилось ожидаемое состояние локальной файловой системы и облака, после выполнения всех операций синхронизации, которые уже поставлены в очередь.
Процедура сравнения деревьев в старом алгоритме выглядела следующим образом:
- Если локальное ожидаемое дерево и облачное ожидаемое дерево пусты, инициализируем их, копируя последнее синхронизированное дерево;
- Сравниваем локальное дерево с облачным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации в облаке (создание коллекций, передача файлов в облако, перемещение и удаление в облаке);
- Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом облачном дереве;
- Сравниваем облачное дерево с локальным ожидаемым и по результатам сравнения отдельных узлов добавляем в очередь операции синхронизации с локальной файловой системой (создание директорий, скачивание файлов из облака, перемещение и удаление локальных файлов и директорий);
- Для всех операций, которые поставлены в очередь на предыдущем шаге, фиксируем их будущий эффект в ожидаемом локальном дереве;
- Если в очередь попадают одновременные операции с одним и тем же файлом или директорией (например, передача файла в облако и скачивание этого же файла из облака), то фиксируем конфликт — файл изменился в двух местах;
- После того, как операция синхронизации выполнена в облаке или с локальной файловой системой, заносим её результат в последнее синхронизированное дерево;
- Когда очередь операций синхронизации становится пустой, удаляем локальное ожидаемое и облачное ожидаемое дерево. Синхронизация закончена, и они нам больше не понадобятся.
Читайте также: