Backup incremental com 7zip

17

Pesquisei e pesquisei no Google, mas não consigo encontrar o comando que o utilitário de linha de comando 7zip usa para fazer backups incrementais. Então, alguém pode compartilhar o comando?

obrigado

btw Encontrei este link: http://wmug.co.uk/wmug/b/sean/archive/2009/03/20/powershell-amp-7zip-incremental-backup-solution.aspx . Mas parece ser para backups diferenciais, mesmo que seja incremental.

gyaani_guy
fonte

Respostas:

11

Deve ser simples, use isso para criar e atualizar incrementalmente o arquivo morto:

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

Esta página oferece uma referência para as opções de atualização.

Eles são traduzidos da seguinte forma:

  • p0 - Se "O arquivo existe no arquivo morto, mas não corresponde a curinga", remova o arquivo do arquivo morto.
  • q3- Se "O arquivo existe no arquivo morto, mas não existe no disco", remova o arquivo do arquivo e remova-o do sistema de arquivos após a extração .
  • r2 - Se "O arquivo não existe no arquivo morto, mas existe no disco", empacote o arquivo no arquivo morto.
  • x2 - Se "O arquivo no arquivo morto for mais recente que o arquivo no disco", compacte o arquivo antigo no arquivo morto.
  • y2 - Se "O arquivo no arquivo morto for mais antigo que o arquivo no disco", embale o arquivo mais recente no arquivo morto.
  • z1 - Se "Arquivo no arquivo morto for igual ao arquivo no disco", reutilize a versão compactada do arquivo.
  • w2 - Se o tamanho do arquivo for diferente, empacote o arquivo modificado no arquivo morto.
ArtemGr
fonte
Olá, o que significam essas muitas opções?
Zhianc 27/04/2015
É um mapa de um estado de arquivo para uma ação. Existem sete estados possíveis.
ArtemGr 27/04
3
Não é um backup incremental. Este comando faz um backup diferencial e cria um novo arquivo morto com alterações desde o último backup completo. O backup incremental rastreia as alterações desde o backup incremental anterior (dif. Diff).
stil
Eu acho que isso está errado, pois apenas atualiza o archive.7z para ser quase o mesmo que criar um novo arquivo, mas um pouco mais rápido, pois será reutilizado. A resposta de Javier abaixo parece ser um diferencial.
Tuntable
Quando o arquivo é grande e os incrementos são pequenos, o " pouco mais rápido " é bastante substancial. Não reembalar todo o arquivo morto é um dos pontos dos backups incrementais. Além disso, este não é um backup diferencial: estamos atualizando o arquivo principal e não armazenando a diferença em um arquivo separado. Se você gosta mais das outras soluções, sinta-se à vontade para vota-las, há mais de uma maneira de esfolar um gato.
ArtemGr 12/12
8

Se você fosse fazer um backup incremental , seria necessário fornecer ao 7-zip a lista dos arquivos modificados (com -i@fileList), e seria necessário elaborar essa lista de alguma forma. No espelho archive.org da pergunta removida Backup incremantal offline via thumbdrive, você pode encontrar uma linha de comando do Unix usando assinaturas md5 para criar a fileList.

A operação de atualização com 7 zip permite criar um arquivo secundário com as diferenças (incluindo arquivos excluídos) que ocorrem desde o arquivo base / primário. Isso é chamado corretamente de backup diferencial (conforme indicado na própria pergunta).

Encontrei um excelente artigo sobre esse tópico no WPCTips "Backups diferenciais com 7-zip" (arquivado) . Eles recomendam o uso de um programa GUI (Toucan) ou usam esta receita para a linha de comando:

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

Isso é um pouco diferente do 7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}proposto por ArtemGr:

  • -u- informa ao arquivo principal que não deve ser modificado
  • "-up0q3r2x2y2z0w2!{differential.7z}"especifica o arquivo diferencial de destino e que ação deve ser tomada para cada arquivo para cada condição / estado: adicione arquivos novos ou modificados no sistema de arquivos, remova arquivos que estão apenas no arquivo 7zip e ignore o restante.
    Observe que o "!" O caractere será interceptado, a bashmenos que seja citado.

Apenas no caso de você estar curioso sobre as especificidades desse enigmático 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. 
Javier
fonte
2
Obrigado pela resposta Javier, e bem-vindo ao superusuário. Existe uma política aqui para resumir os links, caso eles desapareçam - você poderia explicar como o comando obtém o backup incremental? (particularmente a up0q3r2x2y2z0w2parte!) Thanks :-)
bertieb
11
@bertieb obrigado por conselhos. Espero que esteja mais claro agora.
Javier
11
@DanielSokolowski Não tenho certeza se isso responde à sua pergunta. Se você fez um backup incremental (A + b + c + d), precisará extrair cada arquivo na ordem em que os criou. Se você fez um backup diferencial (A + (b + c + d)). São 2 arquivos que você precisa extrair. Seria bom que o último arquivo contivesse informações sobre arquivos anteriores e ordem de extração, para que a extração pudesse ser feita com um único comando. Mas não conheço esse recurso.
Javier
11
artigo que você compartilha não abre @Javier
alper 20/05
11
Obrigado @alper. O Archive.org tem uma visão geral do artigo extint WPC Tips em web.archive.org/web/20160822111118/http://www.wpctips.com:80/… . Acho que vou ter que alterar a resposta.
Javier
4

Você pode facilmente fazer um backup incremental alterando a direção no tempo. ou seja, você sempre mantém o backup mais recente como uma cópia completa e mantém os arquivos diferenciais no passado.

# 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

O arquivo base sempre contém a versão mais recente e, aplicando os "decrementos" passo a passo, você pode recriar versões mais antigas. Com um pouco de script, você pode aplicar a numeração correta aos arquivos decrementais.

iligido
fonte
Você pode gentilmente elaborar isso? Eu adoraria ver um exemplo de criação, por exemplo, um backup atual, backup 1 dia atrás, backup 2 dias atrás. E, em seguida, um exemplo de restauração do backup '2 dias atrás'.
Daniel Sokolowski
0

Em um arquivo em lotes, com a expansão atrasada ativada, é necessário citar o "!" com dois ^^ assim

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

Levei um tempo para ver esse.

Tuntable
fonte