Sauvegarde incrémentielle avec 7zip

17

J'ai googlé et recherché, mais je ne trouve pas la commande que l'utilitaire de ligne de commande 7zip utilise pour effectuer des sauvegardes incrémentielles. Alors, quelqu'un peut-il partager la commande?

Merci

btw J'ai trouvé ce lien: http://wmug.co.uk/wmug/b/sean/archive/2009/03/20/powershell-amp-7zip-incremental-backup-solution.aspx . Mais il semble que ce soit pour les sauvegardes différentielles, même s'il dit incrémentiel.

gyaani_guy
la source

Réponses:

11

Doit être simple, utilisez ceci pour créer et mettre à jour progressivement l'archive:

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

Cette page propose une référence pour les options de mise à jour.

Ils se traduisent comme suit:

  • p0 - Si "Le fichier existe dans l'archive, mais ne correspond pas au caractère générique", supprimez le fichier de l'archive.
  • q3- Si "Le fichier existe dans l'archive, mais n'existe pas sur le disque", supprimez le fichier de l'archive et supprimez-le du système de fichiers lors de l'extraction .
  • r2 - Si "Le fichier n'existe pas dans l'archive, mais existe sur le disque", placez le fichier dans l'archive.
  • x2 - Si "Le fichier dans l'archive est plus récent que le fichier sur le disque", placez l'ancien fichier dans l'archive.
  • y2 - Si "Le fichier dans l'archive est plus ancien que le fichier sur le disque", placez le fichier le plus récent dans l'archive.
  • z1 - Si "Le fichier dans l'archive est identique au fichier sur le disque", réutilisez la version compressée du fichier.
  • w2 - Si la taille du fichier est différente, placez le fichier modifié dans l'archive.
ArtemGr
la source
Bonjour, que signifient ces nombreuses options?
Zhianc
C'est une carte d'un état de fichier à une action. Il y a sept états possibles.
ArtemGr
3
Ce n'est pas une sauvegarde incrémentielle. Cette commande effectue une sauvegarde différentielle et crée une nouvelle archive avec des modifications depuis la dernière sauvegarde complète. La sauvegarde incrémentielle suit les changements depuis la sauvegarde incrémentielle précédente (diff de diff).
jusqu'au
Je pense que c'est tout à fait faux, car il met simplement à jour archive.7z pour être presque le même que la simple création d'une nouvelle archive, mais un peu plus rapide car il sera réutilisé. La réponse de Javier ci-dessous semble être un différentiel.
Tuntable
Lorsque l'archive est grande et que les incréments sont faibles, le " bit plus rapide " est assez important. Ne pas reconditionner l'intégralité de l'archive est l'un des points des sauvegardes incrémentielles. De plus, ce n'est pas une sauvegarde différentielle: nous mettons à jour l'archive principale et ne stockons pas la différence dans une archive séparée. Si vous aimez davantage les autres solutions, n'hésitez pas à les voter, il y a plus d'une façon de dépouiller un chat.
ArtemGr
8

Si vous deviez effectuer une sauvegarde incrémentielle , vous devrez fournir 7-zip avec la liste des fichiers modifiés (avec -i@fileList), et vous devrez élaborer cette liste d'une manière ou d'une autre. Sur le miroir archive.org de la question supprimée . Sauvegarde incrémentale hors ligne via une clé USB, vous pouvez trouver une ligne de commande Unix utilisant les signatures md5 pour créer la liste de fichiers.

L'opération de mise à jour 7-zip permet de créer une archive secondaire avec les différences (y compris les fichiers supprimés) survenant depuis l'archive de base / primaire. Cela s'appelle correctement une sauvegarde différentielle (comme indiqué dans la question elle-même).

J'ai trouvé un excellent article sur ce sujet dans WPCTips "Sauvegardes différentielles avec 7-zip" (archivé) . Ils recommandent soit d'utiliser un programme GUI (Toucan), soit d'utiliser cette recette pour la ligne de commande:

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

Ceci est un peu différent de celui 7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}proposé par ArtemGr:

  • -u- indique que l'archive principale ne doit pas être modifiée
  • "-up0q3r2x2y2z0w2!{differential.7z}"spécifie l'archive différentielle cible et l'action à effectuer pour chaque fichier pour chaque condition / état: ajoutez des fichiers nouveaux ou modifiés dans le système de fichiers, supprimez les fichiers qui ne sont que dans l'archive 7zip, ignorez le reste.
    Notez que le "!" Le caractère sera intercepté bashsauf s'il est cité.

Juste au cas où vous seriez curieux de connaître les spécificités de ce cryptique 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
la source
2
Merci pour la réponse Javier et bienvenue à Super User. Il existe ici une politique de récapitulation des liens au cas où ils disparaissent - pourriez-vous expliquer comment la commande réalise la sauvegarde incrémentielle? (en particulier la up0q3r2x2y2z0w2partie!) Merci :-)
bertieb
1
@bertieb merci pour vos conseils. J'espère que c'est plus clair maintenant.
Javier
1
@DanielSokolowski Je ne sais pas si cela répond à votre question. Si vous avez fait une sauvegarde incrémentielle (A + b + c + d), vous devrez extraire de chaque archive dans l'ordre dans lequel vous les avez faites. Si vous avez effectué une sauvegarde différentielle (A + (b + c + d)). Vous devez extraire 2 archives. Ce serait bien que la dernière archive contienne des informations sur les archives précédentes et l'ordre d'extraction, donc l'extraction pourrait être faite avec une seule commande. Mais je ne suis pas au courant d'une telle fonctionnalité.
Javier
1
article que vous partagez n'ouvre pas @Javier
alper
1
Merci @alper. Archive.org a un instantané de l'article extint WPC Tips sur web.archive.org/web/20160822111118/http://www.wpctips.com:80/… . Je suppose que je devrai modifier la réponse.
Javier
4

Vous pouvez facilement effectuer une sauvegarde incrémentielle en changeant la direction dans le temps. c'est-à-dire que vous conservez toujours la dernière sauvegarde en tant que copie complète et conservez les fichiers différentiels dans le passé.

# 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

L'archive de base contient toujours la dernière version et en appliquant pas à pas les «diminutions», vous pouvez recréer des versions plus anciennes. Avec un peu de script, vous pouvez appliquer la bonne numérotation aux fichiers décrémentiels.

iligide
la source
Pouvez-vous nous en dire plus? J'aimerais voir un exemple de création, disons une sauvegarde actuelle, une sauvegarde il y a 1 jour, une sauvegarde il y a 2 jours. Et puis un exemple de restauration de la sauvegarde «il y a 2 jours».
Daniel Sokolowski
0

Dans un fichier batch, avec enabledelayedexpansion, vous devez citer le "!" avec deux ^^ comme ça

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

Ça m'a pris du temps pour voir celui-là.

Tuntable
la source