Как Облако@mail.ru спасло все* мои файлы и что из этого вышло



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

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

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

В конце статьи есть UPD, UPD2, UPD3 и UPD4, в котором описаны причины такого поведения.
TL;DR: ложная тревога, с файлами и синхронизацией всё в порядке, а вот пользовательский интерфейс и работу тех. поддержки нужно дорабатывать.


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

Скачать файлы по WebDav тоже невозможно:



Остаётся только возможность скачать файлы через веб-интерфейс. Файлы там можно скачивать по одному, а можно выбрать несколько файлов или папок и скачать их одним архивом, что довольно удобно. Единственное ограничение — архив не может превышать 4Гб.



Я попробовал пойти этим путём, но быстро понял, что это очень неудобный вариант:

  • Ограничение в 4 гигабайта означает, что если у вас в облаке находится около терабайта, придётся качать как минимум 250 архивов.
  • Каждый архив нужно создавать вручную, выбирая папки, считая их суммарный размер и помечая те, что уже скачаны.
  • Иногда архивы не открываются по неизвестной причине.
  • Теряется структура папок.

Файлы мне всё-таки нужны, поэтому, я решил написать свой инструмент, а заодно изучить что-нибудь новое. Ну и получить удовольствие от решения задачи, разумеется.

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

Поэтому, у меня появилось два возможных варианта решения: подключить
Selenium и всё-таки строить дерево из html или разобраться с внутренним API, которое используется в скрипте.

Я выбрал второй путь, как самый разумный — зачем что-то парсить с использованием сторонних инструментов, если уже есть готовое API?
К счастью, скрипт не был обфусцирован и даже не сжат — мне были доступны исходные имена переменных и функций и комментарии разработчиков, это сильно облегчило задачу.

После нескольких минут изучения я увидел, что все доступные методы API описаны в массиве:


Вот поэтому я и не трачу в своём коде времени на красивое форматирование — кто-нибудь его обязательно поломает.

Я рассудил, что для получения списка папок и файлов в директории нужно вызывать метод folder. Для этого нужно отправить get-запрос на адрес https://cloud.mail.ru/api/v2/folder.

Открываем страницу в браузере и видим такой ответ:

{"body":"user","time":1457097026874,"status":403}

Очевидно, нужно авторизоваться на портале. Авторизуюсь, повторяю запрос и вижу другую ошибку:

{"email":"me@mail.ru","body":"token","time":1457097187300,"status":403

Ничего удивительного, для выполнения запросов к API требуется токен. В списке методов есть два подходящих: tokens/csrf и tokens/download.

При запросе https://cloud.mail.ru/api/v2/tokens/download отдаётся точно такая же ошибка токена, а значит нам нужен именно csrf-токен.

Запрашиваем его, добавляем в вызов метода folder параметр ?token=X9ccJNwYeowQTakZC1yGHsWzb7q6bTpP и получаем новую ошибку:

{"email":"me@mail.ru","body":{"error":"invalid args"},"time":1457097695182,"status":400}

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

Итак, в ответ на запрос по url https://cloud.mail.ru/api/v2/folder?token=X9ccJNwYeowQTakZC1yGHsWzb7q6bTpP&home=/ возвращается вот такой объект:

{
    "email": "me@mail.ru",
    "body": {
        "count": {"folders": 1, "files": 1},
        "tree": "363831373562653330303030",
        "name": "/",
        "grev": 17,
        "size": 978473730,
        "sort": {"order": "asc", "type": "name"},
        "kind": "folder",
        "rev": 9,
        "type": "folder",
        "home": "/",
        "list": [{
            "count": {"folders": 1, "files": 3},
            "tree": "363831373562653330303030",
            "name": "Фотографии",
            "grev": 17,
            "size": 492119223,
            "kind": "folder",
            "rev": 16,
            "type": "folder",
            "home": "/Фотографии"
        }, {
            "mtime": 1456774311,
            "virus_scan": "pass",
            "name": "Полет.mp4",
            "size": 486354507,
            "hash": "C2AD142BDF1E4F9FD50E06026BCA578198BFC36E",
            "kind": "file",
            "type": "file",
            "home": "/Полет.mp4"
        }]
    },
    "time": 1457097848869,
    "status": 200
}

Информация о файлах и директориях — то, что нужно!

Работоспособность API подтверждена, схема его работы понятная — можно приступать к написанию программы. Я решил писать консольное приложение на php, поскольку хорошо знаю этот язык. Для этой задачи идеально подходит компонент Console из состава Symfony. Я уже писал консольные команды для Laravel, которые построены как раз на этом компоненте, но там уровень абстракции довольно высок и напрямую с ним я не работал, поэтому решил, что настало время познакомиться поближе.

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


Так выглядит приложение в процессе скачивания файлов.


А вот так по завершении: показывается небольшая табличка (максимум 100 строк) с информацией о скачаных файлах. Никакой практической пользы она не несёт и сделана исключительно в образовательных целях.

В состав консольного приложения может входить несколько команд, вызываемых следующим образом: php app.php command argument --option. Но для моих целей нужна всего одна команда и я хотел бы запускать скачивание так: php app.php argument --option. Этого легко добиться при помощи инструкции из документации компонента.

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

Здесь я тоже не стал изобретать велосипед и воспользовался прекрасной библиотекой Guzzle. С её помощью очень удобно отправлять http запросы, при этом она использует интерфейсы PSR-7.

При авторизации с главной страницы mail.ru отправляется post-запрос на адрес https://auth.mail.ru/cgi-bin/auth, содержащий поля Login и Password.

Вот так выглядит метод авторизации в моём приложении
/**
* @throws InvalidCredentials
*/
private function auth()
{
    $expectedTitle = sprintf('Входящие - %s - Почта Mail.Ru', $this->login);

    $authResponse = $this->http->post(
        static::AUTH_DOMAIN . '/cgi-bin/auth',
        [
            'form_params' => [
                'Login' => $this->login,
                'Password' => $this->password,
            ]
        ]
    );

    try {
        // http://php.net/manual/en/domdocument.loadhtml.php#95463
        libxml_use_internal_errors(true);

        $this->dom->loadHTML($authResponse->getBody());

        $actualTitle = $this->dom->getElementsByTagName('title')->item(0)->textContent;
    } catch (\Exception $e) {
        throw new InvalidCredentials;
    }

    if ($actualTitle !== $expectedTitle) {
        throw new InvalidCredentials;
    }
}

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

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

Далее я попробовал запросить csrf-токен, но с удивлением получил уже знакомую ошибку:

{"status":403,"body":"user"}

Я занялся отладкой запросов и увидел, что авторизация происходит успешно, но, тем не менее, токен мне не отдавался. Очень похоже на проблему с куками и действительно, оказывается, в Guzzle они по-умолчанию выключены и их нужно включать руками.

Проще всего это сделать один раз при инициализации клиента:

$client = new \GuzzleHttp\Client(['cookies' => true]);

Ещё одним параметром инициализации является 'debug' => true, с ним отладка запросов почти безболезненна.

Настроив куки, я снова попробовал получить токен и получил в ответ ошибку авторизации, с которой до этого не сталкивался:

{"email":"me@mail.ru","body":"nosdc","time":1457097187300,"status":403}

После чтения исходников и мониторинга процесса авторизации я увидел, что sdc — это ещё одна кука, которая получается отдельным запросом при старте приложения: https://auth.mail.ru/sdc?from=https://cloud.mail.ru/home.

Я добавил этот запрос после запроса авторизации и наконец-то смог получить токен. Ну а дальше дело техники — запрашивать содержимое корневой папки и рекурсивно содержимое её подпапок, и дерево готово.

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

Механизм скачивания немного хитрый: нужно сначала запросить рекомендуемый шард (что-то похожее на https://cloclo28.datacloudmail.ru/get/) и только потом скачивать файл.

Учитывая, что адреса шардов отличаются только цифрой, думаю, можно было бы не заморачиваться и захардкодить адрес, но если уж делать, то делать до конца!

Для получения массива шардов нужно выполнить метод dispatcher (https://cloud.mail.ru/api/v2/dispatcher?token=X9ccJNwYeowQTakZC1yGHsWzb7q6bTpP):

{
    "email": "me@mail.ru",
	"body": {
		"video": [{"count": "3", "url": "https://cloclo22.datacloudmail.ru/video/"}],
		"view_direct": [{"count": "250", "url": "http://cloclo18.cloud.mail.ru/docdl/"}],
		"weblink_view": [{"count": "50", "url": "https://cloclo18.datacloudmail.ru/weblink/view/"}],
		"weblink_video": [{"count": "3", "url": "https://cloclo18.datacloudmail.ru/videowl/"}],
		"weblink_get": [{"count": 1, "url": "https://cloclo27.cldmail.ru/2yoHNmAc9HVQzZU1hcyM/G"}],
		"weblink_thumbnails": [{"count": "50", "url": "https://cloclo3.datacloudmail.ru/weblink/thumb/"}],
		"auth": [{"count": "500", "url": "https://swa.mail.ru/cgi-bin/auth"}],
		"view": [{"count": "250", "url": "https://cloclo2.datacloudmail.ru/view/"}],
		"get": [{"count": "100", "url": "https://cloclo27.datacloudmail.ru/get/"}],
		"upload": [{"count": "25", "url": "https://cloclo22-upload.cloud.mail.ru/upload/"}],
		"thumbnails": [{"count": "250", "url": "https://cloclo3.cloud.mail.ru/thumb/"}]
	},
	"time": 1457101607726,
	"status": 200
}

Нас интересует массив, хранящийся в get.

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

Итоговый код выложен на GitHub под лицензией MIT, буду рад, если он кому-то пригодится.

Приложение далеко от идеала, его функционал ограничен, в нём совершенно точно есть баги и покрытие тестами оставляет желать лучшего, но оно на все 100% решило мою задачу, а ведь именно это требуется от MVP.

P.S. Хочу выразить-таки спасибо Mail.ru за то, что, во-первых, вместе с облачным клиентом у меня ни разу не установился «Амиго», а во-вторых, за то, что спасли меня от потери всего домашнего архива (даже не уверен, что из этого важнее). Но всё же, от греха подальше, я решил переехать в облако другой компании: 200 рублей в месяц — небольшая плата за то, чтобы мне не пришлось повторять этот аттракцион ещё раз.

* Все, которые не успело сначала удалить.

UPD: Общение с тех. поддержкой.

[[[[ У меня возникают проблемы с синхронизацией..., другая проблема, Форма обратной связи ]]]]
Добрый день.
Я заменил жесткий диск, на котором располагалась папка облака. Старый диск сломался, поэтому перенести данные с него нет возможности. В веб-интерфейсе все мои данные на месте.
Когда я создал пустую папку на новом диске и настроил её в приложении, при синхронизации начали удаляться файлы в облаке.
Как мне настроить приложение на компьютере, чтобы оно считало основной копией веб, а не пустую папку — то есть начало бы скачивать файлы на компьютер, а не удалять их в облаке.
Пробовал скачивать файлы через браузер, но это нереально — их очень много.


support@cloud.mail.ru 29.12.15
Здравствуйте.

К сожалению, восстановить удалённые одновременно и в Облаке, и на ПК файлы
нельзя.

По умолчанию между web-интерфейсом и приложением на компьютере
осуществляется полная двусторонняя синхронизация — если вы удаляете файл из
Облака в web-интерфейсе, то файл удаляется и в приложении, так же и
наоборот: удаляя файл в приложении, вы удаляете файл и в Облаке.

Вы можете настроить выборочную синхронизацию в ПК-клиенте Облака. Для этого
кликните на иконке Облака (в системном трее) правой кнопкой мыши и
перейдите в раздел «Выбрать папки».
В открывшемся окне снимите галочки напротив тех папок, синхронизацию для
которых вы хотите отменить и нажмите «Выбрать».
Если ранее папка была синхронизирована, то она будет удалена с вашего
компьютера, но в web-интерфейсе Облака папка, а также все содержащиеся в
ней файлы, сохранятся.
Чтобы вновь включить синхронизацию для удаленной ранее папки, кликните на
иконку приложения Облака правой кнопкой мыши, нажмите «Выбрать папки» и
установите галочку напротив имени необходимой папки.

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

Подробнее о синхронизации Вы можете прочитать в системе Помощи
help.mail.ru/cloud_web/synch


Алексей Уколов 29.12.15
Возможно, я не совсем явно обозначил свою проблему, попробую перефразировать.

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

Как мне запустить процесс в обратном направлении — скачать всё из облака на компьютер, не используя веб-интерфейс.

Если это невозможно сделать через приложение, есть ли какие-то альтернативные инструменты? WebDav, как я понимаю, еще не реализован?


support@cloud.mail.ru 29.12.15
Здравствуйте.

На текущий момент данная функциональность отсутствует.

Ваше замечание передано разработчикам.


UPD2: Проблема до сих пор воспроизводится, представители Облака@mail.ru говорят, что это нетипичное поведение и проблема локальная, в комментариях есть сообщения, что синхронизация с пустой папкой работает как нужно.
Добавил видеопример: youtu.be/dTF9UCdN2S8
Прошу прощения за вотермарки и общее качество, просто proof of concept.

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

UPD4: Bulldozavr написал, что, похоже, это удаляются системные файлы Thumbs.db и desktop.ini. Я запустил синхронизацию и не стал её останавливать — действительно, периодически в статусе было видно такие файлы (но из-за того, что ширина контекстного меню ограничена, а доступного файла лога нет, пользователю убедиться, что удаляются только эти файлы невозможно).
Спустя пару минут все системные файлы, судя по всему, удалились и началась закачка из облака на компьютер, как и должно быть.
Вердикт следующий: синхронизация работает нормально, хоть и пугает поначалу пользователя удалением файлов из облака; тех. поддержка работает плохо.
Ну а мой опыт написания консольных приложений на php уже никуда не денется :)
Поделиться публикацией

Похожие публикации

Комментарии 118
    +21
    Очень вовремя прочитал ваш пост. Как раз на днях поменял жесткий диск и хотел уже поставить приложение, да на ночь запустить синхронизацию. В облаке весь фото-архив за 5 лет.
    Большое вам спасибо.
      +30
      Бесплатный сыр всегда для второй мыши.
        +14
        Ну по идее у mail.ru же должен быть какой-то бэкап, они же гарантируют вам сохранность ваших данных. То есть можно, если что, им написать и попросить восстановить.
        Другое дело, что они могут за это попросить вас поставить амиго…
          +4
          Вот кстати залез, глянуть, как там в облаке Mail.ru, и не нашел привычной мне по Яндекс.Диску и Microsoft OneDrive корзины, куда помещаются файлы перед окончательным удалением. Хорошо, что не хранил на mail.ru ничего важного.
            0
            Мы работаем и над этой идеей, и над многими другими. По поводу безопасности и прочего — рекомендую включить двухфакторную аутентификацию и, как вариант, хранить в Облаке зашифрованные архивы.
            И Вы можете написать мне о любом замеченном баге в личку.
              +2
              Ребят, "безопасность" в случае облака это именно вопрос сохранности данных, а не авторизации и прочей секурити
            +6
            у mail.ru же должен быть какой-то бэкап, они же гарантируют вам сохранность ваших данных
            Мэйл.Ру <…> имеет право <…> удалять Контент на Персональном дисковом пространстве <…> не несет ответственности за возможные сбои и перерывы в работе Сервиса и вызванные ими потерю информации
            © Лицензионное соглашение
            –3
            Не стоит обобщать.
            С описанным случаем мы разбираемся с Алексеем, но это совершенно точно не стандартное поведение сервиса.
              +3
              Я не обобщаю. Я думаю… рисковать или нет.
              Но спасибо, что отписались.
              flame Хотя по "Профилю" вы и сотрудник "Яндекса":) flame
                –1
                Было дело. Поменял место работы. И пусть первый бросит в меня камень тот, кто этого не делал.
                Только какое это имеет отношение у сабжу?
                  0
                  Да никакого. Поставил тег flame, правда хабрапарсер его немного почикал.
                +2
                Выше он выложил письма переписки — там ему явно ответили, что это штатное поведение.
                  +1
                  С одной стороны, мне кажется, что это вероятнее фейл сотрудников поддержки — они не смогли/не захотели меня понять и просто отписались.
                  С другой стороны, провёл эксперимент на чистымом ноутбуке — та же история.
                +2
                Пожалуйста, сообщите мне в личку, если вдруг что-то пойдёт не так. Уверяю, что любой баг не будет оставлен без внимания.
                  0
                  Ок, спасибо. Сегодня отключу на резервной машине синхронизацию и попробую.
                    +1
                    Разобрались совместно с mail.ru — синхронизация в конечном итоге работает нормально, подробности в конце статьи.
                +6
                Странно, у меня наоборот докачал удаленное на локальной машине
                  +1
                  Возможно, что-то поправили за это время или ситуация была какая-то другая. В техподдержке мне сказали, что ничем помочь не могут и мой сценарий не предусмотрен.
                    +1
                    эм-м-м. А можно вас попросить провести эксперимент? Как я понимаю у вас сейчас весь архив нормально синхронизирован и находится на HDD? А можете тогда попробовать в клиенте назначить синхронизацию в другую папку и посмотреть докачает или наоборот удалит из облака?
                      +1
                      ок, буду дома — попробую
                        +4
                        с другой стороны, у вас же цель скачать на новый диск весь архив с облака? Это должен быть типичный юзкейс — синхронизировать облако на новый комп
                          +1
                          Вот у меня именно такая же цель и была. Я пытался синхронизироваться несколько месяцев назад, возможно, за это время кейс уже реализовали.
                          А может быть это какой-то баг, связанный с каким-нибудь кешированием — систему и клиент я, насколько помню, не переставлял после отказа диска.
                            0
                            Странная у вас проблема. Может, вы выбрали синхронизацию с уже созданной папкой? Тогда такое, вероятно, может быть.
                              +3
                              Да, я создал в корне диска новую пустую папку и указал её в настройках клиента — именно так, как было до этого.
                                0
                                Думаю, если бы вы создали папку через мастер настройки клиента, все было бы нормально.
                                  +2
                                  Добавил переписку с поддержкой — странно, что они этого не предложили, я не знал о такой возможности.
                                    0
                                    Это очень странное поведение — учитывать, откуда создана папка
                                      +1
                                      Клиент не учитывает, откуда папка создана. А вот если ранее к папке уже был указан путь в клиенте, в ней останутся конфигурационные файлы (статусы удаления файлов/папок). И при повторном указании пути к этой же папке могут возникнуть коллизии.
                          +6
                          У него еще и неопределенное поведение, оказывается. Все забавнее и забавнее.
                          +64
                          * Как Облако@mail.ru чуть не запороло все мои бэкапы, и каких костылей пришлось навставлять чтоб их вытащить.
                            +8
                            У меня всё-таки позитивный осадок после всего этого.
                            Во-первых, я сам виноват, что не протестировал толком сервис, которому доверил "все мои бэкапы".
                            Во-вторых, я всё-таки получил свои файлы, пусть и не все. Без Облака у меня не было бы ничего. То, что мой сценарий не был предусмотрен при разработке приложения, это, конечно, странно, но и не такие странные вещи бывают в продуктах.
                            В-третьих, я получил огромное удовольствие от этого маленького проекта.
                              +7
                              Не совсем согласен с "во-первых" — у всех остальных известных облачных клиентов (dropbox, yandex-диск и т п) поведение однозначное — докачать недостающее. Если кто-то выходит на рынок не первым — наверное ему стоит поддерживать сложившиеся стандарты, а если они отличаются от таковых — однозначно предупреждать и сообщать.

                              Во-вторых, в том же Dropbox вы бы восстановили все файлы — там можно после удаление из облака файл восстановить в течении какого-то времени. Mail.Ru выходит экономит на безопасности пользователей. Может у них и "облако не облако", а единичные копии ваших файлов? Я бы им после такой ситуации не доверял насчет этого конкретного сервиса.

                              Ну а в третьих… с третьим поспорить сложно :-)
                                +1
                                Я бы им после такой ситуации не доверял насчет этого конкретного сервиса.
                                Вот я и переехал. Но копии в mail.ru оставил — мало ли что :)
                                  +5
                                  у всех остальных известных облачных клиентов (dropbox, yandex-диск и т п) поведение однозначное — докачать недостающее
                                  Вот в ветке выше говорят, что сейчас так и делается. Есть вероятность, что это какой-то баг, но тогда, конечно, вопрос к тех. поддержке — они мне вообще никаких вариантов не предложили и вообще с первого раза не смогли понять, чего я от них хочу.
                                    0
                                    Первое письмо поддержки — типовой шаблонный ответ. Там ни слова не набрано руками, просто копипаста.
                                      +2
                                      Мы стараемся избавляться от таких шаблонных ответов, честно.
                                      +2
                                      Лично приношу Вам извинения за такие ответы.
                                      И да, логичное поведение на чистом харде в пустой папке — докачать туда содержимое веба.
                                      Сейчас разбираемся все вместе, что случилось.
                                  0
                                  Уточните, у Вас был такой же кейс?
                                  Если не сложно, стукните в личку.
                                    0
                                    Я думаю, это просто вольная интерпретация заголовка статьи.
                                      0
                                      Может, вы тогда и про https://habrahabr.ru/post/206860/#comment_7474127 скажете что-нибудь?
                                        0
                                        Мы разбирали инцидент Ticket#2014030321036609 в 2014 году, в данном случае проблема была на стороне Windows, которая корраптила конфигурационные файлы клиента при его аварийном завершении. В следующем же релизе мы это поправили.
                                        Приношу извинения за ситуацию с ответом.
                                    +3
                                    Спасибо за статью. полезно.

                                    одну опасность только вижу: эта штука иногда изменяется. тоже копал этот вопрос и как-то был момент когда csrf-токен стал отдаваться по-другому. Ничего непреодолимого- вдумчивое повторное раскапывание спасло положение, но подобные упражнения они не ко всякому моменту жизни подходят (см например Вашу ситуацию когда понадобился бэкап)
                                      +2
                                      Да, разумеется, зависимость от внешнего API — штука опасная.
                                      Успокаивает то, что:

                                      • там есть-таки версионирование (скорее всего, то, что вы описали, произошло при переходе с v1 на v2);
                                      • не нужно хотя бы поддерживать несколько версий скрипта — публичная версия одна (за исключением всяких сплит-тестирований, но это небольшой процент и вероятность на такое нарваться невелика);
                                      • доработать уже готовый скрипт под изменения не очень сложно, особенно по сравнению с написанием с нуля.
                                      +8
                                      Постскриптум нужно первым абзацем поставить.
                                        +8
                                        Когда сервис только открывался, пробовал его колупнуть на баги безопасности. Была тогда фича, что после удаления файлов из облака — реально файлы остаются в облаке. Они удалялись только из интерфейса пользователя. Тестировалось, через добавление себе "новых файлов", имея только хеш рассчитанный по их алгоритму. При этом удаленный файл из облака, добавлялся через его хеш, даже спустя сутки.
                                        Если ничего не поменяли, то тех поддержка с технической точки зрения должна обладать возможностью восстановить "удаленные" вами файлы.
                                          +10
                                          Где же представители mail.ru, чтобы объяснили как действовать в этом случае? На мой взгляд абсолютно стандартная ситуация, когда в облаке бэкапы сделаны для того, чтобы их можно было вытащить на сломавшийся локальный носитель.
                                            +6
                                            а я вот боюсь что появятся и объяснят что это грязный хак и так делать ай-ай-ай и вот ужо мы шифрование с обсфуцированием прикрутим чтобы неповадно было руками лезть.
                                            –29
                                            то что вы поставили маил диск увеличилло износ винта! маил 1 терабайт схинхронизировал и убил Ваш винт! долгие операции и активность убивают винт! А вообще поздравляю! редко так бывает!
                                              +25
                                              Более того, установка винта в компьютер увеличивает его износ. Храните винты на полках, подальше от компов.
                                              +14
                                              Насколько я понял ситуацию, она заключалась в следующем:
                                              1) агент синхронизировал некую папку с облаком.
                                              2) агент на какое-то время потерял доступ к папке, но не к облаку (диск сломался)
                                              3) был поставлен диск, на котором была создана папка с "нужным названием", включен клиент, который конечно же заметил изменения, которые произошли в папке, и начал их репликацию (например, на дату N — такой-то хэш, на дату N+1 — другой, налицо изменения).

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

                                              Таким образом, достаточно было сменить папку, в которую синхронизировать облако, или, как вариант, переустановить клиент, чтобы он начал с нового листа. Проблема — от непонимания логики, и отсутствия защиты от дурака.

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

                                                P.S. Ограничения на скачивание и они есть даже на платных тарифах.
                                                  +1
                                                  Если вы удаляете подпапку в синхронизируемой папке, клиент ведь должен удалить и в облаке такую же? Т.е клиент увидел свою родную папку для синхронизации, там пусто — вуаля. Клиент ведь не знает, что у вас помер винт, и что вы не удаляли данные самостоятельно.

                                                  И это у всех сервисов так — или он синхронизирует удаление папок, или наоборот — удаляешь папку, а он с облака заново подкачивает (что, имхо, большая проблема), так что не наступайте повторно на эти грабли.

                                                  Ну, а бесплатная техподдержка — она такая, да, чисто номинальная.
                                                    +3
                                                    Я считаю, что это проблема клиента — он увидел абсолютно пустую папку на новом диске (не уверен уже сейчас, но путь к ней был, скорее всего, другой, я его точно правил в настройках клиента) и почему-то решил, что это его "родная" папка.
                                                      +1
                                                      Как давно это было? Такое ощущение, что вы пишите о временах бета-тестирования.
                                                        +1
                                                        Точно уже не помню — осень-зима 2015.

                                                        UPD: нашёл тикеты — 29 декабря 2015.
                                                          +1
                                                          Хм… Совсем недавно. Я в ноябре и январе ставил, никаких проблем не возникло (ниже написал уже).
                                                        0
                                                        А если после указания клиенту новой папки тут же выключить его и вручную сменить дату изменения папки на какую-нибудь прошедшую, чтобы она точно считалась старее облачной, и потом включить клиент?
                                                    +1
                                                    Согласен с вами.
                                                    Когда-то давно с дропбоксом именно на такие грабли и наступил. Но, благо, быстро спохватился.
                                                      +2
                                                      Добавил в статью переписку с поддержкой. Возможно, я действительно что-то не так описал или не так понял?
                                                        0
                                                        Провёл эксперимент на ноутбуке — всё та же проблема. То есть сценарий нового компьютера или переустановки клиента в моём случае не работает, тут уже никакой речи о непонимании логики быть не может.
                                                        +1
                                                        что бы не было такого удвдения файлов, а я это проверил в первые минуты после устанлвки клиента, а его снес и руками создал структуру папок в облаке, накидал в папки файлы — таким образом ничего не удаляется. Я так понял сейчас это исправлено?
                                                          +3
                                                          Как-то сталкивался с такой бедой, но решил ее своим костылем: завел еще один диск (50 Гб) на мэйле, его синхронизировал с папкой на локальной машине, а потом просто брал ссылку на нужный файл с основного кнопкой "Сохранить в облако". Новый файл в уже синхронизированную папку сливался, я его перекидывал куда нужно и он с облака исчезал. Конечно, возни много, но в моем случае спасло ситуацию.
                                                            +6
                                                            Еще с пол года назад я написал в саппорт облако маил.ру о двух проблемах:
                                                            1 Если вы ловите локер и он шифрует ваш винт, то зашифрованные файлы загружаются в облако, по этому КАТЕГОРИЧЕСКИ нельзя использовать сихронизатор фоном! Только ручной запуск раз в месяц.
                                                            2 Указал на проблему направления синхронизации. Тоесть с определенного устройства можно только закачивать в облако, а с другого только скачивать, где-то двусторонне
                                                            Ответа нет пока от них. А жаль
                                                              +1
                                                              Первая проблема бы решалась возможностью откатиться на старую версию файла в несколько первых дней. Dropbox выруливает в этом плане) Может и не только он.
                                                                0
                                                                Мы работаем над этими идеями.
                                                                По поводу "не ответили" — можете номер тикета прислать в личку?
                                                                  0
                                                                  Имелось в виду, что мне ответили, что будут работать. Но пол года прошло, как то результатов нет
                                                                    +2
                                                                    Это mail.ru — чего-либо добиться от них…

                                                                    В самом посте и обсуждениях происходят УЖАСАЮЩИЕ вещи, я глаза протирал раз 5, мне кажется или нет.
                                                                    То, что обсуждают в 2016 году вещи, которые лет 5 ещё назад надо было обсуждать, но не в 2016 году.

                                                                    18 лет существуют, какими были бесполезными по тех.поддержке, такими и остались…
                                                                      0
                                                                      уточните, у Вас был опыт некорректной поддержки?
                                                                      если да, напишите мне в личку ящик и дату, я разберусь.
                                                                      спасибо.
                                                                        –1
                                                                        Это было уже давно. Лет 13 назад если не больше, я уже был с mail.ru. Был.

                                                                        Я не могу научить всю вашу тех. поддержку как надо работать. Мне проще просто не пользоваться никакими вашими продуктами.

                                                                        Но обычным домохозяйкам нормально, потому ваша концепция всё ради денег и только для денег — пока даёт вам жить.
                                                                        И mail.ru ничего не надо, чтобы меняться. Надеюсь, что лично вам совестливо за компанию и вы пытаетесь сделать её лучше.

                                                                        Но mail.ru надо начать с того, чтобы каждый сотрудник посадил с десяток другой деревьев.
                                                                        «Девочки тех.поддержки (это могут быть и мальчики-»роботы") — по 50.
                                                                        Создатели и разработчики Guard-а — от 200 деревьев.

                                                                        Тогда можно о чём-то разговаривать уже с чуть подчищенной кармой.

                                                                          –1
                                                                          Золотые слова!
                                                                          Mail.ru настолько осквернили свое имя, причем не только качеством поддержки, что их продукты и упоминание о компании вызывают только тошноту.
                                                                            –2
                                                                            Настроения аудитории хорошо показывают такие видео.

                                                                            0
                                                                            Мы подумаем над этим, спасибо.
                                                                  +6
                                                                  То есть возможен вариант, что поставишь клиента на другой компьютер, и он удалит все, что было в облаке, а потом на старом компе клиент засинхронизирует и все удалит локально?
                                                                    +1
                                                                    То есть возможен вариант, что поставишь клиента на другой компьютер, и он удалит все, что было в облаке, а потом на старом компе клиент засинхронизирует и все удалит локально?
                                                                    Это вряд ли. Это было бы странно — на таком типичном и частом юзкейсе иметь такой деструктивный косяк. Почти наверняка автор просто где-то напортачил.
                                                                      +2
                                                                      Да, наверняка сценарий с новым компьютером работает нормально.
                                                                      А вот при смене HDD на уже настроенном компьютере явно есть проблемы — в комментариях ведь отписались уже те, кто с подобным поведением сталкивался.
                                                                      Я вполне допускаю, что мой кейс можно было решить стандартными средствами, о которых я не знаю, но разве это оправдание плохому UX?
                                                                    +1
                                                                    В ноябре 2015 ставил систему (linux) на ноуте, где был клоуд.майл.ру клиент. Все ставил и настраивал с нуля. Клиент без проблем закачал файлы из облака. В январе ставил эту же систему на рабочем компе. Клиент майла все отсинхронизировал, ничего не удалил.

                                                                    Не знаю как виндовый клиент… Но в линуксовом когда делаешь первичную настройку и указываешь папку (или позже если поменять папку через диалог), клиент дописывает в конце пути "/Cloud Mail.Ru", поэтому папка по любому пустая.
                                                                      +1
                                                                      а можно сделать приложение для Windows из сорса выложенного? неохота устанавливать\настраивать веб-сервер для php...
                                                                        0
                                                                        Я изначально думал над чем-то независимым, но решил не заморачиваться. Но, может быть, кто-нибудь и сделает.
                                                                        А вся "установка\настройка" сводится к скачиванию OpenServer, ничего сложного.
                                                                        +5
                                                                        Добрый день, Алексей.

                                                                        Если установить клиент и указать ему новую папку синхронизации, то он скачает из Облака все файлы и папки.
                                                                        В этом случае клиент видит следующее: В Облаке файлы есть, а тут их нет и не было. Нужно синхронизировать, т.е. скачать все из Облака.

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

                                                                        Нам важно разобраться в проблеме. Написал вам в личку.
                                                                          +4
                                                                          Bulldozavr, koceg только не забудьте потом подробно рассказать где собака зарылась. Вы тут не одни, кому тему разобрать интересно.
                                                                            +2
                                                                            Angel2S2 Мы уже общаемся с Алексеем в личке. Как выясним — я напишу.
                                                                              0
                                                                              Буду очень признателен :)
                                                                                +1
                                                                                Добавил итоги в конец статьи.
                                                                                  +2
                                                                                  Спасибо.
                                                                                  Очень хорошо, что все хорошо кончилось :)
                                                                          +11
                                                                          И отдельно хочу извиниться за ответы службы поддержки.
                                                                          Это ни в какие ворота…
                                                                          Будем разбираться.

                                                                          — Егор Ганин
                                                                          Руководитель направления Облачных и Бизнес-сервисов Mail.Ru Group.
                                                                            +2
                                                                            Вот это то, что мне действительно не понравилось как клиенту. В остальном у меня, на самом деле, претензий нет.
                                                                              +1
                                                                              Я Вас понимаю.
                                                                            +2
                                                                            у кого-нибудь работает клиент под убунту, сколько я с ним не бился, так и не стал у меня, что печально
                                                                              +2
                                                                              У меня на 14.04 отлично работает с первого раза и без костылей.
                                                                                0
                                                                                Думаю, у вас версия Ubuntu старая. Работает на Ubuntu 14.04 и выше. На более старых не работает, если не изменяет память, дело в версии libc.
                                                                                  0
                                                                                  может быть слишком новая? 15.10
                                                                                    0
                                                                                    Передал Вашу ситуацию разработчику клиента под Linux. Можете дать Ваши контакты в личку?
                                                                                +1
                                                                                Кто-нибудь изучал как загрузка файлов работает? Можно будет свой клиент тогда сделать (с поддержкой шифрования, например).
                                                                                  +2
                                                                                  Собственно, ничего сложного:

                                                                                  Request URL:https://cloclo26-upload.cloud.mail.ru/upload/?cloud_domain=2&fileapi14575484915646
                                                                                  Request Method:POST
                                                                                  Status Code:200 OK
                                                                                  Remote Address:217.69.128.172:443
                                                                                  
                                                                                  ------WebKitFormBoundarypaR6nFX03Rky2lAI
                                                                                  Content-Disposition: form-data; name="file"; filename="pic.gif"
                                                                                  Content-Type: image/gif
                                                                                  
                                                                                  ------WebKitFormBoundarypaR6nFX03Rky2lAI
                                                                                  Content-Disposition: form-data; name="_file"
                                                                                  
                                                                                  pic.gif
                                                                                  ------WebKitFormBoundarypaR6nFX03Rky2lAI--

                                                                                  В ответ отдаётся hash, который используется в следующем запросе:

                                                                                  Request URL:https://cloud.mail.ru/api/v2/file/add
                                                                                  Request Method:POST
                                                                                  Status Code:200 OK
                                                                                  Remote Address:94.100.180.7:443
                                                                                  
                                                                                  home=%2F%2Fзшс.gif&hash=550B109A698694A77232CA4839625CEAFF4E7CD1&size=8613&conflict=rename&api=2&token=8HNUrtaViTijRMy5zSpzcmAuXUZn75Sj

                                                                                  Но я бы не стал писать никаких клиентов без официального API — никаких гарантий, что однажды ночью всё не превратится в тыкву. Пользователи замучают поддержкой.
                                                                                    +1
                                                                                    URL для загрузки файла получается так же через диспетчера: https://cloud.mail.ru/api/v2/dispatcher?token=xxx
                                                                                      +1
                                                                                      Кто-то определил, как вычисляется этот хеш?
                                                                                      По размеру похоже на SHA-1 но это не он.
                                                                                    –1
                                                                                    Почитал статью. Прям руки зачесались терик получить. Почитал отзывы, почитал лицензию…
                                                                                    Скажем дружно — нафиг не нужно…

                                                                                    1 Тб хорошо и приятно, но как подумаю что сервис предоставляет компания из под «пера» которой вышел спутник и гуард то желание пользоваться как то пропадает. Даже за бесплатно.
                                                                                      +4
                                                                                      Бесплатные терабайты раздавали при открытии сервиса два года назад, сейчас дают 25 Гб, так что вы в безопасности.
                                                                                      https://habrahabr.ru/post/206860/
                                                                                      0
                                                                                      У hetzner появились storagebox'ы. Например 1Тб стоит 9.40 евро, что для клиентов не из европы будет на 19% меньше.

                                                                                      Еще есть amazon glacier, 1 Тб в ирландии встанет в 7 баксов в месяц за хранение и 12 баксов за 100,000 обращений к ним (~файлов). Multipart составляет до 4 Гб. Скачать все (1Тб) можно будет через месяц за 17 баксов (включена цена за хранение) или через неделю за итоговых 54 бакса (7+47 за такой быстрый) запрос.

                                                                                      Не обходим вниманием и USB-жесткие диски, в районе 50 баксов за терабайт, траффик не ограничен. Главное периодически втыкать его в комп (пару раз в год), чтобы инфа не умерла, хранить в картонной коробочке с пакетиком для уменьшения влажности.

                                                                                      Я все храню за внешних хардах.
                                                                                        +1
                                                                                        Спасибо за предложенные альтернативы. Каждый, сможет выбрать то, что удобно ему.

                                                                                        У одной российской компании, которую я в итоге выбрал, терабайт стоит $2,5 в месяц (меньше, если платить сразу за год). При этом автоматическая синхронизация, постоянная доступность никаких проблем со скачиванием, веб-интерфейс.
                                                                                          +1
                                                                                          Подскажите как «одна российская компания» зовется, в этом топике и так упоминается множество «других компаний» и никто за рекламу не сочтет.
                                                                                        +1
                                                                                        Информация на внешних HDD хранится ровно до того момента, пока до них не доберутся дети (2 раза с интервалом в полугодие человек приносил харды на восстановление. Ребенок находит и роняет\кидает\etc).
                                                                                        А еще бывает, что молния попадает в витую пару, которая заходит к соседям. Их компьютер стоит с одной стороны гипсоблочной стены. На другой стороне этой стены висит полка, на которой лежит внешний хард. Так вот после этой молнии ваш хард перестает работать (реальный случай. The truth is out there...)
                                                                                          0
                                                                                          Надо к потолку прикручивать винты при хранении и подальше от стен/люстры.
                                                                                            0
                                                                                            У меня харды хранятся в своих "пакетиках" (в которых они продаются) с штукой для уменьшение влажности. Когда мне надо — я втыкаю хард в USB бокс, в другом случае сие находится в картонной коробке в столе.

                                                                                            И, у меня много раз падали выключенные харды в боксах, и с ними не приключилось.
                                                                                              0
                                                                                              харды хранятся в своих «пакетиках» … сие находится в картонной коробке в столе.
                                                                                              А я однажды такую коробку с хардами в пакетиках уронил с высоты в метр. Ни один не выжил :(
                                                                                                0
                                                                                                На вашей планете гравитация в 5 раз сильнее земной.
                                                                                              0
                                                                                              мой стул опрокинул на подключеннный хард под столлом… я идиот, не спрятал его подальше.
                                                                                            0
                                                                                            удалено
                                                                                              +1
                                                                                              Вопрос к коллегам из Mail.Ru Group: планируется ли публичное API к облаку?
                                                                                              Если в разумной перспективе нет, то можно ли пока использовать для личных целей подход по примеру автора топика; не планируется ли в обозримой перспективе существенных изменений этого внутреннего API?
                                                                                                0
                                                                                                Мы постоянно улучшаем наш API в сторону гибкости и безопасности, но о сроках и планах сказать не могу.
                                                                                                Если у Вас есть какие-то конкретные мысли/идеи/предложения — стукнитесь в личку, пожалуйста.
                                                                                                –1
                                                                                                У меня тоже замечательный диск от мейла есть. Положить туда можно всё, а вот, чтобы потом получить обратно — легче забить.
                                                                                                Скачать напрямую — скорость просто ничтожная. Скачать через клиент — скорость просто ничтожная. Добавить сюда вышеописанные бока и получается ерунда, а не терабайт.

                                                                                                Onedrive — который жутко глючный и периодически слетающий — и тот в сто раз надежнее и быстрее вот этого вот недоразумения.
                                                                                                  0
                                                                                                  весь свой фото и видео-архив синхронизирую со старым ноутбуком с помощью SyncThing — рекомендую.

                                                                                                  А важные и небольшие папки синхронизирую на несколько устройств (ноутбук жены, телефон).
                                                                                                    0
                                                                                                    С этими облаками у меня одни опасения связаны, пока идеально работал только дропбокс. Без единого нарекания.
                                                                                                    Мега, уандрайв периодически глючили, дублирруя файлы или затирали новые версии.
                                                                                                      +1
                                                                                                      Самое забавное что автор топика сам преждеверменно поддался панике и признал что был не совсем прав, а на mail.ru уже полетели потоки недобрых комментов =)

                                                                                                      Рад тому что во время того аттракциона щедрости успел отхватить себе бесплатный терабайт. Больше никто столько не дает пока.
                                                                                                        +1
                                                                                                        Нет, я вовсе не считаю, что был неправ, даже чуть-чуть.
                                                                                                        Да, оказалось, что это проблема не с удалением важных файлов, а с пользовательским интерфейсом и с работой тех. поддержки. Но тем не менее это проблема и она на стороне mail.ru.
                                                                                                        Я мог узнать о том, что синхронизация всё-таки работает, только если бы несколько минут смотрел, как какие-то мои файлы удаляются в облаке. Любой на моём месте, мне кажется, выключил бы синхронизацию немедленно и написал в поддержку.

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

                                                                                                        Но, как я написал в статье, я тоже рад, что это облако у меня есть и что я сохранил свой архив. Даже если бы несколько файлов из него действительно удалилось по вине клиента, я всё равно был бы рад, что сохранил большую часть и сделал это совершенно бесплатно.
                                                                                                        0
                                                                                                        Может быть кто-то сможет подсказать: Мне бы хотелось синхронизировать только определенную папку на ПК с одной определенной папкой в облаке.
                                                                                                        Такое как-то можно осуществить стандартными средствами?
                                                                                                          0
                                                                                                          Конкретно такой кейс пока не реализован в функционале.
                                                                                                          Но мы над этим работаем.

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

                                                                                                        Самое читаемое