Спасите файлы с Яндекс Диска
Спасите файлы с Яндекс Диска

Всем привет!

8-11 октября после атак беспилотников пострадали три дата-центра Яндекса: Сасово, Калуга и Владимир. 11 октября Яндекс отключил в веб-версии Диска скачивание папок, альбомов и нескольких файлов сразу. У меня на Диске 1,8 TB файлов и еще около 160 GB фото в безлимите. Терять это не хочется, так что я сел делать бэкап.

План был простой: rclone, VPS в Нидерландах, Google Drive на 2 TB. На деле почти каждый шаг уперся в какую-то особенность Яндекса. Ниже по порядку: что сломалось, какие цифры получились и как обошел. Скрипты и инструкции выложил на GitHub, ссылка в конце.

rclone получает 410

Обычный путь такой: rclone config, тип yandex, вход через браузер. Авторизация проходит, rclone about показывает объем Диска. А дальше любая попытка прочитать папку заканчивается так:

2026/10/13 06:49:27 ERROR : error listing: [410 - GoneError] Gone (Ресурс больше недоступен.)

Проверил тем же токеном напрямую через REST API. Запрос /v1/disk отвечает 200, а список файлов и скачивание дают 410. То есть приложение rclone Яндекс пускает к сведениям о Диске, но не к файлам.

При этом с токеном Полигона все работает. Полигон это отладочная страница самого Яндекса для REST API, там есть кнопка “Получить OAuth-токен”. Подставил этот токен в rclone и наткнулся на вторую мелочь: backend yandex в rclone 1.75 без refresh_token не стартует.

CRITICAL: Failed to create file system for "yp:": unable to get RefreshToken.

У токена Полигона refresh_token нет. Помогла заглушка и срок действия в далеком будущем, тогда rclone не пытается обновить токен:

[yandex]
type = yandex
token = {"access_token":"<токен Полигона>","token_type":"OAuth","refresh_token":"unused","expiry":"2099-01-01T00:00:00Z"}

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

Где фото из безлимита

При безлимитной автозагрузке фото с телефона не лежат в папке “Фотокамера”, их видно только в разделе “Фото”. Решил проверить, видит ли их API.

В ответе /v1/disk есть поле photounlim_size, у меня там 162 734 452 732 байта. А сами файлы не достать:

GET /v1/disk/resources?path=photounlim:/
{"error": "DiskAreaDoesNotExistsError", "description": "Specified area \"photounlim\" does not exist"}

WebDAV на /photounlim/ отвечает 404, в плоском списке файлов API их тоже нет. Значит, ни rclone, ни другая программа для бэкапа эти фото не скопирует.

Выход один: перенести их в обычную папку Диска. Тогда они начнут занимать место в тарифе, но станут видны. Проверил на одном видео: used_space вырос на 10 911 965 байт, photounlim_size уменьшился на столько же.

В вебе за раз можно выделить не больше 500 фото, а у меня их около 30 тысяч. Поэтому перенес пару фото руками и посмотрел в сетевом журнале браузера, какие запросы уходят. Веб-версия ходит в https://disk.yandex.ru/models-v2, нужные методы такие:

intapi/photo-init-snapshot                 id снимка раздела "Фото"
intapi/photo-get-snapshot                  кластеры по датам, у каждого счетчик photounlim
intapi/photo-get-clusters-with-resources   файлы кластеров, пути /photounlim/<имя>
mpfs/bulk-async-move                       перенос: [{src, dst, force: 0}]
mpfs/bulk-operation-status                 статус: WAITING, потом DONE

Скрипт yd.js подключается к браузеру и вызывает эти методы через fetch прямо из открытой вкладки. Cookies и TLS остаются браузерные, для Яндекса это обычная работа в вебе.

Пачка из 50 файлов не прошла:

HTTP 400: {"error":{"type":"http","code":400,"message":"Duffman model validation error: Too many items"}}

Пачка из 40 проходит. Перемещения Яндекс выполняет по очереди, выходит примерно 85-120 файлов в минуту. Всего 30 738 фото перенеслись примерно за 6 часов, 49 не перенеслись с ошибкой 500 на стороне Яндекса.

Половина файлов не отдается

Запустил копирование, и за первые 5 минут rclone не скопировал ни байта. Все потоки висели на открытии файлов.

Сделал выборку из 300 случайных файлов и попробовал скачать первые 64 KB каждого через REST. Отдались 146. Через несколько минут повторил на той же выборке, результат тот же, статус сменил один файл. Значит, это не случайные сбои под нагрузкой, а стабильно недоступные файлы.

Скачивание идет по цепочке: запрос ссылки в API, ссылка на downloader.disk.yandex.ru, редирект на узел хранения. Посмотрел, куда ведут редиректы:

Отдаются ли файлы с Яндекс Диска
Отдаются ли файлы с Яндекс Диска

Почти весь мой Диск лежит на узлах с суффиксом klg, скорее всего это Калуга. Из 262 файлов там отдались 117. Узел принимает соединение и молчит, rclone ждет ответа до тайм-аута.

Отсеять мертвые файлы заранее по имени узла не получилось. Из 225 узлов в выборке 31 оказался смешанным: часть файлов с него отдается, часть нет.

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

Как настроил копирование

Сначала пробовал WebDAV. Под нагрузкой он отвечает 503 и рвет соединения. На одних и тех же доступных файлах WebDAV дал примерно 0,2 MB/s на поток, REST примерно 0,8 MB/s. Плюс REST отдает MD5 каждого файла, а WebDAV хешей не отдает, так что дальше все через REST.

По умолчанию rclone ждет ответа 5 минут и повторяет запрос 10 раз. На мертвом файле поток стоит десятки минут, и копирование встает. К тому же к середине дня Яндекс стал выдавать ссылку на скачивание от 1 до 60 секунд, иногда с ошибкой 500. Причем и тогда, когда моя заливка стояла на паузе.

Подобрал такие параметры:

rclone copy yandex: gdrive:Yandex-backup --checksum \
  --transfers 64 --checkers 8 --tpslimit 20 \
  --timeout 60s --contimeout 15s --low-level-retries 2 --retries 1 \
  --drive-stop-on-upload-limit

Мертвый файл теперь отваливается за 1-2 минуты, а доступный, но медленный успевает. Все, что не скопировалось, видно в логе, повторный запуск докачивает только недостающее. Только copy, никакого sync: sync удаляет в копии то, чего нет на Диске.

Крутится это на VPS в Docker. 64 потока занимают около 310 MB памяти и до 40% одного ядра. На крупных файлах выходило до 33 MB/s. Каждую ночь cron запускает копирование заново и подбирает то, что Яндекс успел вернуть.

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

Со стороны Google два момента. Общий client_id rclone для Google Drive в 2026 году выводят из эксплуатации, нужен свой из Google Cloud Console. Приложение в консоли надо перевести в “In production”, иначе токен перестанет работать через 7 дней. Еще Google принимает не больше 750 GB в сутки, так что 1,8 TB заливаются минимум три дня.

Проверка

У Яндекса и у Google Drive есть MD5, поэтому сверка идет без скачивания:

rclone check yandex: gdrive:Yandex-backup --one-way --missing-on-dst missing.txt --differ differ.txt

По самой важной для меня папке с документами вышло так. В ней 5 394 файла, 2 315 уже в Google и совпали по MD5, расхождений ноль. Остальные 3 079 лежат на недоступных узлах и ждут ночных запусков.

А как же приложение Яндекс Диска

С 3 июня 2026 года приложение для Windows и macOS синхронизирует файлы только с подпиской Яндекс 360. Без подписки в нем открываются лишь файлы, которые уже сохранены на компьютере.

Если подписка есть, приложение годится для простой копии на этом же компьютере. Но это двусторонняя синхронизация: удалилось на Диске, удалится и у вас. Списка того, что не скачалось, оно не показывает, сверки по MD5 в нем нет. Для фото из безлимита у него, правда, есть своя опция “Копировать фото и видео на компьютер”.

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

  1. Файлы Диска копируются в Google Drive через REST с токеном Полигона, копия сверяется по MD5.

  2. Фото из безлимита перенесены в обычную папку, 30 738 из примерно 30 800.

  3. Примерно половина файлов пока недоступна, их подбирает ночной запуск.

Все это собрал в репозиторий: скрипты подключения и копирования для Windows и Linux/macOS, yd.js для безлимита, вариант для VPS и инструкции по шагам. Проверял на Windows PowerShell 5.1, в WSL и на VPS.

https://github.com/KenGuru66/yandex-disk-rescue

Если у кого-то файлы с калужских узлов начали отдаваться, напишите в комментариях. Интересно понять, восстанавливает Яндекс хранилище или нет.

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


  1. Aquahawk
    17.10.2026 08:24

    как я рад что давно съехал с коммерческих облаков на selfhosted. Даже пока яндекс не требовал подписки вынуть фото с безлимита был тот ещё квест, но в прилажухе это можно было сделать. Стек selfhosted: syncthing(мега доволен), pingvin-share-x(недоволен, но покатит), immich(мега доволен). Документы, фотки, прочее файло, всё синкануто и под моим конотролем, заменить тот же телефон или ноут дело пары часов на всё про всё. Ну и свой сервер с рейдом-зеркалом и ещё один в другой квартире для бекапа.


    1. outlingo
      17.10.2026 08:24

      Решение «старой школы» - держим данные локально, в облаке - третья копия

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


      1. 1win1
        17.10.2026 08:24

        Дело не в "поколениях", просто все люди делятся на 2 категории...


        1. Dandy_the_crocodile
          17.10.2026 08:24

          На 3: третья ещё и проверяет возможность восстановления.


          1. tbl
            17.10.2026 08:24

            Теперь еще claude/codex есть, с помощью которых бэкап важного на внешний диск можно настроить вообще с полпинка - то, до чего руки раньше не доходили.

            У меня линукс на десктопе и ноуте, внешний диск для бэкапов зашифрован под luks с паролем-фразой, и параллельно с токенами, хранящимися в tpm десктопа/ноута.

            Раз в неделю вылезает уведомление, что пора забэкапиться. Подключение этого диска к компу автоматически включает монтирование тома btrfs из-под luks без запроса пароля, данные складываются с помощью rsync и фиксируется btrfs-снапшот. Места на диске (512 GB) хватает для хранения до 10 снапшотов, старые снапшоты удаляются. После выполнения рсинка и фиксации снапшота, проверяется возможность разворачивания системы в podman-контейнере. Если все ок, то диск размонтируется, и вылезает уведомление, что диск можно отсоединить от компа.

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


            1. remzalp
              17.10.2026 08:24

              Ага, а иногда Claude позволяет избавиться от лишних файлов
              https://habr.com/ru/news/1086984/


              1. tbl
                17.10.2026 08:24

                Если в YOLO-режиме все фигачить, то так и будет


                1. remzalp
                  17.10.2026 08:24

                  Когда он предлагает команду на 5 строк из цепочки вызовов утвердить, где один лишний пробел способен изменить поведение (вспомним пробел в деинсталляторе яндекс диска), много ли проверяют дотошно вот совсем всё?


                  1. tbl
                    17.10.2026 08:24

                    Я соннетовский классификатор (тот, что в auto mode используется в claude) тестировал через API вызовы с теми же системными промптами - он отлавливает разные вариации попыток почистить рут, /tmp или хомяк. Но вероятность, что может пропустить, никогда не равна нулю. Поэтому агентов в изолированном окружении всегда использую. landlock или bubblewrap в этом плане отлично подходят

                    Плюс критичный код прошу делать под tdd либо на питоне, либо на go, никогда не шелл-скрипты (если только это не однострочный лаунчер, но тоже под тестами)


                    1. Wesha
                      17.10.2026 08:24

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

                      И сколько у Вас в общей сложности слоёв швейцарского сыра?


            1. DungeonLords
              17.10.2026 08:24

              У вас похоже хорошее решение, но всё же обратите внимание на Почему rsync ≠ гарантия целостности данных


              1. tbl
                17.10.2026 08:24

                Ок, учту. Но у меня включен расчет контрольных сумм (а не только сравнение по mtime и размеру), плюс это локальный бэкап на диск, подключенный по usb-c, потеря сетевой связности во время процесса не грозит.


          1. iskatel-tut
            17.10.2026 08:24

            Четвертые ещё ставят генератор, а пятые - (если заправить не удастся) подключают солнечные панели (какой у них ресурс???). Что делают шестые -хз…


            1. rombell
              17.10.2026 08:24

              шестые делают твёрдые копии.


        1. blind_oracle
          17.10.2026 08:24

          У меня друган (лет на 5 младше, не считаем за другое поколение) - работает в ИТ, девопс, то сё. В итоге единственная копия большей части его фоток была в Яндекс.Диске, без бекапов. Большая часть пока что тю-тю.

          facepalm.jpg

          Так что хрен знает от чего это зависит, по-моему распиздяйство просто.


          1. wepp
            17.10.2026 08:24

            С фотками такое дело. У меня вот сохранены копии каких-то отдельных лет даже в разных местах, но в основном - Гугл Фото. Пропадут все фото? Ну, жизнь на этом не закончится. А есть те, кто печатает альбомы для родственников, но до сих пор не все фото в облаке Мэйла (которых вообще стоило послать после того, как отозвали бесплатные ГБ).


            1. Daemonic
              17.10.2026 08:24

              А они разве отозвали? У меня до сих пор виден промо терабайт


              1. Wesselloff
                17.10.2026 08:24

                100 гигов "навсегда" оказались не навсегда и превратились в 8 гигов. Тер, по-моему, не тронули.


              1. cofein51
                17.10.2026 08:24

                Они через условные 3-5 лет на почту прислали - вы не пользуетесь, мы забираем, если хотите оставить - начните пользоваться.

                Я скинул десяток фото, мне оставили.


                1. 8street
                  17.10.2026 08:24

                  Потом напишут: вы пользуетесь диском, если не оплатите, заберем.


            1. irishmann
              17.10.2026 08:24

              Раньше у меня так же были 100 гб на мэйле, их "навсегда" продлилось 10 лет. 50 гб фоток хранились в облаке и на личном компе. А когда "навсегда" кончилось, забэкапил фотки на 4 устройства - 2 ноута и 2 компа. Где-то два года назад купил фотопринтер, теперь еще и физические фотографии имеются.


      1. Memphiss
        17.10.2026 08:24

        Я из тех, кто хранил влажные файлы в 3 местах:

        Гугл диск, Яндекс и личный комп.

        Поэтому доки спасены.

        А вот фотки у меня за десятилетия накопились в достаточном количестве (30 ГБ), что комп или SSD не казались местом, которое нужно засорять фотками. Вот я их на Яндекс диск загрузил. О чем сейчас жалею.

        Да, Яндекс, несмотря на "бесплатный октябрь", все равно требует иметь подписку 360.

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

        Но если автор написал стену текста, я просто попросил нейронку навайбкодить python скрипт, который из Яндекса выкачивает весь диск файлами поштучно.

        Что скачал успешно - помечает как успех.

        Что не скачалось - пишет в txt файл лог.

        Ноут 3 суток исполнял нонстоп этот скрипт.

        Результаты:

        Выкачалось 14 ГБ из 27 ГБ.

        Лог:

        Невыкачанные файлы показывают ошибку сервера 500.

        Я надеюсь, что у Яндекса RAID 6 память. Поэтому через неделю запущу скрипт повторно и он отсутствующие файлы попытается скачать повторно, а успешные пропустит.


        1. rombell
          17.10.2026 08:24

           фотки у меня за десятилетия накопились в достаточном количестве (30 ГБ), что комп или SSD не казались местом, которое нужно засорять фотками

          б/у HDD на 2Тб не так давно стоил 2-3к, не знаю, как сейчас. Все фотки на дисках, копии разнесены по двум квартирам. Сверяются раз в год. Пополняются по мере необходимости. Добавляет примерно 2-3 часа в месяц геморроя, но и только.

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

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


          1. KsenoBit_16BIT
            17.10.2026 08:24

            > б/у HDD на 2Тб не так давно стоил 2-3к, не знаю, как сейчас.

            а сейчас 4-6-8, в зависимости от наглости торгаша :(

            мечта о хранилке на 4-8-10тб разбилась об ценник на винты(


            1. Wesha
              17.10.2026 08:24

              При этом ценник на винты ещё дополнительно подрос, потому что все начали переход на SSD.


            1. rombell
              17.10.2026 08:24

              Значит, я очень удачно в 24м купил на Авито 3 штуки за 8600, с нынешним моим приростом занятого места хватит лет на 5 с учётом выбытия старых. Итого у меня около 12 полочников, начиная с 250Гб родом из начала 10х, и заканчивая 4Тб.

              Не доверяю облакам, только как средство хранить 3ю копию и для обмена.