4

У нас есть приложение, которое сгенерировало более 540 тыс. Изображений. Изображения хранятся в древовидной структуре, которая на данный момент использует 5 миллионов инодов.

Мы хотели бы ежедневно делать резервные копии данных на удаленном стороннем сервере. Мы подумали об использовании rsync, но не уверены, что это будет самый быстрый способ.

Ребята, есть ли у вас рекомендации по эффективной стратегии резервного копирования?

1 ответ1

2

Чувак, так долго каждый день нужно сканировать 5 000 000 инодов, чтобы найти файлы, которые изменились!

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

Ну, вы можете ... со снимками !

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

В Linux две хорошо известные файловые системы моментальных снимков:

  • Btrfs - Разработано для Linux, менее проверено в бою
  • ZFS - портирован на Linux, был дольше

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

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

Btrfs инкрементные резервные копии

Это пример команд, которые вы можете запускать для создания инкрементных резервных копий и отправки их на сервер резервного копирования:

# Make a snapshot
btrfs subvolume snapshot -r /app/data /backup/app-data-$(date "+%Y%m%dT%H%M%S%Z")

# Ensure the snapshot is saved
sync

# Find your latest snapshot, referred to as `/backup/app-data-THIS_BACKUP_TIMESTAMP` below
ls -lhtr /backup/

# Send the snapshot since the previous snapshot to the backup server
btrfs send -p /backup/app-data-LAST_BACKUP_TIMESTAMP /backup/app-data-THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "btrfs receive /backup/app-data"

Примечание. Исключите -p /backup/app-data-LAST_BACKUP_TIMESTAMP из последней команды, если это первая резервная копия.

Инкрементные резервные копии ZFS

Это пример команд, которые вы можете запускать для создания инкрементных резервных копий и отправки их на сервер резервного копирования:

# Create a snapshot of the "data" dataset in your "app-pool" zpool
zfs snapshot app-pool/data@$(date "+%Y%m%dT%H%M%S%Z")

# Find your latest snapshot, referred to as `app-pool/data@THIS_BACKUP_TIMESTAMP` below
zfs list -rt snapshot app-pool/data

# Send the snapshot since the previous snapshot to the backup server
zfs send -i app-pool/data@LAST_BACKUP_TIMESTAMP app-pool/data@THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "zfs receive backup-pool/app-data"

Примечание. Исключите -i app-pool/data@LAST_BACKUP_TIMESTAMP из последней команды, если это первая резервная копия.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .