Пользователь
0,0
рейтинг
17 октября 2009 в 04:50

Администрирование → Использование 7zip для бэкапа данных

Для наступления полного и тотального счастья в плане бэкапов информации на рабочем сервере решил отказаться от Acronis True Image в пользу обычной архивации данных с помощью 7-Zip.

Для выполнения поставленной задачи естественно использовал консольную версию архиватора.


После непродолжительного курения манов комманда приняла следующий вид:

7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir

Поподробней об использованных ключах:

-tzip формат архива установлен в zip, без этого ключа умолчальный формат 7z;

-ssw принудительная упаковка файлов, которые в данный момент открыты для записи (мало ли кто-то засиделся на работе и что-то там правит);

-mx7 высокая степень сжатия (7), можно поставить и 5 (нормальное сжатие), тогда процесс пойдет побыстрее;

-r0 (это ноль, а не буква О) исключения, которые будут прописаны дальше обрабатываются только в рабочем каталоге;

-x@exclusions.txt это собственно говоря файл со списком исключений, которые не будем архивировать. Каждая строка файла — новое исключение. Можно использовать маски типа *.ext и т.п. Если исключение не много, то можно обойтись и без файла, в таком случае ключ примет следующий вид: -x!*.ext;

full_path_for_the_archive это соответственно путь и имя нового архива;

working_dir это папка, которая подлежит упаковке.

Для пущего удобства можно использовать в имени архива %date%.

В связи с тем, что архивировать нужно разные папки в разные архивы, объемами 10-15 гигов, то резонно использовать последовательность команд, дабы не создавать кучу правил в планировщике и не думать сколько времени займет весь этот процесс. Соответственно для этих целей использую объединение команд с помощью &&. Если использовать &, то все команды будут выполняться одновременно, что меня никак не устраивает, с && — последовательно при удачном завершении предыдущей команды.

Помимо всего прочего желательно иметь логи, чтоб быть в курсе, а не случилось ли чего. Это можно легко реализовать с помощью инструкции '>>', которая сохраняет вывод в консоль в текстовый файл. Однако проблема в том, что 7zip вываливает в консоль кучу информации, в том числе и об архивации каждого нового файла. Очевидно, что на объемах в несколько тысяч файлов вся эта инфа в логах нужна как мертвому припарок. Соответственно требуется исключить все ненужные строки, оставив те, где есть информация о названии создаваемого архива, результат архивации и информацию об ошибках, коли таковые появятся.

Тут на помощь приходит команда FINDSTR. В моем случае она принимает следующий вид:

findstr /P /I /V «Compressing 7-Zip»

Сначала пара слов об использованных ключах:

/P пропускает строки, содержащие непечатные символы;

/I на всякий случай игнорирую регистр букв;

/V " " непосредственно перечень слов для поиска в строках и последующего исключения этих строк.

В итоге на выходе этой команды имеем 3 строки:

Scanning

Creating archive archive_name

Everything is Ok

А потом закатываю все в текстовый файл, для последующего изучения:

findstr /P /I /V «Compressing 7-Zip» >> log_file

Теперь дело за малым. Нужно зафутболить все три блока в одну последовательность команд:

7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir | findstr /P /I /V «Compressing 7-Zip» >> log_file.%date%.txt
Максим Митютько @antip0d
карма
11,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (65)

  • +5
    .zip бывает больше 2гб размером?
    • 0
      Arma2 Demo — 2.5Gb zip.
      Все работает :)
      Вы не путаете с compressed folders в XP? Этот ограничение оттуда.
    • 0
      тут вы ошибаетесь, архивация свыше 2 гигов замечательно работает. намедни заткнул в zip HDrip фильмака на 4 гига — никаких проблем
      • 0
        встроенный в венду архиватор потом распаковать это не может
      • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Спасибо, что собрали всё в одном месте.
  • +3
    инкрементные архивы?
  • +2
    Я так понимаю дело происходит в Винде… там нету стандартного потока ошибок? Не пойму к чему использовать такую конструкцию с findstr. Можно (в линуксе точно) написать просто 2>log_file.%date%.txt. 2 это стандартный поток ошибок.
    И почему именно zip? Он уже устаревший формат. Можно было как раз 7z использовать… ну или что-нибудь ещё надёжнее.
    • 0
      Чтобы не генерировать большие логи. Ибо список заархивированных файлов человеку нужен до одного места.
      • 0
        А человеку нужны какие-нибудь логи, а не просто пустые файлы.
    • +1
      stderr есть, конструкция 2>log_file.%date%.txt вполне работоспособна, правда перед использованием с конкретными программами нужно убедиться, что они пишут ошибки именно в stderr, а не в stdout (со времен MS-DOS еще повелось, что многие stderr не используют)

      zip, пожалуй, самый универсальный, та же винда держит его без всяких дополнительных утилит, в отличии от 7z или, скажем, tar.gz, а поскольку дело имеем с бакапами, то лучше предусмотреть самый худший вариант — голая система или вообще лайв-сиди какой-нить, имхо

      • +2
        Универсальность это хорошо, но zip имеет много проблем более или менее мелких. Для меня важная проблема — битая кодировка в именах файлов при открытии в линуксе zip'ов сделанных в win. И наоборот.

        Лучше использовать тот же 7z и хранить инсталлер рядом (а не «в»! :) ) с бэкапом.
        • 0
          Общего идеала вообще нет, для кого-то битая кодировка при работе под разными семействами ОС проблема, для кого-то нет (хотя я лично не сталкивался при «одновременной» работе с архивами в Ubuntu 7+ и Win7), а для кого-то проблема ставить архиватор на виндоус-лайв-сиди :).

          А вообще говоря, выбор формата (архиватора и т. п.) зависит прежде всего от планируемых сценариев восстановления, недопустимо, пожалуй, только одно — не иметь их (причем отлаженных на пустой машине), то есть делать бакапы не думая (и не проверяя на практике), как из них восстанавливаться будешь.
    • 0
      2>log_file — конкретно с 7зипом не работает. Видимо он пишет ошибки в обычный поток. (во всяком случае моя косольная версия 7-Zip (A) 4.65)
    • +1
      Console version now prints all messages to stdout by default,
      and if -so switch is specified, 7-Zip prints messages to stderr.
      www.7-zip.org/history.txt
  • +3
    Могу добавить, что если перед вами стоит задача упаковать большой объем, и главное для вас время упаковки, а не качество (размер конечного архива), то для более чем двухядерных систем лучше использовать bzip2 формат. К примеру:

    7z a -t7z archive_file_name input_file_name -m0=bzip2 -mmt=8

    В данном случае сжатие будет вестись в 8-и параллельных потоках (-mmt=8). Родной для 7z формат сжатия LZMA поддерживает к сожалению только 2-а потока. Остальные форматы сжатия максимум один поток.

    Я таким способом на сервере с 8-ью ядрами сжимаю 9гб до 2,3гб за 23 минуты.
  • 0
    Помню что *.7z не делает инкрементный бекап без параметра --ms=off в конце строки, вот. Помню лоханулся когда заархивировал 40гб проектов а потом обновить не смог. Пришлось заново все сжимать.
    • 0
      7zip в принципе не делает инкрементных архивов, а двойной минус означает конец обработки параметров
      • +1
        Смешно…
        RTFM про команду «u» и опцию "-u" с именем нового архива не совпадающим со старым.
        • 0
          так реализуется дифференциальный архив, а не инкрементальный ;-)
  • 0
    Я бы еще добавил параметр -y, чтобы задача не «зависала» ожидая ответа с консоли Y(es) or N(o), например, если целевой файл существует

  • 0
    инкрементные архивы я не использую, т.к. время создания бэкапа не критично. вечером ночью в конторе все равно никого нет. ежедневно создается полный бэкап всех файлов, а потом vbs скрипт удаляет бэкапы старше 7 дней.

    про stderr не знал, нужно будет посмотреть, вываливает ли туда что-то 7zip, а архивация идет в zip, а не какой-то другой формат, именно из-за его универсальности, как правильно подметил VolCh.

    вообще, когда я все это тестировал у себя, то при наличии одноименного архива, 7zip не особо напрягался и сравнивал содержимое архива с содержимом исходной папки, но согласен, что лучше подстраховаться и добавить парметр -y
    • 0
      для того чтобы удалить старые архивы достаточно команды forfiles
      • 0
        я так понимаю, что утилита forfiles не входит в стандартную поставку win xp или 2k3 и ее нужно доставлять из resource kit?
        согласен, что команда удобная, но работать это соответственно будет не везде, в отличии от того же vbs
        • 0
          да, действительно, уже запамятовал, что она поставляется отдельно O:-)
    • 0
      >ежедневно создается полный бэкап всех файлов, а потом vbs скрипт удаляет бэкапы старше 7 дней.

      vbs — лишнее. На Винде есть планировщик заданий и команда at для выполнения периодических действий и/или запланированных заданий.
      • 0
        как я уже писал, пока крутится Acronis, а там соответственно можно назначить сценарий для запуска до или после задания, поэтому используется vbs.
  • 0
    а как обстоят дела со скоростью многогигабайтного архивирования?
    • –1
      а вот это выяснится в понедельник, когда я это раскатаю на серваке :)
      • +1
        Т.е. метод, описанный в статье, вы ни разу не использовали? Ну, счастливого вам понедельника, учитывая первый комментарий к этой статье.
  • +2
    такое ощущение, что тут не системные администраторы, которые не используют принцип «чувак, делай проще», а вместо подходящих инструментов пытаются подручными пинцетом и кувалдой сварить борщ, и ещё и огрызаются, когда им на это намекают.
    • –1
      сложносочинённая сложноподчинённая многозапятная фраза, чувак!
      надо быть прощще — использовать 7zip — иногда один из путей
      • +1
        это не совсем связано с 7ципом, а более к findstr и vbs, что упоминались выше.

        ну и да, я из той страны, где простыми предложениями почти не говорят/пишут.
  • 0
    использую такой способ на серверке уже два года, 7zip паролит архив и я его отсылаю на почтовый ящик (жмейл).
  • 0
    Кстати, встроенный в винду бекап не так уж и плох
    • 0
      мне показалось, что он уж очень неповоротлив. кроме того, не совсем удобно реализовано восстановление данных из бэкапа, особенно если надо вытащить какой-то конкретный файл/папку, а не весь бэкап целиком. но это мое ИМХО
  • +1
    А что со свободным местом всё настолько плохо, что приходится архивировать? Виндовый robocopy сихронизирует ~100Гб с usb диском минуты за 3-5 и лог выдает вполне понятный.
  • +4
    Звиняйте за размер но…
    Кому лень разбираться — ссылка на архив с готовыми скриптами настроенными на проекты на DELPHI. Имею сказать, что с RAR'ом это всё можно сделат неизмеримо круче. Но RAR малость платный.

    Структура каталогов:
    Делаем в корне проекта папочку !Bakup
    В ней создаём папки:
    7zip — кладём туда 7zip.
    Archives — тут будут хранится архивы и инкрементальные архивы.
    Current — тут хранятся текущие образы архива проекта (можно просто переписать на флэшку).

    Создаём в !Backup файлы:
    exclude.lst и excludeback.lst — с масками файлов и директорий исключаемых из инкрементальных и обычных архивов. Маски из этих файлов объединяются.
    excludecur.lst — файлы, исключаемые из текущих архивов.
    excludefull.lst — файлы, исключаемые из полных архивов.
    archivename.txt — префикс имени архива.

    Дальше идут скрипты:
    Backup.bat — создаёт самодостаточный архив в !Backup\Archives с текущей датой в имени. Файлы сортируются по папкам по месяцам (все архивы одного месяца хранятся в одной папаке).
    Текст скрипта:

    rem @echo OFF
    set BDir=!Backup
    md Current >nul
    md Archives >nul
    cd…
    del %BDir%\Current\_excludebak.tmp >nul

    copy /Y /A %BDir%\excludeback.lst + %BDir%\exclude.lst %BDir%\Current\_excludebak.tmp >nul

    @for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
    SET Name=%%a
    goto ok
    )
    :ok

    set Dtmp=%Date%%Time%
    set DD=%Dtmp:~0,2%
    set DM=%Dtmp:~3,2%
    set DY=%Dtmp:~6,4%
    set TH=%Dtmp:~10,2%
    set TM=%Dtmp:~13,2%
    set TS=%Dtmp:~16,1%

    SET AName1=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%.zip
    SET AName2=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%_%TH%%TM%%TS%.zip
    if exist "%AName1%" goto FileExist

    :FileAbsent
    %BDir%\7zip\7za.exe a "%AName1%" -tzip -mx9 -mmt=on -mtc=on -ssw -scsWIN -ir!* -xr!"%BDir%\Current\*" -xr!"%BDir%\Full\*" -xr!"%BDir%\Archives\*" -xr@%BDir%\Current\_excludebak.tmp
    goto DoExit

    :FileExist
    %BDir%\7zip\7za.exe a "%AName2%" -tzip -mx9 -mmt=on -mtc=on -ssw -scsWIN -ir!* -xr!"%BDir%\Current\*" -xr!"%BDir%\Full\*" -xr!"%BDir%\Archives\*" -xr@%BDir%\Current\_excludebak.tmp
    goto DoExit

    :DoExit
    del %BDir%\Current\_excludebak.tmp >nul
    cd %BDir%

    Скрипт Current.bat — создаёт самораспаковывающийся самодостаточный архив текущего образа проекта в !Backup\Current в имя файла включается текущая дата. Предыдущие образы удаляются. Не архивирует историю архивов (папки !Backup\Current и !Backup\Archives). Предназначен для хранения и переноски текущего состояние проекта (очень удобно чтобы взять работу домой, например).
    Текст скрипта:

    rem @echo OFF
    set BDir=!Backup
    md Current >nul
    cd…

    @for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
    SET Name=%%a
    goto ok
    )
    :ok

    set Dtmp=%Date%%Time%
    set DD=%Dtmp:~0,2%
    set DM=%Dtmp:~3,2%
    set DY=%Dtmp:~6,4%
    set TH=%Dtmp:~10,2%
    set TM=%Dtmp:~13,2%
    set TS=%Dtmp:~16,1%

    set AName1=%BDir%\Current\Cur_%Name%_%DY%-%DM%-%DD%.exe

    :CreateNew
    del Current\Cur*.exe
    %BDir%\7zip\7za.exe a "%AName1%" -t7z -mx9 -sfx7zcon.sfx -ms30f10m -mmt=on -mtc=on -ms=off -ssw -scsWIN -ir!* -x!"%BDir%\Current\*" -x!"%BDir%\Full\*" -x!"%BDir%\Archives\*" -xr@%BDir%\excludecur.lst
    goto DoExit

    :DoExit
    cd %BDir%

    Скрипт Delta.bat — создаёт древовидную структуру самораспаковывающихся инкрементальных архивов в !Backup\Archives. Архивы создаются помесячно. Т.е. для каждого месяца создаётся базовый архив и инкрементальные архивы. Для восстановления нужно распаковать сначала базовый архив за нужный месяц, а затем инкрементальный (_diff) за нужную дату месяца. Архивы также сортируются по папкам по месяцам.
    Текст скрипта:

    @echo OFF
    set BDir=!Backup
    md Current >nul
    cd…
    del %BDir%\Current\_excludebak.tmp >nul

    copy /Y /A %BDir%\excludeback.lst + %BDir%\exclude.lst %BDir%\Current\_excludebak.tmp >nul

    @for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
    SET Name=%%a
    goto ok
    )
    :ok

    set Dtmp=%Date%%Time%
    set DD=%Dtmp:~0,2%
    set DM=%Dtmp:~3,2%
    set DY=%Dtmp:~6,4%
    set TH=%Dtmp:~10,2%
    set TM=%Dtmp:~13,2%
    set TS=%Dtmp:~16,1%

    SET NameM=%Name%_%DY%-%DM%
    SET NameD=%Name%_%DY%-%DM%-%DD%_diff

    SET ANameM=%BDir%\Archives\%NameM%\d_%NameM%.exe
    SET AName1=%BDir%\Archives\%NameM%\d_%NameD%.exe
    SET AName2=%BDir%\Archives\%NameM%\d_%NameD%_%TH%%TM%%TS%.exe

    if exist "%ANameM%" goto MonthExist

    :MonthAbsent
    %BDir%\7zip\7za.exe a "%ANameM%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp

    :MonthExist
    if exist "%AName1%" goto FileExist

    :FileAbsent
    %BDir%\7zip\7za.exe u "%ANameM%" -u- -up0q3r2x2y2z0w2!"%AName1%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp
    goto DoExit

    :FileExist
    %BDir%\7zip\7za.exe u "%ANameM%" -u- -up0q3r2x2y2z0w2!"%AName2%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp
    goto DoExit

    :DoExit
    del %BDir%\Current\_excludebak.tmp >nul
    cd %BDir%

    Скрипт Full.bat — создаёт полую копию проекта вместе со всей историей архивов в папке !Backup\Current. Предыдущая копия удаляется. Используется для переноса проекта вместе со всей историей и полного резервного копирования.
    Текст скрипта:

    @echo OFF
    set BDir=!Backup
    md Current >nul
    cd…

    @for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
    SET Name=%%a
    goto ok
    )
    :ok

    set Dtmp=%Date%%Time%
    set DD=%Dtmp:~0,2%
    set DM=%Dtmp:~3,2%
    set DY=%Dtmp:~6,4%
    set TH=%Dtmp:~10,2%
    set TM=%Dtmp:~13,2%
    set TS=%Dtmp:~16,1%

    SET AName1=%BDir%\Current\Full_%Name%_%DY%-%DM%-%DD%.exe

    if exist «AName1» goto FileExist
    del Current\Full*.exe

    :FileExist
    %BDir%\7zip\7za.exe a "%AName1%" -up0q0r2x2y2z1w2 -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms=off -ssw -scsWIN -ir!* -x!"%BDir%\Current\*" -x!"%BDir%\Full\*" -xr@%BDir%\excludefull.lst

    cd %BDir%

    И снова ссылка на архив со всем этим добром.
    • +3
      Ясен перец — парсер — лох. Ничерта не отформатировалось и ссылка не видна.
      Вот ссылка на архив со скриптами, настроенными на проекты на Delphi. Править нужно файлы ArchiveName.txt и exclude*.lst
      Что есть что изложено в моём комментарии выше.
      a href=«narod.ru/disk/14222019000/!Backup.zip.html
      Кому пригодится — плюсаните, люди добрые, а то ни комментировать ни посты создавать не можу :(
  • +1
    Любопытна задача. Но мне кажется, что Акронис все же в другом деле хорош (когда целиком партишн бэкапить надо, с системой или какими-то архи-важными данными). А что касается 7-zip, то его использую косвенно, в замечательном бесплатном продукте Cobian backup (он автоматизирует процесс сжатия резервных копий), который помимо минималистичного, но достаточно удобно GUI обладает и крутым функционалом. Например, без дифференциальных бэкапов мои данные бы занимали уйму места. А так, собираю n-ое количество дифференциальных бэкапов и раз в пару месяцев или больше скидываю их на блю-рэй диски. Если можно через консоль научить 7-zip делать диф. копии — научите ;-)
    • 0
      Вы ничего не путаете? Именно дифференциальные? Не инкрементальные часом? Потом что дифференциальному пара копий это точно лишнее — надо один полный и один дифференциальный.
      • 0
        Не совсем так. На один полный можно бесконечное число диффов создавать. Я эмпирически «вычислил» оптимальное для себя число. Задаю в скедьюлере задание создавать полные архивы каждые 10-20 дифференциальных (к каждому соответствующему полному) и всех делов. Почему именно диффы? Мне показалось удобней именно с таким типом бэкапов работать, а не с инкрементными. Хотя упомянутая программка справляется отлично и с ними (Cobian backup)
        • 0
          «скедьюлер» — это сильно =)
          инкрементные бекапы удобнее дифференциальных хотя бю тем, что для определения всех данных в бекапе Х надо разглядывать все бекапы до него. И уж тем более не надо вечно хранить первый.
    • 0
      да Cobian backup замечательная программка, сам ей долго пользовался, пока не перешел на nnCron + 7zip. Но всем родственникам досих пор ставлю Cobian.
  • 0
    А что за сервер? Что архивируется? Делается ли ASR бекап? Как вы планируете быстро развернуть сервер взамен расстрелянного старого?

    У меня есть некоторый негатив к статье, и вот почему — мне попадались пара фирм, где бекап был сделан подобным весьма простым способом. Начавшись с простого zip, мысль у администратора плавно перетекла к складированию копий в централизованном виде. Потом автор задействовал кучу скриптов, которые архивируют, копируют, подтирают старые копии.

    Так вот — пришел я и поставил Bacula, потому что мне отнюдь не кажется вот это творчество простым, мне кажется, что это стабильный источник проблем — каждое простое действие, которое встроено в нормальную систему здесь надо реализовать, встроить в существующий велосипедный парк, поиметь проблем с ошибками.

    Это я к чему — господа админы, делайте правильно, чтобы за вами не расхлебывать потом последствия ваших «простых» схем, в которых вы что то там не дореализовали и делали руками, да и чтобы добавить новый сервер надо поменять вот тут, там и вот тут подопнуть.
    • 0
      контора у нас небольшая, поэтому на данный момент имеется один сервер типа «все в одном». весь вышеописанный сценарий предназначается исключительно для бэкапа документов, графики и pdf, коих очень много. поэтому, на мой взгляд, вариант с архивами подходит здесь на все 100%.

      ввиду того, что пока на серве используется Acronis, бэкапы системного раздела создаются именно им
      • 0
        Понятно, тогда схема имеет право на жизнь, просто важно, очень важно, понимать уровень решения. Я не про вас лично, я всегда рассматриваю свои комментарии как уточнения, о которых стоит задуматься.
    • 0
      Каков план быстрого восстановления при использовании Bacula на Win-серверах?

      В настоящий момент для Win2003 серверов мы практикуем образы Acronisом и System state backup.
      Но акронис уж больно дорогой. Размышляем: поискать ПО для создания образов платное, но подешевле(как пример www.paragon.ru/corporate/db-server/ ) или смотреть Free/Open source.

      P.S. используем Amanda для Linux серверов.
      • 0
        Я для windows серверов использую ntbackup — ASR ежемесячно, System state еженедельно. Bacula для файлов.

        С Bacula вот только проблемы с резервными копиями БД и Exchange (вот честно — в большинстве случаев от него только проблемы в небольших фирмах).
    • 0
      кстати да, очень интересуют варианты быстрого и грамотного восстановления системы, желательно freeware, потому как acronis временами как-то нездорово обезьянит
  • 0
    Может быть кто-нибудь поможет Жану Вальжану?
    Перебрал несколько бэкап-программ (Cobian и проч.), не могу найти нужную.
    Хотелось бы, чтобы:
    1) архиватор был ZIP, ARJ или 7zip.
    2) Чтобы каждый файл запаковывался отдельно и структура каталогов сохранялась.
    3) Чтобы программа была бесплатной.

    Проблема именно с запаковывание файлов по-отдельности. Кстати, если 7-zip поддерживает такое «отдельное» архивирование, то какой должна быть строка.
    • 0
      я бы предложил такой вариант, но виндузятники явно не одобрят, хотя нужно всего-то установить cygwin
      find. -type f|xargs gzip -9
    • 0
      Кстати, если 7-zip поддерживает такое «отдельное» архивирование, то какой должна быть строка.
      Если не ошибаюсь, это опция «Размер блока: По размеру файла» из графической оболочки. Думаю, опцию командной строки будет не сложно.
    • 0
      А что значит «каждый файл по отдельности»? Или я не совсем правильно понимаю ваш запрос? А если сохранять структуру каталогов и потом запаковывать все это в один архив? Чем такая схема не нравится? :)
      Cobian как раз замечательно справляется с архивацией (7-zip, zip). Он бесплатен. Надежен (уже много лет его юзаю как на серверах, так и на рабочих станциях).
      PS. А если в каталоге тысячи файлов? Это сколько ж надо cpu-времени, чтоб каждый файл из такого каталога запаковывать по отдельности? :-))
      • 0
        задачи разные бывают. Может у него сотня фаилов по 100Гб каждый?

        Можно теоретически батник написать, который рекурсивно каталоги обходит, но это конечно велосипед на граблях :)
  • 0
    автору на заметку:
    1. лог файл тоже можно сжать, если он будут весить больше нескольких десятков мегабайт. и оптимально естественно никак не фильтровать лог, а сохранять целиком.
    2. если использовать более современные алгоритмы сжатия, то можно получить многократный выигрыш в размере по сравнение с zip, ибо это один из наименее эффективных форматов сжатия.
    3. использовать готовые системы для бэкапа это все же очень неплохой вариант.
  • +2
    Настоящий мужик, молодец! Мужик маны прочитал — всем рассказал!
  • 0
    А можно как нибудь сделать, чтобы при бекапе не отображался процесс архивирования? Т.е. я запустил скрипт, он пыхтит и мне ничего на экран не выходит. Кстати, а почему у вас идет запуск 7za.exe? Где вы такой файл нашли? В инсталяшке же нет такого, мне приходится запускать 7zG.exe
    • 0
      На их сайте в разделе Downloads можно скачать 7-Zip Command Line Version
  • 0
    зачем же рубанком забивать гвозди?
    надо использовать инструменты для тех задач для которых они предназначены. Для бекапов надо использовать rsync и надстройки над ним, например duplicity
  • 0
    делаю инкрементные бекапы с помощью winrar:
    rar.exe a -agYYYYMMDDHHMM -ac -ao \\server\share\ D:\documents
    где: agYYYYMMDDHHMM — прибавлять к имени архива текущие дату/время
    -AC — снять атрибут «архивный»
    -AO — добавить файлы с установленным атрибутом «архивный»
    именно так, а не архивация «за последние» n-дней (т.к. скрипт архивации по сотне причин может и не запуститься) — в архив попадают файлы, измененные ТОЛЬКО с момента последней архивации.

    очень удобно анализировать: а в какой же именно день Леночка накосячила в файле общий.xls (можно откатить на любой день, причем БЕЗ установки всяких там акронисов (для любителей предполагать самые экстремальные ситуации, когда ВСЕ компы в офисе «НЕ ГРУЗЯЦЦО» — winrar идет даже на загрузочном WinXP PE)

    Но winrar хоть и относительно недорогой, но в кучу мест покупать надоест, поэтому перехожу на 7zip
    1. Как бы это реализовать на 7zip — у него таких ключей нет, да и «общая папка» может в один прекрасный день оказаться на samba-сервере под убунтой…
    • 0
      rsync (кстати не в курсе есть ли под винду?)
  • 0
    По итогам использования: 182 ГБ данных были упакованы по архивам общей емкостью 66,5 ГБ за 3,5 часа
  • 0
    Для тех, кому приходится архивировать сотни гигабайт
    Пробовал использовать WinRar для бэкапа общего сетевого диска (RAID10) — порядка 400 ГБ. Получался архив около 300 ГБ, при попытке открыть его WinRar сдулся с ошибкой «недостаточно системных ресурсов». Причем, на разных серваках. Видимо, неоптимальная работа с памятью. Степень сжатия была и 1, и 0.
    Попробовал 7zip — работает без проблем. Для файловой помойки в Windows этот архиватор однозначно рулит. Исходный архив открывался очень быстро и без проблем. Вот пример простого батника, который, на мой взгляд, оптимально решает данную задачу:
    "C:\Program Files\7-Zip\7z.exe" u -ssw -mx0 -mmt2 -ms=off -r e:\m_backup.7z @"c:\m_listbackup.txt" >> c:\m_backup_%date%.log
    Тип архива 7zip определяет по расширению результирующего файла бэкапа.
    u — поскольку архивный бит 7zip не понимает, пришлось делать просто обновление основного архива.
    -ssw — как и написано выше, открываем открытые другими программами файлы
    -mx0 — поскольку на диске куча pdf, jpg и т.д., то сжатие дает только 4% экономии. нерациональное соотношение место_на_диске/процессорное_время.
    -mmt2 — использовать два потока. думаю, пригодится при обновлении архива.
    -ms=off — по дефолту создаются solid-архивы. отключаем ибо они работают медленнее. возможно, для mx0 — некритично, но для mx1 и т.д. — оптимальнее.
    -r — рекурсивно обрабатывать поддиректории.
    e:\m_backup.7z — результирующий файл архива
    @«c:\m_listbackup.txt» — файл в UTF8 с папками, которые следует архивить.
    >> c:\m_backup_%date%.log — выводим результаты в лог с датой.
    К сожалению, сохранять права доступа к файлам 7zip тоже не умеет.
    Подчеркиваю, данные настройки оптимальны для достаточно больших объемов. Когда важно, чтобы просто с бэкапом можно было работать быстро и просто работать — извлекать отдельные файлы, лазить по папкам. Имхо — это основной плюс такой «кустарной» архивации.
  • 0
    проблема супер архивов это их размер, никаких ресурсов на них не хватит, потому или архив надо разбивать на части или использовать что то вроде CopyMik — который жмёт и сохраняет каждый файл отдельно (кстати, при этом, может ещё и шифровать).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.