Использование 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
+21
17 октября 2009, 04:50
110
antip0d 5,5

комментарии (64)

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

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

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

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

А вообще говоря, выбор формата (архиватора и т. п.) зависит прежде всего от планируемых сценариев восстановления, недопустимо, пожалуй, только одно — не иметь их (причем отлаженных на пустой машине), то есть делать бакапы не думая (и не проверяя на практике), как из них восстанавливаться будешь.
0
slider #
2>log_file — конкретно с 7зипом не работает. Видимо он пишет ошибки в обычный поток. (во всяком случае моя косольная версия 7-Zip (A) 4.65)
+1
alexroz #
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
JStingo #
Могу добавить, что если перед вами стоит задача упаковать большой объем, и главное для вас время упаковки, а не качество (размер конечного архива), то для более чем двухядерных систем лучше использовать 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
Reey #
Помню что *.7z не делает инкрементный бекап без параметра --ms=off в конце строки, вот. Помню лоханулся когда заархивировал 40гб проектов а потом обновить не смог. Пришлось заново все сжимать.
0
Busla #
7zip в принципе не делает инкрементных архивов, а двойной минус означает конец обработки параметров
+1
Sap_ru #
Смешно…
RTFM про команду «u» и опцию "-u" с именем нового архива не совпадающим со старым.
0
Busla #
так реализуется дифференциальный архив, а не инкрементальный ;-)
0
VolCh #
Я бы еще добавил параметр -y, чтобы задача не «зависала» ожидая ответа с консоли Y(es) or N(o), например, если целевой файл существует

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

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

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

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

ну и да, я из той страны, где простыми предложениями почти не говорят/пишут.
0
rukeba #
использую такой способ на серверке уже два года, 7zip паролит архив и я его отсылаю на почтовый ящик (жмейл).
0
TroLLik #
Кстати, встроенный в винду бекап не так уж и плох
0
antip0d #
мне показалось, что он уж очень неповоротлив. кроме того, не совсем удобно реализовано восстановление данных из бэкапа, особенно если надо вытащить какой-то конкретный файл/папку, а не весь бэкап целиком. но это мое ИМХО
+1
ice9 #
А что со свободным местом всё настолько плохо, что приходится архивировать? Виндовый robocopy сихронизирует ~100Гб с usb диском минуты за 3-5 и лог выдает вполне понятный.
+4
Sap_ru #
Звиняйте за размер но…
Кому лень разбираться — ссылка на архив с готовыми скриптами настроенными на проекты на 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
Sap_ru #
Ясен перец — парсер — лох. Ничерта не отформатировалось и ссылка не видна.
Вот ссылка на архив со скриптами, настроенными на проекты на Delphi. Править нужно файлы ArchiveName.txt и exclude*.lst
Что есть что изложено в моём комментарии выше.
a href=«narod.ru/disk/14222019000/!Backup.zip.html
Кому пригодится — плюсаните, люди добрые, а то ни комментировать ни посты создавать не можу :(
+1
timteka #
Любопытна задача. Но мне кажется, что Акронис все же в другом деле хорош (когда целиком партишн бэкапить надо, с системой или какими-то архи-важными данными). А что касается 7-zip, то его использую косвенно, в замечательном бесплатном продукте Cobian backup (он автоматизирует процесс сжатия резервных копий), который помимо минималистичного, но достаточно удобно GUI обладает и крутым функционалом. Например, без дифференциальных бэкапов мои данные бы занимали уйму места. А так, собираю n-ое количество дифференциальных бэкапов и раз в пару месяцев или больше скидываю их на блю-рэй диски. Если можно через консоль научить 7-zip делать диф. копии — научите ;-)
0
Deepwalker #
Вы ничего не путаете? Именно дифференциальные? Не инкрементальные часом? Потом что дифференциальному пара копий это точно лишнее — надо один полный и один дифференциальный.
0
timteka #
Не совсем так. На один полный можно бесконечное число диффов создавать. Я эмпирически «вычислил» оптимальное для себя число. Задаю в скедьюлере задание создавать полные архивы каждые 10-20 дифференциальных (к каждому соответствующему полному) и всех делов. Почему именно диффы? Мне показалось удобней именно с таким типом бэкапов работать, а не с инкрементными. Хотя упомянутая программка справляется отлично и с ними (Cobian backup)
0
mocksoul #
«скедьюлер» — это сильно =)
инкрементные бекапы удобнее дифференциальных хотя бю тем, что для определения всех данных в бекапе Х надо разглядывать все бекапы до него. И уж тем более не надо вечно хранить первый.
0
slider #
да Cobian backup замечательная программка, сам ей долго пользовался, пока не перешел на nnCron + 7zip. Но всем родственникам досих пор ставлю Cobian.
0
Deepwalker #
А что за сервер? Что архивируется? Делается ли ASR бекап? Как вы планируете быстро развернуть сервер взамен расстрелянного старого?

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

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

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

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

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

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

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

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

Можно теоретически батник написать, который рекурсивно каталоги обходит, но это конечно велосипед на граблях :)
0
non7top #
автору на заметку:
1. лог файл тоже можно сжать, если он будут весить больше нескольких десятков мегабайт. и оптимально естественно никак не фильтровать лог, а сохранять целиком.
2. если использовать более современные алгоритмы сжатия, то можно получить многократный выигрыш в размере по сравнение с zip, ибо это один из наименее эффективных форматов сжатия.
3. использовать готовые системы для бэкапа это все же очень неплохой вариант.
+2
Psixozzz #
Настоящий мужик, молодец! Мужик маны прочитал — всем рассказал!
0
DYm00n #
А можно как нибудь сделать, чтобы при бекапе не отображался процесс архивирования? Т.е. я запустил скрипт, он пыхтит и мне ничего на экран не выходит. Кстати, а почему у вас идет запуск 7za.exe? Где вы такой файл нашли? В инсталяшке же нет такого, мне приходится запускать 7zG.exe
0
antip0d #
На их сайте в разделе Downloads можно скачать 7-Zip Command Line Version
0
dei34 #
зачем же рубанком забивать гвозди?
надо использовать инструменты для тех задач для которых они предназначены. Для бекапов надо использовать rsync и надстройки над ним, например duplicity
0
mihmig #
делаю инкрементные бекапы с помощью 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
mocksoul #
rsync (кстати не в курсе есть ли под винду?)
0
antip0d #
По итогам использования: 182 ГБ данных были упакованы по архивам общей емкостью 66,5 ГБ за 3,5 часа
0
x403 #
Для тех, кому приходится архивировать сотни гигабайт
Пробовал использовать 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 тоже не умеет.
Подчеркиваю, данные настройки оптимальны для достаточно больших объемов. Когда важно, чтобы просто с бэкапом можно было работать быстро и просто работать — извлекать отдельные файлы, лазить по папкам. Имхо — это основной плюс такой «кустарной» архивации.

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