Скрипт для удаления старых резервных копий
У меня много резервных копий, например:
backup-20130528_054504_mysql.tar.gz,
bill_db_201305290130.BAK.bz2,
etc_20130412.tbz
Это полные резервные копии, которые делаются каждый день.
До сегодняшнего дня у меня есть задача cron с такой командной строкой:
/usr/bin/find /media/backups -ctime +7 -delete
Но это была плохая идея.
Один сервер прекратил делать новые резервные копии (файловая система была заполнена) более 7 дней назад, и все старые резервные копии были удалены cron.
Вероятно, мне нужен новый скрипт для замены "find -ctime", который в любом случае будет содержать несколько старых резервных копий.
Все мои файлы резервных копий имеют имена {unique_prefix}ГГГГММДД...
Я хочу что-то вроде:
- одна резервная копия за каждый год до прошлого года
- одна резервная копия за каждый месяц прошлого года
- 4 резервных копии за каждую неделю предыдущего месяца
- и 7 резервных копий за последние 7 дней.
для каждого {unique_prefix}.
Все эти файлы загружаются на мой сервер cron через rsync, ssh и т.д..
Мне не нравится изобретать велосипед, и я уверен, что это типичная задача.
Пожалуйста, укажите мне на решение.
3 ответа
Я не согласен с Даудом и считаю, что простые резервные копии - лучшие.
Что вам действительно нужно, это не более умный способ удаления вещей (хотя это неплохая идея, я написал нечто подобное, которое просто хранит последние N резервных копий), а также надлежащий мониторинг вашей файловой системы, чтобы вы заметили, что она заполняется. задолго до того, как это произойдет, и вы сможете действовать. Таким образом, вы не потеряете свои данные.
Сценарий оболочки может обрабатывать резервные копии до определенной степени сложности. У вас также есть инструменты, которые используют tar
а также rsync
для выполнения еще более запутанных задач (rsnapshot
, например).
Однако, похоже, вам нужна очень тонкая политика резервного копирования и хранения, которую сценарий оболочки может не подходить для обработки, если только он не слишком сложен и другие упомянутые инструменты не предоставляют.
Вы должны рассмотреть возможность использования специального программного обеспечения для этой задачи. Их много, но на ум приходят bacula и amanda.
Вы можете использовать политику, основанную на времени (опасно, если вы перестанете создавать новые резервные копии, поскольку все они в конечном итоге будут удалены):
find . -type f -name 'app-*.tar.gz' -mtime +100 --delete
Хранение последних X элементов безопасно:
ls -t app-*.tar.gz | tail -n +100 | xargs --no-run-if-empty rm
Лучшее, что вы можете получить, используя ежедневную/еженедельную/месячную/годовую стратегию, реализовать которую непросто. Вы можете попытать удачу сrsnapshot
иcron
.
Существуют библиотеки, которые поддерживают удаление старых снимков, однако вам необходимо принять их соглашения: