Инкрементное резервное копирование с 7zip


17

Я гуглил и искал, но не могу найти команду, которую утилита командной строки 7zip использует для создания инкрементных резервных копий. Так может кто-нибудь, пожалуйста, поделитесь командой?

Благодарность

Кстати, я нашел эту ссылку: http://wmug.co.uk/wmug/b/sean/archive/2009/03/20/powershell-amp-7zip-incremental-backup-solution.aspx . Но, похоже, это для дифференциальных резервных копий, даже несмотря на то, что они написаны инкрементно.

Ответы:


11

Это должно быть просто, используйте это для создания и постепенного обновления архива:

7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}

Эта страница предлагает ссылку для параметров обновления.

Они переводятся следующим образом:

  • p0 - Если «Файл существует в архиве, но не соответствует символу подстановки», удалите файл из архива.
  • q3- Если «Файл существует в архиве, но не существует на диске», удалите файл из архива и удалите его из файловой системы после извлечения .
  • r2 - Если «Файл не существует в архиве, но существует на диске», упакуйте файл в архив.
  • x2 - Если «Файл в архиве новее, чем файл на диске», то упакуйте старый файл в архив.
  • y2 - Если «Файл в архиве старше, чем файл на диске», поместите новый файл в архив.
  • z1 - Если «Файл в архиве совпадает с файлом на диске», повторно используйте упакованную версию файла.
  • w2 - Если размер файла отличается, упакуйте измененный файл в архив.

Здравствуйте, что означают эти много вариантов?
Жианц

Это карта из состояния файла в действие. Есть семь возможных состояний.
ArtemGr

3
Это не инкрементная резервная копия. Эта команда делает разностное резервное копирование и создает новый архив с изменениями с момента последнего полного резервного копирования. Инкрементное резервное копирование отслеживает изменения с момента предыдущего инкрементного резервного копирования (diff of diff).
сих

Я думаю, что это совершенно неправильно, поскольку он просто обновляет archive.7z, чтобы он был почти таким же, как просто создание нового архива, но немного быстрее, поскольку он будет повторно использоваться. Ответ Хавьера, представленный ниже, кажется дифференцированным.
Tuntable

Когда архив большой, а приращения малы, « немного быстрее » весьма существенно. Не перепаковка всего архива является одной из точек инкрементного резервного копирования. Кроме того, это не дифференциальная резервная копия: мы обновляем основной архив, а не храним разницу в отдельном архиве. Если вам больше нравятся другие решения, не стесняйтесь высказывать их, есть более чем один способ снять шкуру с кошки.
ArtemGr

8

Если бы вы делали инкрементное резервное копирование , вам нужно было бы предоставить 7-zip со списком файлов, измененных (с -i@fileList), и вам нужно было бы как-то разработать этот список. В зеркале archive.org удаленного вопроса Инкрементное резервное копирование в автономном режиме с помощью thumbdrive вы можете найти командную строку Unix, использующую подписи md5 для создания fileList.

Операция обновления 7-zip позволяет создать вторичный архив с различиями (включая удаленные файлы), возникающими со времени основного / первичного архива. Это правильно называется дифференциальной резервной копией (как указано в самом вопросе).

Я нашел отличную статью на эту тему на WPCTips «Дифференциальное резервное копирование с 7-zip» (в архиве) . Они рекомендуют либо использовать программу с графическим интерфейсом (Toucan), либо использовать этот рецепт для командной строки:

7z u {base archive.7z} -u- -"up0q3r2x2y2z0w2!{differential.7z}" {folder to archive}

Это немного отличается от 7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}предложенного ArtemGr:

  • -u- говорит, что основной архив не должен быть изменен
  • "-up0q3r2x2y2z0w2!{differential.7z}"указывает целевой дифференциальный архив и действия, которые необходимо выполнить для каждого файла для каждого условия / состояния: добавить файлы, которые являются новыми или измененными в файловой системе, удалить файлы, которые есть только в 7zip-архиве, игнорировать остальные.
    Обратите внимание, что "!" символ будет перехвачен, bashесли он не указан в кавычках.

На всякий случай, если вам интересно узнать о специфике этого загадочного p0q3r2x2y2z0w2

<state> | State condition
p | File exists in archive, but is not matched with wildcard.   Exists, but is   not matched 
q | File exists in archive, but doesn't exist on disk.
r | File doesn't exist in archive, but exists on disk.
x | File in archive is newer than the file on disk.
y | File in archive is older than the file on disk.
z | File in archive is same as the file on disk
w | Can not be detected what file is newer (times are the same, sizes are different)

<action> | Description 
0 | Ignore file (don't create item in new archive for this file) 
1 | Copy file (copy from old archive to new) 
2 | Compress (compress file from disk to new archive) 
3 | Create Anti-item (item that will delete file or directory during extracting). This feature is supported only in 7z format. 

2
Спасибо за ответ, Хавьер, и добро пожаловать в Super User. Здесь существует политика суммирования ссылок на случай их исчезновения. Не могли бы вы объяснить, как команда выполняет инкрементное резервное копирование? (особенно up0q3r2x2y2z0w2часть!) Спасибо :-)
bertieb

1
@bertieb спасибо за совет. Надеюсь, теперь все понятно.
Хавьер

1
@DanielSokolowski Не уверен, если это отвечает на ваш вопрос. Если вы сделали инкрементное резервное копирование (A + b + c + d), вам придется извлечь из каждого архива в том порядке, в котором вы их сделали. Если вы сделали дифференциальное резервное копирование (A + (B + C + D)). Это 2 архива, которые вы должны извлечь. Было бы неплохо, чтобы последний архив содержал информацию о предыдущих архивах и порядке извлечения, поэтому извлечение можно было выполнить одной командой. Но я не знаю о такой возможности.
Хавьер

1
статьи вы разделяете не открывает @Javier
Alper

1
Спасибо @alper. Archive.org содержит небольшой снимок статьи с советами по потухшим WPC на web.archive.org/web/20160822111118/http://www.wpctips.com:80/… . Я думаю, мне придется изменить ответ.
Хавьер

4

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

# create the difference step into the past
7z u {base archive.7z} {folder to archive} -mx=9 -u- -up1q1r3x1y1z0w1!{decrement.7z}

# update the Archive to the latest files
7z u {base archive.7z} {folder to archive} -mx=9 -up0q0x2

Базовый архив всегда содержит самую последнюю версию, и, шаг за шагом применяя «декременты», вы можете воссоздать более старые версии. С помощью небольшого количества сценариев вы можете применить правильную нумерацию к файлам декремента.


Не могли бы вы пояснить это? Я хотел бы видеть пример создания, скажем, текущей резервной копии, резервной копии 1 день назад, резервной копии 2 дня назад. И затем пример восстановления резервной копии «2 дня назад».
Даниэль Соколовский

0

В пакетном файле с enabledelayedexpansion вам нужно заключить в кавычки "!" с двумя ^^ как это

7z u {existing archive.7z} -u- -up0q3r2x2y2z0w2^^!{new differential.7z} {folder or files to archive}

Мне понадобилось время, чтобы увидеть это.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.