LinuxForum.Fans
Тема

Прореживание архивов

Автор: Cruiser78 5 сообщений 1820 просмотров
#280794

Привет всем!

Наведите на инструмент, с помощью которого можно элегантно решить следующую типовую задачу.
1. Ежедневно делается некий архив данных. Поименовать его, по большому счету, можно как угодно.
2. Надо обеспечить следующий режим хранения:
2.1. Первая неделя хранения - хранятся все ежедневные архивы.
2.2. Все, что старше недели, но младше месяца - хранится только одна еженедельная копия.
2.3. Все, что старше месяца, но младше полугода - хранится по два файла за месяц.
2.4. Все, что старше полугода - хранится только один файл в месяц.
Никак не могу придумать ничего, кроме как вводить при формировании архива дополнительный "символ" в имя, который определит, что этот архив будет того или иного длительного хранения... А хотелось бы обойтись только датой создания архива...
Задачка то типовая, может решал кто?

#280795

Можно написать скрипт. Команда find может находить файлы по времени их создания и применять к ним опеределённые действия.
P.S. Неужели многочисленные готовые решения вас не удовлетворяют?

#280796

К примеру, выдержка из man obnam:

Policy for keeping and removing backup generations
The forget command can follow a policy to automatically keep some and remove other backup generations. The policy is set with the
--keep=POLICY option.

POLICY is comma-separated list of rules. Each rule consists of a count and a time period. The time periods are h, d, w, m, and
y, for hour, day, week, month, and year.

A policy of 30d means to keep the latest backup for each day when a backup was made, and keep the last 30 such backups. Any back‐
ups in between will be removed, as will any backups older than the oldest kept backup.

As an example, assume backups are taken every hour, on the hour: at 00:00, 01:00, 02:00, and so on, until 23:00. If the forget
command is run at 23:15, with the above policy, it will keep the backup taken at 23:00 on each day, and remove every other backup
that day. It will also remove backups older than 30 days.

If backups are made every other day, at noon, forget would keep the 30 last backups, or 60 days worth of backups, with the above
policy.

Note that obnam will only inspect timestamps in the backup repository, and does not care what the actual current time is. This
means that if you stop making new backups, the existing ones won't be removed automatically. In essence, obnam pretends the cur‐
rent time is just after the latest backup when forget is run.

The rules can be given in any order, but will be sorted to ascending order of time period before applied. (It is an error to give
two rules for the same period.) A backup generation is kept if it matches any rule.

For example, assume the same backup frequence as above, but a policy of 30d,52w. This will keep the newest daily backup for each
day for thirty days, and the newest weekly backup for 52 weeks. Because the hourly backups will be removed daily, before they
have a chance to get saved by a weekly rule, the effect is that the 23:00 o'clock backup for each day is saved for a month, and
the 23:00 backup on Sundays is saved for a year.

If no policy is given, forget will keep everything.

A typical policy might be 72h,7d,5w,12m, which means: keep the last 72 hourly backups, the last 7 daily backups, the last 5 weekly
backups and the last 12 monthly backups. If the backups are systematically run on an hourly basis, this will mean keeping hourly
backups for three days, daily backups for a week, weekly backups for a month, and monthly backups for a year.

The way the policy works is a bit complicated. Run forget with the --pretend option to make sure you're removing the right ones.
#280797
"Cruiser78" написал:
2.1. Первая неделя хранения - хранятся все ежедневные архивы.
2.2. Все, что старше недели, но младше месяца - хранится только одна еженедельная копия.
2.3. Все, что старше месяца, но младше полугода - хранится по два файла за месяц.
2.4. Все, что старше полугода - хранится только один файл в месяц.

Для меня самым изящным решением стало резервное копирование с ротацией по мотивам rsync_snapshots, обрабатывать можно и не rsync'ом, у меня в такой оболочке работает mysqldump+tar.
2.1. make_snapshot daily 7 (запуск из cron каждый день)
2.2. make_snapshot weekly 4 (запуск из cron раз в неделю)
и тд.

#280801
Lupo Alberto написал:
Можно написать скрипт. Команда find может находить файлы по времени их создания и применять к ним опеределённые действия.
P.S. Неужели многочисленные готовые решения вас не удовлетворяют?

Я голову сломал, чтобы только на find'е такое разрулить. Там такой наворот получается, что мама не горюй. А сложный скрипт - не слишком работоспособен. Ничего, кроме как изначального введения отдельных значащих символов в имена архивных файлов и их обработки (совместно с отбором по времени с помощью find) я придумать, увы, не смог.
Ну или ротация, как аналог такого "символа". А сработать только find'ом я не придумал как...

Войдите или зарегистрируйтесь, чтобы ответить.