Ротация файлов бэкапа
На первый взгляд, ротация бэкапов - задача не сложная.
Казалось бы, что может быть проще - сохранять строго определенное количество папок или архивов с бэкапом, именуя их с использованием даты.
На самом деле не все так просто. Первый вопрос, который возникает сразу - что произойдет если какие-то важные рабочие файлы какое-то продолжительное время не будут изменяться? Будет происходить "холостой" бэкап, а последующая ротация бэкапов через некоторое время приведет к тому, что все эти файлы в старых версиях бэкапов будут одинаковы.
Поэтому для разумного бэкапа лучше все-таки делать анализ резервируемых данных.
И одного простого скрипта, одинакового для всех, здесь может быть недостаточно.
Содержание
Анализ резервируемых данных
Анализируя файлы бэкапа, нужно определится - какие из них будут меняться чаще, какие реже, и насколько важно хранить старые версии тех файлов, которые изменяются редко.
Кроме того нужно определить - получится ли разбить файлы на группы исходя из того чаще или реже они изменяются. И насколько это сложно реализуемо (разделены ли она по разным папкам и т.д.).
Лучше всего конечно было бы, если бы такие файлы находились в разных исходных папках. Если четкого разделения по папкам нет, то необходимо определить - насколько сложно выделить такие файлы по другим признакам - имени, дате или т.п.
Так же важно для анализа учитывать размер и количество файлов. Если файлов много и среди них присутствуют файлы большого размера, то отнестись к анализу необходимо более внимательно - необходимо будет видимо учитывать время бэкапа для большого количества файлов, а так же учитывать доступное место для файлов большого размера.
Пример разделения файлов на группы
Смоделируем ситуацию, когда у Вас в папке "Мои документы" есть папка с фотографиями, есть документы которые часто меняются и есть пару документов которые меняются редко, но есть вероятность того что старые версии могут когда-нибудь пригодится. Для редко изменяемых документов можно конечно сразу делать новые версии прямо в рабочей папке, но надеяться на свою внимательность в этом вопросе опасно, и, кроме того, если речь идет о компьютере например членов Вашей семьи, то проконтролировать этот процесс будет сложно вдвойне.
Самым простым решением здесь было бы разбить все эти файлы на три условные группы (фотографии, простые документы, редко изменяемые важные документы), разложить их по разным папкам и создавать цепочку версий в бэкапах для каждой группы файлов индивидуально.
В этом случае, для фотографий может быть определена отдельная папка бэкапа, в которой достаточно хранить копию последней версии фото и "уходящие в прошлое" папки только с фотографиями которые например были удалены (т.е. не дублировать всю папку, а оставлять копии только тех файлов которые были удалены или изменены). См. здесь описание системы, которая позволяет делать избирательный отбор, сохраняя только удаленные и изменяемые файлы.
Для непредсказуемо изменяющихся файлов документов видимо имеет смысл сохранять их все без анализа, сделав цепочку папок с полным архивом длиннее (т.е. сохранять большее количество прошлых версий всей папки).
Для файлов, которых немного, и имена их точно известны (и точно известно, что они не будут меняться), можно настроить бэкап так, чтобы эти файлы выбирались и анализировались скриптом по именам - так же в отдельную папку с отдельной цепочкой версий и индивидуальной ротацией.
Т.е. в этом примере мы получаем не один общий бекап, в котором ротация старых версий всей папки бэкапа происходит для всех одинаково, а три разных цепочки бекапов, для каждой из которых ротация будет происходить индивидуально.
Итак:
- В бэкап-папках со старыми версиями фотографий (файлов большого размера) будут сохраняться только отдельные файлы, копируемые туда только после анализа изменений.
- Папки с бэкапами "непрогнозируемой кучи" будут скорее всего хранить общую копию для всех файлов сразу, и скорее всего цепочка бэкапов будет создаваться каждый день на заданный период в прошлое.
- Для редко изменяемых файлов у которых известны заранее имена, папки с их старыми версиями могут иметь большие промежутки времени между собой.
Таким образом не будет бессмысленного дублирования больших файлов (например фото), версии редко изменяемых файлов будут сохраняться дольше, а ротация бэкапов для каждой группы будет настроена индивидуально.
КСТАТИ! Про избирательный бэкап с дополнительным резервированием только измененных и удаленных от предыдущей версии бэкапа, см. отдельную заметку: Бэкап с сохранением старых версий файлов и папок
Скрипты ротации - bat и vbs
Скрипты ротации здесь приведены для примера, их можно доработать под себя в соответствии со своими задачами.
В примере второго скрипта (на vbs) есть одна папка которая может быть исключена из ротации. При желании можно доработать скрипт так чтобы таких исключенных из ротации папок было несколько.
Так же приведен пример скрипта ротации логов, который анализирует файлы по именам.
Скрипт bat, удаляющий все старые архивы по времени их изменения
Скрипт ротации анализирует время файлов архивов, оставляя только 10 самых "свежих" (независимо от имени файла):
rotation_all_files_date.bat
@echo off setlocal enableextensions enabledelayedexpansion set bPath=C:\Backup_rar_files set /a iCount = 10 for /f "skip=%iCount% usebackq delims=" %%i in ( `dir /b /a:-d /o:-d /t:w "%bPath%"` ) do del /f /q "%bPath%\%%~i" endlocal exit /b 0
Скрипт vbs, удаляющий старые папки за исключением указанной
Скрипт ротации анализирует время папок, присутствующее в их именах, оставляя только последние 30, но игнорирует при этом всегда одну указанную папку.
Запускать так (в консоли): cscript //NoLogo "C:\_ПУТЬ_\rotation_folders_name.vbs" /path:"D:\Backup" /exclude:"D:\Backup\NoDelFolder" /max:30 /testmode
ВАЖНО! Параметр /testmode
rotation_folders_name.vbs
Оставьте комментарий
Вы можете войти под своим логином или зарегистрироваться на сайте.