Однажды я увидел этот баннер и решил, что бесплатный терабайт мне совсем не помешает, тем более, что мой архив фотографий и документов как раз лежал на терабайтном винчестере. Признаюсь, я очень опасался ставить на компьютер программу с логотипом 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 уже никуда не денется :)

Комментарии (111)


  1. AdmAlexus
    09.03.2016 13:59
    +21

    Очень вовремя прочитал ваш пост. Как раз на днях поменял жесткий диск и хотел уже поставить приложение, да на ночь запустить синхронизацию. В облаке весь фото-архив за 5 лет.
    Большое вам спасибо.


    1. Einherjar
      09.03.2016 14:59
      +30

      Бесплатный сыр всегда для второй мыши.


    1. ZverArt
      09.03.2016 15:18
      +14

      Ну по идее у mail.ru же должен быть какой-то бэкап, они же гарантируют вам сохранность ваших данных. То есть можно, если что, им написать и попросить восстановить.
      Другое дело, что они могут за это попросить вас поставить амиго…


      1. tundrawolf_kiba
        09.03.2016 18:26
        +4

        Вот кстати залез, глянуть, как там в облаке Mail.ru, и не нашел привычной мне по Яндекс.Диску и Microsoft OneDrive корзины, куда помещаются файлы перед окончательным удалением. Хорошо, что не хранил на mail.ru ничего важного.


        1. manwe
          10.03.2016 18:49

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


          1. M_org
            13.03.2016 01:29
            +2

            Ребят, "безопасность" в случае облака это именно вопрос сохранности данных, а не авторизации и прочей секурити


      1. Ohar
        10.03.2016 11:42
        +6

        у mail.ru же должен быть какой-то бэкап, они же гарантируют вам сохранность ваших данных
        Мэйл.Ру <…> имеет право <…> удалять Контент на Персональном дисковом пространстве <…> не несет ответственности за возможные сбои и перерывы в работе Сервиса и вызванные ими потерю информации
        © Лицензионное соглашение


    1. jogur_t
      09.03.2016 19:12
      -3

      Не стоит обобщать.
      С описанным случаем мы разбираемся с Алексеем, но это совершенно точно не стандартное поведение сервиса.


      1. AdmAlexus
        10.03.2016 06:34
        +3

        Я не обобщаю. Я думаю… рисковать или нет.
        Но спасибо, что отписались.
        flame Хотя по "Профилю" вы и сотрудник "Яндекса":) flame


        1. jogur_t
          10.03.2016 11:55
          -1

          Было дело. Поменял место работы. И пусть первый бросит в меня камень тот, кто этого не делал.
          Только какое это имеет отношение у сабжу?


          1. AdmAlexus
            10.03.2016 12:02

            Да никакого. Поставил тег flame, правда хабрапарсер его немного почикал.


      1. Newbilius
        10.03.2016 07:47
        +2

        Выше он выложил письма переписки — там ему явно ответили, что это штатное поведение.


        1. koceg
          10.03.2016 09:05
          +1

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


    1. manwe
      10.03.2016 18:45
      +2

      Пожалуйста, сообщите мне в личку, если вдруг что-то пойдёт не так. Уверяю, что любой баг не будет оставлен без внимания.


      1. AdmAlexus
        10.03.2016 18:55

        Ок, спасибо. Сегодня отключу на резервной машине синхронизацию и попробую.


        1. koceg
          10.03.2016 19:05
          +1

          Разобрались совместно с mail.ru — синхронизация в конечном итоге работает нормально, подробности в конце статьи.


  1. quantum
    09.03.2016 14:04
    +6

    Странно, у меня наоборот докачал удаленное на локальной машине


    1. koceg
      09.03.2016 14:06
      +1

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


    1. AdmAlexus
      09.03.2016 14:07
      +1

      эм-м-м. А можно вас попросить провести эксперимент? Как я понимаю у вас сейчас весь архив нормально синхронизирован и находится на HDD? А можете тогда попробовать в клиенте назначить синхронизацию в другую папку и посмотреть докачает или наоборот удалит из облака?


      1. quantum
        09.03.2016 14:09
        +1

        ок, буду дома — попробую


      1. quantum
        09.03.2016 14:10
        +4

        с другой стороны, у вас же цель скачать на новый диск весь архив с облака? Это должен быть типичный юзкейс — синхронизировать облако на новый комп


        1. koceg
          09.03.2016 14:28
          +1

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


          1. Bringoff
            09.03.2016 18:00

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


            1. koceg
              09.03.2016 18:03
              +3

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


              1. Bringoff
                09.03.2016 18:05

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


                1. koceg
                  09.03.2016 18:38
                  +2

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


                1. Ohar
                  10.03.2016 11:44

                  Это очень странное поведение — учитывать, откуда создана папка


                  1. manwe
                    10.03.2016 18:40
                    +1

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


    1. Nikobraz
      09.03.2016 14:11
      +6

      У него еще и неопределенное поведение, оказывается. Все забавнее и забавнее.


  1. unwrecker
    09.03.2016 14:21
    +64

    * Как Облако@mail.ru чуть не запороло все мои бэкапы, и каких костылей пришлось навставлять чтоб их вытащить.


    1. koceg
      09.03.2016 14:26
      +8

      У меня всё-таки позитивный осадок после всего этого.
      Во-первых, я сам виноват, что не протестировал толком сервис, которому доверил "все мои бэкапы".
      Во-вторых, я всё-таки получил свои файлы, пусть и не все. Без Облака у меня не было бы ничего. То, что мой сценарий не был предусмотрен при разработке приложения, это, конечно, странно, но и не такие странные вещи бывают в продуктах.
      В-третьих, я получил огромное удовольствие от этого маленького проекта.


      1. Newbilius
        09.03.2016 14:36
        +7

        Не совсем согласен с "во-первых" — у всех остальных известных облачных клиентов (dropbox, yandex-диск и т п) поведение однозначное — докачать недостающее. Если кто-то выходит на рынок не первым — наверное ему стоит поддерживать сложившиеся стандарты, а если они отличаются от таковых — однозначно предупреждать и сообщать.

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

        Ну а в третьих… с третьим поспорить сложно :-)


        1. koceg
          09.03.2016 14:43
          +1

          Я бы им после такой ситуации не доверял насчет этого конкретного сервиса.
          Вот я и переехал. Но копии в mail.ru оставил — мало ли что :)


        1. koceg
          09.03.2016 14:50
          +5

          у всех остальных известных облачных клиентов (dropbox, yandex-диск и т п) поведение однозначное — докачать недостающее
          Вот в ветке выше говорят, что сейчас так и делается. Есть вероятность, что это какой-то баг, но тогда, конечно, вопрос к тех. поддержке — они мне вообще никаких вариантов не предложили и вообще с первого раза не смогли понять, чего я от них хочу.


          1. Ohar
            10.03.2016 11:46

            Первое письмо поддержки — типовой шаблонный ответ. Там ни слова не набрано руками, просто копипаста.


            1. manwe
              10.03.2016 18:35
              +2

              Мы стараемся избавляться от таких шаблонных ответов, честно.


          1. manwe
            10.03.2016 18:36
            +2

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


    1. manwe
      10.03.2016 18:37

      Уточните, у Вас был такой же кейс?
      Если не сложно, стукните в личку.


      1. koceg
        10.03.2016 19:12

        Я думаю, это просто вольная интерпретация заголовка статьи.


      1. Chamie
        11.03.2016 14:04

        Может, вы тогда и про https://habrahabr.ru/post/206860/#comment_7474127 скажете что-нибудь?


        1. manwe
          11.03.2016 16:46

          Мы разбирали инцидент Ticket#2014030321036609 в 2014 году, в данном случае проблема была на стороне Windows, которая корраптила конфигурационные файлы клиента при его аварийном завершении. В следующем же релизе мы это поправили.
          Приношу извинения за ситуацию с ответом.


  1. master_Nemo
    09.03.2016 14:31
    +3

    Спасибо за статью. полезно.

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


    1. koceg
      09.03.2016 14:42
      +2

      Да, разумеется, зависимость от внешнего API — штука опасная.
      Успокаивает то, что:

      • там есть-таки версионирование (скорее всего, то, что вы описали, произошло при переходе с v1 на v2);
      • не нужно хотя бы поддерживать несколько версий скрипта — публичная версия одна (за исключением всяких сплит-тестирований, но это небольшой процент и вероятность на такое нарваться невелика);
      • доработать уже готовый скрипт под изменения не очень сложно, особенно по сравнению с написанием с нуля.


  1. olegkrasnov
    09.03.2016 14:40
    +8

    Постскриптум нужно первым абзацем поставить.


  1. MrGrey
    09.03.2016 15:09
    +8

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


  1. msfs11
    09.03.2016 15:27
    +10

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


    1. master_Nemo
      09.03.2016 15:52
      +6

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


  1. SOLON7
    09.03.2016 15:52
    -29

    то что вы поставили маил диск увеличилло износ винта! маил 1 терабайт схинхронизировал и убил Ваш винт! долгие операции и активность убивают винт! А вообще поздравляю! редко так бывает!


    1. olegkrasnov
      09.03.2016 16:05
      +25

      Более того, установка винта в компьютер увеличивает его износ. Храните винты на полках, подальше от компов.


  1. igsend
    09.03.2016 15:54
    +14

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

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

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

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


    1. koceg
      09.03.2016 16:00
      +5

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

      P.S. Ограничения на скачивание и они есть даже на платных тарифах.


      1. igsend
        09.03.2016 16:07
        +1

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

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

        Ну, а бесплатная техподдержка — она такая, да, чисто номинальная.


        1. koceg
          09.03.2016 16:10
          +3

          Я считаю, что это проблема клиента — он увидел абсолютно пустую папку на новом диске (не уверен уже сейчас, но путь к ней был, скорее всего, другой, я его точно правил в настройках клиента) и почему-то решил, что это его "родная" папка.


          1. Angel2S2
            09.03.2016 18:22
            +1

            Как давно это было? Такое ощущение, что вы пишите о временах бета-тестирования.


            1. koceg
              09.03.2016 18:24
              +1

              Точно уже не помню — осень-зима 2015.

              UPD: нашёл тикеты — 29 декабря 2015.


              1. Angel2S2
                09.03.2016 18:34
                +1

                Хм… Совсем недавно. Я в ноябре и январе ставил, никаких проблем не возникло (ниже написал уже).


          1. lightman
            10.03.2016 09:42

            А если после указания клиенту новой папки тут же выключить его и вручную сменить дату изменения папки на какую-нибудь прошедшую, чтобы она точно считалась старее облачной, и потом включить клиент?


    1. Angel2S2
      09.03.2016 18:23
      +1

      Согласен с вами.
      Когда-то давно с дропбоксом именно на такие грабли и наступил. Но, благо, быстро спохватился.


    1. koceg
      09.03.2016 18:40
      +2

      Добавил в статью переписку с поддержкой. Возможно, я действительно что-то не так описал или не так понял?


    1. koceg
      10.03.2016 09:02

      Провёл эксперимент на ноутбуке — всё та же проблема. То есть сценарий нового компьютера или переустановки клиента в моём случае не работает, тут уже никакой речи о непонимании логики быть не может.


  1. Protos
    09.03.2016 15:55
    +1

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


  1. Extremum
    09.03.2016 16:22
    +3

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


  1. stasmus
    09.03.2016 16:55
    +6

    Еще с пол года назад я написал в саппорт облако маил.ру о двух проблемах:
    1 Если вы ловите локер и он шифрует ваш винт, то зашифрованные файлы загружаются в облако, по этому КАТЕГОРИЧЕСКИ нельзя использовать сихронизатор фоном! Только ручной запуск раз в месяц.
    2 Указал на проблему направления синхронизации. Тоесть с определенного устройства можно только закачивать в облако, а с другого только скачивать, где-то двусторонне
    Ответа нет пока от них. А жаль


    1. Newbilius
      10.03.2016 07:56
      +1

      Первая проблема бы решалась возможностью откатиться на старую версию файла в несколько первых дней. Dropbox выруливает в этом плане) Может и не только он.


    1. manwe
      10.03.2016 18:24

      Мы работаем над этими идеями.
      По поводу "не ответили" — можете номер тикета прислать в личку?


      1. stasmus
        11.03.2016 11:04

        Имелось в виду, что мне ответили, что будут работать. Но пол года прошло, как то результатов нет


  1. yul
    09.03.2016 17:59
    +6

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


    1. barker
      09.03.2016 18:26
      +1

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


      1. koceg
        09.03.2016 18:29
        +2

        Да, наверняка сценарий с новым компьютером работает нормально.
        А вот при смене HDD на уже настроенном компьютере явно есть проблемы — в комментариях ведь отписались уже те, кто с подобным поведением сталкивался.
        Я вполне допускаю, что мой кейс можно было решить стандартными средствами, о которых я не знаю, но разве это оправдание плохому UX?


  1. Angel2S2
    09.03.2016 18:32
    +1

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

    Не знаю как виндовый клиент… Но в линуксовом когда делаешь первичную настройку и указываешь папку (или позже если поменять папку через диалог), клиент дописывает в конце пути "/Cloud Mail.Ru", поэтому папка по любому пустая.


  1. VFedorV
    09.03.2016 18:39
    +1

    а можно сделать приложение для Windows из сорса выложенного? неохота устанавливать\настраивать веб-сервер для php...


    1. koceg
      10.03.2016 14:04

      Я изначально думал над чем-то независимым, но решил не заморачиваться. Но, может быть, кто-нибудь и сделает.
      А вся "установка\настройка" сводится к скачиванию OpenServer, ничего сложного.


  1. Bulldozavr
    09.03.2016 18:57
    +5

    Добрый день, Алексей.

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

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

    Нам важно разобраться в проблеме. Написал вам в личку.


    1. Angel2S2
      09.03.2016 19:03
      +4

      Bulldozavr, koceg только не забудьте потом подробно рассказать где собака зарылась. Вы тут не одни, кому тему разобрать интересно.


      1. Bulldozavr
        09.03.2016 19:15
        +2

        Angel2S2 Мы уже общаемся с Алексеем в личке. Как выясним — я напишу.


        1. Angel2S2
          10.03.2016 10:08

          Буду очень признателен :)


          1. koceg
            10.03.2016 19:06
            +1

            Добавил итоги в конец статьи.


            1. Angel2S2
              10.03.2016 19:22
              +2

              Спасибо.
              Очень хорошо, что все хорошо кончилось :)


  1. jogur_t
    09.03.2016 19:23
    +11

    И отдельно хочу извиниться за ответы службы поддержки.
    Это ни в какие ворота…
    Будем разбираться.

    — Егор Ганин
    Руководитель направления Облачных и Бизнес-сервисов Mail.Ru Group.


    1. koceg
      09.03.2016 19:31
      +2

      Вот это то, что мне действительно не понравилось как клиенту. В остальном у меня, на самом деле, претензий нет.


      1. jogur_t
        09.03.2016 19:33
        +1

        Я Вас понимаю.


  1. akhval
    09.03.2016 19:26
    +2

    у кого-нибудь работает клиент под убунту, сколько я с ним не бился, так и не стал у меня, что печально


    1. ONEGiN
      09.03.2016 23:27
      +2

      У меня на 14.04 отлично работает с первого раза и без костылей.


    1. Angel2S2
      10.03.2016 10:15

      Думаю, у вас версия Ubuntu старая. Работает на Ubuntu 14.04 и выше. На более старых не работает, если не изменяет память, дело в версии libc.


      1. akhval
        10.03.2016 13:51

        может быть слишком новая? 15.10


        1. manwe
          10.03.2016 18:29

          Передал Вашу ситуацию разработчику клиента под Linux. Можете дать Ваши контакты в личку?


  1. and7ey
    09.03.2016 21:28
    +1

    Кто-нибудь изучал как загрузка файлов работает? Можно будет свой клиент тогда сделать (с поддержкой шифрования, например).


    1. koceg
      09.03.2016 21:41
      +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. koceg
        09.03.2016 21:45
        +1

        URL для загрузки файла получается так же через диспетчера: https://cloud.mail.ru/api/v2/dispatcher?token=xxx


      1. mrgall
        10.03.2016 02:10
        +1

        Кто-то определил, как вычисляется этот хеш?
        По размеру похоже на SHA-1 но это не он.


  1. cyber-security
    10.03.2016 11:09
    -1

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

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


    1. koceg
      10.03.2016 11:35
      +4

      Бесплатные терабайты раздавали при открытии сервиса два года назад, сейчас дают 25 Гб, так что вы в безопасности.
      https://habrahabr.ru/post/206860/


  1. nikitasius
    10.03.2016 11:11

    У hetzner появились storagebox'ы. Например 1Тб стоит 9.40 евро, что для клиентов не из европы будет на 19% меньше.

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

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

    Я все храню за внешних хардах.


    1. koceg
      10.03.2016 11:34
      +1

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

      У одной российской компании, которую я в итоге выбрал, терабайт стоит $2,5 в месяц (меньше, если платить сразу за год). При этом автоматическая синхронизация, постоянная доступность никаких проблем со скачиванием, веб-интерфейс.


      1. n1nj4p0w3r
        10.03.2016 14:04
        +1

        Подскажите как «одна российская компания» зовется, в этом топике и так упоминается множество «других компаний» и никто за рекламу не сочтет.



    1. AdmAlexus
      10.03.2016 11:43
      +1

      Информация на внешних HDD хранится ровно до того момента, пока до них не доберутся дети (2 раза с интервалом в полугодие человек приносил харды на восстановление. Ребенок находит и роняет\кидает\etc).
      А еще бывает, что молния попадает в витую пару, которая заходит к соседям. Их компьютер стоит с одной стороны гипсоблочной стены. На другой стороне этой стены висит полка, на которой лежит внешний хард. Так вот после этой молнии ваш хард перестает работать (реальный случай. The truth is out there...)


      1. vlivyur
        10.03.2016 13:51

        Надо к потолку прикручивать винты при хранении и подальше от стен/люстры.


      1. nikitasius
        11.03.2016 13:08

        У меня харды хранятся в своих "пакетиках" (в которых они продаются) с штукой для уменьшение влажности. Когда мне надо — я втыкаю хард в USB бокс, в другом случае сие находится в картонной коробке в столе.

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


        1. Chamie
          11.03.2016 14:06

          харды хранятся в своих «пакетиках» … сие находится в картонной коробке в столе.
          А я однажды такую коробку с хардами в пакетиках уронил с высоты в метр. Ни один не выжил :(


          1. nikitasius
            11.03.2016 14:31

            На вашей планете гравитация в 5 раз сильнее земной.


      1. Alexufo
        14.03.2016 02:13

        мой стул опрокинул на подключеннный хард под столлом… я идиот, не спрятал его подальше.


  1. SidexQX
    10.03.2016 14:39

    удалено


  1. mr_fresh
    10.03.2016 17:57
    +1

    Вопрос к коллегам из Mail.Ru Group: планируется ли публичное API к облаку?
    Если в разумной перспективе нет, то можно ли пока использовать для личных целей подход по примеру автора топика; не планируется ли в обозримой перспективе существенных изменений этого внутреннего API?


    1. manwe
      10.03.2016 18:53

      Мы постоянно улучшаем наш API в сторону гибкости и безопасности, но о сроках и планах сказать не могу.
      Если у Вас есть какие-то конкретные мысли/идеи/предложения — стукнитесь в личку, пожалуйста.


  1. dennis777
    11.03.2016 18:56
    -1

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

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


  1. petrovnn
    14.03.2016 02:27

    весь свой фото и видео-архив синхронизирую со старым ноутбуком с помощью SyncThing — рекомендую.

    А важные и небольшие папки синхронизирую на несколько устройств (ноутбук жены, телефон).


  1. engine9
    15.03.2016 14:04

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


  1. rhamdeew
    16.03.2016 00:34
    +1

    Самое забавное что автор топика сам преждеверменно поддался панике и признал что был не совсем прав, а на mail.ru уже полетели потоки недобрых комментов =)

    Рад тому что во время того аттракциона щедрости успел отхватить себе бесплатный терабайт. Больше никто столько не дает пока.


    1. koceg
      16.03.2016 07:40
      +1

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

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

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


  1. Cadog
    17.03.2016 11:26

    Может быть кто-то сможет подсказать: Мне бы хотелось синхронизировать только определенную папку на ПК с одной определенной папкой в облаке.
    Такое как-то можно осуществить стандартными средствами?