Чем можно бэкапить S3 хранилище?
Мы с коллегой начитались про то какой S3 стильный, модный, молодёжный удобный, отказоустойчивый, вместительный и решили попробовать перенести туда некоторые тяжёлые папки. В тестовом окружении (minio) вроде бы работает, но возник вопрос "а как бэкапить"? Из того, что есть сейчас и неплохо решает задачу - borg и acronis (лицензия, ага), но у них файловый\блочный уровни, а тут - не совсем.
Ответы (2 шт):
В issues официального репо контрибьютор перечислил инструменты для бекапа:
- Restic https://docs.minio.io/docs/restic-with-minio
- Rclone https://docs.minio.io/docs/rclone-with-minio-server
- Cloudberry Backup https://www.msp360.com/backup.aspx
Также можно сделать средствами mc:
mc mirror --remove --preserve $MINIO_ENV/<bucket> $BACKUPS_DIR/$BACKUP_NAME
$MINIO_ENV- minio хост (напримерmyminio)$BACKUPS_DIR/$BACKUP_NAME- абсолютный путь к локальному каталогу
mc входит в состав minio, и предварительно нужно настроить ее конфиг.
Итак, я нашёл ответ. В корневой папке, которая задаётся через 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