Скрипт для удаления старых резервных копий

У меня много резервных копий, например:

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.

Существуют библиотеки, которые поддерживают удаление старых снимков, однако вам необходимо принять их соглашения:

Другие вопросы по тегам