Использование 7-Zip для бэкапа
14-11-2020Reading time ~ 3 min.Софт 7223
Раньше я делал бэкапы с помощью RoboCopy. С ним всё замечательно кроме одного — размер бэкапа получается достаточно большим. Это особо заметно на текстовых файлах, когда даже простое zip-сжатие позволяет уменьшить занимаемое место в несколько раз.
Другая проблема — в бэкапе может оказаться очень много файлов, скажем несколько тысяч. В итоге, когда такой бэкап нужно куда-то ещё скопировать (даже в «облако») передача каждого файла занимает много времени. Тогда я и задумался: может применить какой-то архиватор, чтобы он сжимал все файлы в один. Его и передать можно быстро и хранить проще.
Выбор пал на 7-Zip. Это бесплатно, хорошее сжатие, но главное, что у него есть все необходимые опции.
Самое важно, что 7-Zip позволяет обновлять файлы в архиве. То есть архиватор сравнивает новые файлы с тем, что есть в архиве и заменяет их на новые. Это существенно сокращает время.
Работа по созданию бэкапа организуется через параметры командной строки. После установки 7-Zip, в нём будет доступен файл справки 7-zip.chm, где можно посмотреть варианты использования. К сожалению русского и украинского языков нет на официальном сайте, а все сторонние содержат лишь неполные описания.
Поэтому я приведу сразу готовые примеры, чтобы было понятно как их использовать.
Типовой вариант (можно разместить код в bat-файле):
"c:\Program Files\7-zip\7z.exe" u -ssw -mx1 -uq0 -r "t:\backups\doc.7z" "D:\doc\*"
Сам 7-Zip запускается с полным именем. Все пути указываются в кавычках (так принято в Windows). Дальше идут ключи. После указывается файл архива и в конце — каталог-источник.
В данном случае будет использоваться каталог D:\doc\
со всем файлами, а результат помещён в t:\backups\doc.7z
.
Здесь важный момент. Имя исходного каталога лучше сделать английским, то есть без русских символов. Проблема здесь в кодировке Windows и MSDos, поэтому, чтобы не было сюрпризов, лучше каталог сделать английским. А вот подкаталоги могут быть уже любыми.
Рассмотрим ключи.
- u — указывает на режим работы — обновление в архиве. Если его нет, то он будет создан.
- -uq0 — это режим обновления. Когда файл есть в архиве, но нет на диске, то файл будет проигнорирован. Есть ещё другие режимы, но для бэкапа этот в самый раз.
- -ssw — работать с файлами, даже если они используются. Это позволяет делать бэкап, когда вы работаете с файлом — проблем не будет.
- -mx1 — степень сжатия файла. 0 — без сжатия, 9 - максимально. Чем меньше сжатие, тем быстрее работает архиватор. Если размер архива небольшой, то сжатие можно увеличить.
- -r — рекурсивное добавление каталогов. То есть добавлять все подкаталоги исходного.
Если вы выкладываете архив в Сеть, то его лучше запаролить.
"c:\Program Files\7-zip\7z.exe" u -ssw -mx1 -uq0 -r -pPASSWORD -mhe=on "t:\backups\secret.7z" "D:\secret\*"
Для пароля указывается ключ -p после которого сразу же идёт пароль (в этом примере «PASSWORD»). При открытии архива потребуется его ввести. Лучше, конечно указывать его английскими символами.
Ключ -mhe=on служит для шифрования «заголовков» самого архива. Это не позволит увидеть список его файлов без пароля.
Часто встречается задача, когда нужно сделать архив, но оставить старый. В этом случае лучше всего указать текущую дату в имени архива.
"c:\Program Files\7-zip\7z.exe" u -ssw -mx1 -uq0 -r "t:\backups\%DATE%-doc.7z" "D:\doc\*"
Здесь в имени файла указывается %DATE%, которая автоматом заменится на текущую дату: 13.11.2020-doc.7z
. Строго говоря это уже не относится к 7z, а является стандартной возможностью командной строки Windows.
Дальше. Если нужно сделать бэкап, но исключить из него какой-то каталог. Например так я архивирую все локальные домены за исключением localhost (он отдельно архивируется).
"c:\Program Files\7-zip\7z.exe" u -ssw -mx1 -uq0 -r -xr!localhost "T:\backups\domains-no-localhost.7z" "D:\domains\*"
За это отвечает ключ -xr (исключение с «рекурсивностью»).
Ну и пара советов как лучше организовать хранилище.
- По возможности отделяйте свои файлы от программ. Потому что программы всегда можно заново установить, а данные ценны сами по себе.
- Если файлы архивов получаются достаточно большие, то лучше разделить исходный каталог на несколько и архивировать их по отдельности.
- В одном bat-файле можно размещать несколько 7z-команд, то есть один клик и будет создано несколько архивов.