Какой самый быстрый способ ежедневного резервного копирования более 500 тыс. файлов?

Какой самый быстрый способ ежедневного резервного копирования более 500 тыс. файлов?

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

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

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

решение1

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

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

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

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

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

  • Btrfs– Разработано для Linux, менее проверено в боях
  • ЗФС– Портирован на 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из последней команды, если это первая резервная копия.

Связанный контент