Как правильно бэкапить файлы в Yandex Storage?

Есть файлы (документы, картинки) на сервере. Есть Yandex Storage. Нужно огранизовать бэкап файлов на Yandex Storage. В голову пришло несколько вариантов:

1. Загружать/удалять в Яндекс в момент загрузки/удаления на сервере.
2. Сделать таблицу файлов загруженных на Яндекс. В момент загрузки/удаления помечать файлы в таблице и затем, допустим раз в неделю, пачкой проводить загрузку/удаление на Яндекс.
3. Сносить все файлы в Яндекс. Упаковывать все файлы на сервере в архив. И грузить этот архив на Яндекс. Повторять раз в неделю. Но тогда это вероятно отразится на стоимости в Яндекс т.к. будут операции на загрузку-удаление гигабайтов данных.

Как поступить и что выбрать?

Дополнительно:

А почему просто не взять готовый инструментарий типа borg-backup, restic, duplicity, да тысячи их? Там и ротация бэкапов настраивается, можете шифровать данные, делать инкрементальные или полные бэкапы и т.п. Большинство таких утилит умеет работать с S3-совместимыми хранилищами.

  • ge, не знал про эти утилиты.
  • Инкрементальные бакапы
    Каждый архив должен содержать только разницу между предыдущим состоянием файловой системы и текущим

    Каждый инструмент резервного копирования использует свой формат хранения такого снапшота

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

    p.s. недостаток инкрементальных бакапов в том что для восстановления состояния нужно "применить снапшоты" за все время с момента первого сохраненного состояния

    решают эту проблему тем что ограничивают количество промежуточных состояний и с каждым новым модифицирют стартовое состояние, применив к нему самый старый бакап (который после этого удалят)

    p.p.s. btrfs имеет встроенные механизмы получения инкрементальных бакапов между снапшотами без сканирования всех файлов (что актуально для ОГРОМНЫХ архивов)

    • Это типа второго варианта только с архивами? С архивами не работал никогда, не представляю как все эти операции с ними проводить (сравнения, изменения итд). Выглядит в моей голове как то неоправданно сложно.
    • Все нормальные архиваторы от tar до rar умеют совершать архивацию, с пометкой в файловой системе флаг что файл в архиве или например по дате (все файлы с изменениями после даты) и т.п.

      чуть сложнее с контролем за удалением файлов, но вот пример, в windows (в linux всегда было, loop устройства) можно создать .vhdx файл (в панели управления дисками создать виртуальный диск), внутри которого развернуть полноценную файловую систему,... копировать файлы туда можно с помощью rsync, он и удалит и обновит и не будет лишние операции делать.

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

    • rPman, звучит как правильное решение) Хотя для меня все равно сложно, если только библиотеку под ПХП поискать на гитхабе.

    Ответы:

    А почему актуально только платное облачное хранение?
    Локального сервера/NAS у вас нет?

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

     

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

     

      • Как правильно бэкапить файлы в Yandex Storage?Есть ответ
      • 07.04.2024
      Ответить

      Для правильного бэкапа файлов в Yandex Storage, можно воспользоваться Yandex Object Storage API, который предоставляет различные методы для работы с файлами и папками в облачном хранилище.

      Прежде всего, необходимо получить доступ к Yandex Object Storage API, для этого необходимо создать аккаунт на Яндекс Облаке и настроить доступ к API. Затем необходимо установить библиотеку для работы с API, например, yandex-cloud/php-sdk.

      Далее можно использовать следующий пример кода на PHP для создания бэкапа файла в Yandex Storage:

       'YOUR_ACCESS_TOKEN',
          'cloudId' => 'YOUR_CLOUD_ID',
          'folderId' => 'YOUR_FOLDER_ID',
      ]);
       
      $fileName = 'backup.zip';
      $filePath = '/path/to/backup.zip';
       
      $objectStorage->uploadFile($fileName, fopen($filePath, 'r'));

      В данном примере кода, мы используем библиотеку yandex-cloud/php-sdk для работы с Yandex Object Storage API. Мы создаем новый экземпляр клиента ObjectStorageClient и указываем необходимые параметры, такие как токен доступа, идентификатор облака и идентификатор папки.

      Затем мы указываем имя файла и путь к файлу, который мы хотим загрузить в облако. Используя метод uploadFile, мы загружаем файл в Yandex Storage.

      Таким образом, приведенный выше код поможет вам правильно бэкапить файлы в Yandex Storage, используя Yandex Object Storage API. Не забудьте заменить YOUR_ACCESS_TOKEN, YOUR_CLOUD_ID и YOUR_FOLDER_ID на ваши реальные данные.

    Оставить комментарий