Периодическое сохранение определённой папки в архив и удаление неактуальных архивов под Windows

Тема в разделе "Windows", создана пользователем Denixxx, 9 май 2015.

Модераторы: ADMiNZ
  1. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Недавно на работе полетел клиент-банк. И выяснилось, что последний бекап важных данных имеет дату от сентября 2013 г. Девица, которая работала на этом компьютере, на вопрос «Почему нет архивов», мило хлопала глазками;)
    В общем, в большинстве случаев известно, что со среднестатистического бухгалтера что-то, кроме анализа, требовать бесполезно.
    Поэтому сразу придумалось бекапить БД ежедневно, при старте компьютера, и как можно проще.
    Причем нужно ещё удалять старые архивы, скажем старше 30 дней, чтобы не забить диск. А также не запускать бекап при рестарте компьютера в тот же день.
    Проще чем бат-файл — ничего не придумать, вот и написал.
    В процессе написания выяснилось:
    1. В Гугле готового решения нет.
    2. Бат файлы имеют разные команды для разных версий Windows. Создать паузу под XP оказалось особым геморроем.
    3. Для правильного отображения русского языка в бат-файле должна быть установлена кодировка OEM 866. Что конечно же не умеет стандартный блокнот Windows. Пользуйтесь более продвинутыми редакторами, например Notepad++

    Кратко — как пользоваться backup_folder.bat
    • Создайте папку для будущих архивов.
    • Поместите туда файл backup_folder.bat Файл возьмите из этого репозитория соответственно Вашей версии системы Windows и Вашего языка.
    • Настройте параметры внутри backup_folder.bat Для этого отредактировать строчки:
    Код:
    rem Откуда копируем
    set from=D:\HOMEBANK\base
    rem Файл для логов копирования
    set log=result_%DATE%.txt
    rem Сколько архивов оставлять
    set old=30
    • Проверьте, как это работает — запустив файл. В этой же папке должны создаться папка бекапа и файл логов. Повторный запуск файла не должен создать архив, а просто вывести предупреждение. Подправьте параметры, если это необходимо.
    • Настройте периодический запуск файла. Для этого можно поместить ссылку на файл в автозагрузку при старте компьютера.
    Вообще в самом файле всё прокомментировано, так что для минимально имеющего понимание разобраться — не проблема.

    Ссылки.



    Лицензия: GPL 2.0
     
    Последнее редактирование: 9 май 2015
    pozhisni и latteo нравится это.
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.519
    Симпатии:
    1.368
    Это не совсем архивирование - это копирование, для архивирования надо бы прикрутить zip/rar/7z
    Зачем для xcopy параметр /s если уже есть /e ?
     
    Denixxx нравится это.
  3. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Ну да, это точнее — копирование. Там, для чего это писалось, стоит на слабенькой машинке (как и в большинстве офисов).
    Если ещё и архивировать, будет вместо 5 — 15 минут висеть.
    И при этом архивирование редко дает хороший результат — базы обычно слабо ужимаются, они уже хранятся сжатыми.
    /s ключ — рекурсивное копирование.
    Если нужно именно архивировать, а не копировать папку целиком, можно установить 7zip и вместо штатной xcopy использовать строку вида:
    Код:
    7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir | findstr /P /I /V «Compressing 7-Zip» >>result_%date%.txt
    Подробнее можете прочитать про архивирование в статье Перейти по ссылке
    Оттуда и эта строчка.
    Но в общем случае могу заметить, что ежедневное архивирование лучше делать в фоне, когда компьютер простаивает. При ежедневном старте компьютера лучше делать копирование, т.к. это быстрее и отнимает меньше ресурсов, и позволяет бухгалтеру быстрее приступить к полноценной работе.
     
    Последнее редактирование: 9 май 2015
  4. d_man

    d_man Писатель

    Регистр.:
    21 апр 2014
    Сообщения:
    6
    Симпатии:
    2
    А я пользуюсь двумя скриптами - в одно м с помощью rar.exe архивирую что необходимо:
    Код:
    "C:\Program Files\WinRAR\Rar.exe" a -agdd.MM.yyyy msh231-.zip L:\1C_BackUpBases\VolgaDrive\MSH231\1Cv8.1CD
    А вторым на vbs удаляю старые архивы:
    Код:
    '====================================
    '  del old files
    '====================================
    
    'Очистка ежедневных архивов старше 12 дней
    
    TargetFolder1 = "L:\1C_BackUpBases\VolgaDrive\GK6"
    TargetFolder2 = "L:\1C_BackUpBases\VolgaDrive\MSH231"
    TargetFolder3 = "L:\1C_BackUpBases\VolgaDrive\MSH141"
    
    Const OverWriteFiles = True
    ControlDate1 = Date-12
    ControlDate2 = Date-12
    ControlDate3 = Date-12
    
    '====================================
    
    On Error Resume Next
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    For Each objFile In objFSO.GetFolder(TargetFolder1).Files
        If objFile.DateLastModified < ControlDate1 Then
            objFSO.DeleteFile objFile.Path
        End If
    Next
    
    For Each objFile In objFSO.GetFolder(TargetFolder2).Files
        If objFile.DateLastModified < ControlDate2 Then
            objFSO.DeleteFile objFile.Path
        End If
    Next
    
    For Each objFile In objFSO.GetFolder(TargetFolder3).Files
        If objFile.DateLastModified < ControlDate3 Then
            objFSO.DeleteFile objFile.Path
        End If
    Next
    
    Set objFSO = Nothing
    Скрипты довольно простые думаю разобраться будет не сложно.
     
    Denixxx и latteo нравится это.
  5. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    VBScript на разных версиях винды работает одинаково? А rar разве не платная программа? Она везде стоит?
    Хотелось бы, чтобы был инструмент поуниверсальнее, что ли. А то с одной машинки на другую переносишь — не работает.
    Мне вот пришлось 2 версии скрипта на bat написать — надо бы в 1 объединить, как дойдут руки.
    Чтоб в начале определил какая версия винды и далее понеслась. Да заодно и настройки сделать — архивировать или копировать:)
    Вот написали бы на VBScript замену поуниверсальнее, если разбираетесь. В одном скрипте. И архив можно делать в формате zip — штатный же формат в Виндовс.
     
    Последнее редактирование: 3 сен 2015
  6. SynergyIT

    SynergyIT Постоялец

    Регистр.:
    19 июл 2013
    Сообщения:
    82
    Симпатии:
    19
    Добавлю свои скрипты - всё делаю в cmd, использую 7z и xcopy.
    Код:
    REM START - %DATE% - %TIME%
    if %TIME:~0,-9% GTR 9 goto DEFRAG
    REM %TIME%
    "C:\Program Files\7-Zip\7z.exe" a -ssw -mx=9 -ms=on -scsWIN D:\BACKUP\ZiK_%DATE%.7z "D:\ZiK\"
    REM %TIME%
    xcopy /y D:\BACKUP\ZiK_%DATE%.7z \\192.168.30.2\IN$\
    REM %TIME%
    "C:\Program Files\7-Zip\7z.exe" a -ssw -mx=9 -ms=on -scsWIN D:\BACKUP\Docs_%DATE%.7z "C:\Users\Пользователь\Documents\"
    REM %TIME%
    "C:\Program Files\7-Zip\7z.exe" a -ssw -mx=9 -ms=on -scsWIN D:\BACKUP\Docs_%DATE%.7z "C:\Users\Пользователь\Desktop\"
    REM %TIME%
    xcopy /y D:\BACKUP\Docs_%DATE%.7z \\192.168.30.2\IN$\
    REM %TIME%
    :DEFRAG
    REM %TIME%
    "C:\Program Files\Defraggler\df64.exe" c:
    REM %TIME%
    "C:\Program Files\Defraggler\df64.exe" d:
    REM END - %DATE% - %TIME%
    Этот кмдшник логируется, после каждого шага стоит метка времени, что бы по логам можно было разобраться что, когда, во сколько. Скрипт включается от имени пользователь Backup, т.е. в фоне для человека, при включении ПК. Первый шаг - проверка времени, если человек перезагрузил ПК, то бекап сделаный утром перезапишется тем же самым бекапом - лишняя трата ресурсов и времени. После архивирования 7z идёт копирование на сервер для сортирования и складирования. Последние шаги - быстрый дефраг дисков. Это отдельный разговор о пользе и необходимости ежедневного дефрага, но я, по своему опыту, решил всем своим делать ежедневно.
    Ну а на сервере после сортировки бекапов и складирования, через robocopy выделяю старые архивы, перемещаю их в папку для удаления и удаляю всю папку.
    Код:
    robocopy E:\UsersDocsBackup\Users\1\ E:\UsersDocsBackup\NULL\ /minage:30 /mov Docs_*.7z
    REM %TIME%
    rmdir /s /q E:\UsersDocsBackup\NULL\
    REM END - %DATE% - %TIME%
    
    Всё вроде бы просто - в робокопе ключ /minage:30 указывает какие по старости архивы перемещать, Docs_*.7z это имя архивов, я обычно в имени архивов указываю переменную даты (%DATE%), и подстановочный знак * в имени говорит что проверять все архивы начинающиеся с Docs_ и далее любая последовательность символов (в моём случае это разные даты архивов).
    У него мало возможностей. Ни одна программа бекапов по функциями не сравнится с количеством и возможностями консольных утилит майкрософта. Те же утилиты tasklist/taskkill, chkdsk, net, netsh, icacls и др. др. др. Их море и они с очень большими возможностями.
     
    Последнее редактирование: 3 сен 2015
    Denixxx нравится это.
  7. d_man

    d_man Писатель

    Регистр.:
    21 апр 2014
    Сообщения:
    6
    Симпатии:
    2
    Так топик-стартер четко же написал что необходимо архивирование.
    По поводу платности rar - согласен. Но ведь и на этом форуме есть нуленные платные модули, чей в России живем. Меня такой вариант устраивает, так как работает все в пределах одной машины, проблем с совместимостью поэтому нет.
     
  8. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Не заметили, что человек которому отвечаете и топикстартер — одно лицо?
    Во-первых, откуда Вы взяли, что все живут в России? Я, например, нет.
    Во-вторых, если есть альтернатива, она бесплатна и стоит везде (например zip) — именно это желательно и использовать вместо платной и которая есть не везде. Меня потому и заинтересовал Ваш вариант — VBScript есть везде начиная с Виндоус 98. И с ним кажется можно сделать и zip архив. Но вот как это работает — вопрос. Вы не пробовали в именах папок прописывать русские буквы? Возможны траблы.
    В-третьих, работоспособность скрипта, гарантированная на одной машине? не стоило заморачиваться.
    У меня на работе 50 компьютеров и 3 сервера. Пока скрипт крутится на 2-х машинах — архивируется клиент-банк и переписка секретаря.
    На основном сервере бекап делается другим скриптом, с архивированием — писал не я, но пока этот вариант устраивает.
    Там есть недостаток — не стираются старые архивы, что недавно даже привело к необходимости чистки.
     
  9. Robbert

    Robbert Создатель

    Регистр.:
    10 фев 2015
    Сообщения:
    39
    Симпатии:
    6
    Убицца.
    "Ваше сообщение в теме Периодическое сохранение определённой папки в архив и удаление неактуальных архивов под Windows было удалено. Причина: не в тему, похоже на рекламу платного продукта"

    Да KLS Backup платное ПО. Ну и что.Я не рекламирую ПО. Я его купил и пользуюсь. И именно после теста триала я убедил своего работодателя купить этот софт. У меня резервное копирование занимает почти сутки. Бэкапятся холодные копии всего. От файловой помойки юзеров до баз данных оракла (всего ~14Тб). В системе 300 локальных пользователей и плюс 56 физических серверов. Под каждый продукт(сервер) свой бэкап. Для всех продуктов общий бэкап-сервер который управляет удалёнными хранилищами. Готовые холодные РК(flat, zip, raw) в "СуперСклад"(хранилища на базе NetApp) перемещает KLS.Да, да вот эта софтина обслуживает решения за туеву хучу киломегабаксов - потомучто дёшево и удобно. Думаю что 80$ за софтину которая с лихвой покроет все потребности в резервном копировании участников в этой ветке - не дорого. Особенно для перцев с их работодателями которые обеспечивают работоспособность всяких клиент-банков.
     
    Последнее редактирование: 5 сен 2015
  10. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Вы его не купили, купил работодатель. А если бы не купил, пришлось бы искать?

    Эта тема про сохранение архивов штатными средствами Windows.
    Не другими прогами, ни под Линукс или Макось, а именно про это.
    Если пишете не про это, засоряете тему. Так понятнее?

    Я удалил не только Ваш пост, ещё несколько. Я хочу найти (или написать) решение, которое будет служить мне долгие годы у любого работодателя.
    А посты не в тему засоряют её и мешают читать — нечего сказать, не пишите.
    У Вас и всех остальных работодатели разные. Решение за 80$ для 3х машин — для моего перебор, и я с ним согласен.
    Хотите поделиться, какой замечательный софт — создайте себе тему и пишите туда.