Чувак, так долго каждый день нужно сканировать 5 000 000 инодов, чтобы найти файлы, которые изменились!
Что, если был способ создать резервную копию только тех изменений, которые произошли с момента последнего резервного копирования?
Ну, вы можете ... со снимками !
Самым большим препятствием для создания снимков является переключение на файловую систему, которая их поддерживает.
В Linux две хорошо известные файловые системы моментальных снимков:
- Btrfs - Разработано для Linux, менее проверено в бою
- ZFS - портирован на Linux, был дольше
Оба являются файловыми системами копирования при записи. Для вас это практически означает, что они отслеживают изменения с момента последнего снимка, поэтому при отправке последнего снимка на сервер резервного копирования отправляются только изменения, но у вас остается полная копия всех ежедневных резервных копий, которые вы решите. хранить.
Это означает, что в качестве бонуса у вас есть возможность хранить резервные копии более чем на один день, не занимая много дополнительного места (только дисковое пространство, используемое для изменений каждый день), и вы можете гибко удалять резервные копии, сохраняя еженедельные, ежемесячные или ежегодные резервные копии, как вы хотите.
Это пример команд, которые вы можете запускать для создания инкрементных резервных копий и отправки их на сервер резервного копирования:
# 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
из последней команды, если это первая резервная копия.
Это пример команд, которые вы можете запускать для создания инкрементных резервных копий и отправки их на сервер резервного копирования:
# 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
из последней команды, если это первая резервная копия.