Чем можно бэкапить S3 хранилище?

Мы с коллегой начитались про то какой S3 стильный, модный, молодёжный удобный, отказоустойчивый, вместительный и решили попробовать перенести туда некоторые тяжёлые папки. В тестовом окружении (minio) вроде бы работает, но возник вопрос "а как бэкапить"? Из того, что есть сейчас и неплохо решает задачу - borg и acronis (лицензия, ага), но у них файловый\блочный уровни, а тут - не совсем.


Ответы (2 шт):

Автор решения: Total Pusher

В issues официального репо контрибьютор перечислил инструменты для бекапа:

Также можно сделать средствами mc:

mc mirror --remove --preserve $MINIO_ENV/<bucket> $BACKUPS_DIR/$BACKUP_NAME
  • $MINIO_ENV - minio хост (например myminio)
  • $BACKUPS_DIR/$BACKUP_NAME - абсолютный путь к локальному каталогу

mc входит в состав minio, и предварительно нужно настроить ее конфиг.

→ Ссылка
Автор решения: don Rumata

Итак, я нашёл ответ. В корневой папке, которая задаётся через MINIO_VOLUMES (в docker - это, как правило, /data, а в bare-metal конфигурациях, обычно хранят в /data/minio) - помимио папок с бакетами, есть скрытая .minio.sys, в которой хранится вся метаиформация. В том числе - политики, логины/пароли и т.д. На каждом хосте кластера содержимое уникальное (если считать хэши), так что стратегия выглядит так:

С какой-то машины забираем всю /data/minio, с остальных, только /data/minio/.minio.sys.

Как поэксперементировать:

docker-compose.yml:

---
networks:
  minio:
    driver: ${NETWORKS_DRIVER:-bridge}
    name: minio

services:

  minio1:
    restart: always
    image: "${MINIO_DOCKER_IMAGE:-minio/minio}:${MINIO_DOCKER_TAG:-RELEASE.2025-09-07T16-13-09Z}"
    container_name: minio1
    command: minio server /data
    env_file: .env_cluster
    volumes:
      - ./minio1:/data
    ports:
      - "9011:9000"
      - "9021:9001"

  minio2:
    restart: always
    image: "${MINIO_DOCKER_IMAGE:-minio/minio}:${MINIO_DOCKER_TAG:-RELEASE.2025-09-07T16-13-09Z}"
    container_name: minio2
    command: minio server /data
    env_file: .env_cluster
    volumes:
      - ./minio2:/data
    ports:
      - "9012:9000"
      - "9022:9001"

  # minio3:
  #   restart: always
  #   image: "${MINIO_DOCKER_IMAGE:-minio/minio}:${MINIO_DOCKER_TAG:-RELEASE.2025-09-07T16-13-09Z}"
  #   container_name: minio3
  #   command: minio server /data
  #   env_file: .env_cluster
  #   volumes:
  #     - ./minio3:/data
  #   ports:
  #     - "9013:9000"
  #     - "9023:9001"

  # minio4:
  #   restart: always
  #   image: "${MINIO_DOCKER_IMAGE:-minio/minio}:${MINIO_DOCKER_TAG:-RELEASE.2025-09-07T16-13-09Z}"
  #   container_name: minio4
  #   command: minio server /data
  #   env_file: .env_cluster
  #   volumes:
  #     - ./minio4:/data
  #   ports:
  #     - "9014:9000"
  #     - "9024:9001"

.env_cluster:

MINIO_ROOT_USER=sysadmin
MINIO_ROOT_PASSWORD=qazwsxedc
MINIO_VOLUMES=http://minio1:9000/data http://minio2:9000/data
# http://minio3:9000/data
# http://minio4:9000/data
# MINIO_VOLUMES=http://minio{1...4}:9000/data
MINIO_OPTS="--json --console-address :9001"
find ./minio* -type f -print0 | xargs -0 sha1sum | sort
→ Ссылка