2009-10-18 10 views
0

Je n'ai absolument aucune idée de comment décompresser l'archive créée. Je vous donne le script complet. Une distribution basée sur Debian nommée Univention l'utilise pour sauvegarder plusieurs fichiers dans une archive tar.Comment extraire l'archive de ce script (en utilisant tar)

L'archive réelle est emballée dans une fonction. Le contenu principal où ils créent le fichier tar réel est:

cat "$TMPDIR/freeinfo.txt" >> "$TMPDIR/Installinfo.txt" 2>/dev/null 
echo >$TMPDIR/endtag.txt 
echo "%%%%OXBACKUP_${DATE}_HEADER_ENDTAG" >> "$TMPDIR/endtag.txt" 

BACKUPINFO="$BACKUPINFO endtag.txt" 


cat 2>/dev/null <<EOF> "$TMPDIR/Installinfo.sh" 
BACKUPHOSTNAME="$hostname" 
BACKUPDOMAINNAME="$domainname" 
BACKUPBASEDN="$ldap_base" 
BACKUPTIMEZONE="$(cat /etc/timezone)" 
BACKUPLANG="$(echo $locale_default)" 
BACKUPSAMBADOM="$windows_domain" 
BACKUPSAMBAINSTALLED="$SAMBAINSTALLED" 
BACKUPOXINTEGRATIONVERSION="$INTEGRATIONVERSION" 
BACKUPSECLEVEL="$(univention-config-registry get version/security-patchlevel)" 
BACKUPVERSION=2 
SECRETFILES="$SECRETFILES" 
OTHERFILES="$OTHERFILES" 
OXCONFIG="$OXCONFIG" 
CRONTABS="$CRONTABS" 
CERTFILES="$CERTFILES" 
EOF 

pstatus=() 

# 
# the actual backup to stdout 
# 
    sync ; sync ; sync 

RETVAL=$(
(tar cO $BACKUPINFO 2>/dev/null 
tar cO $SECRETFILES 2>/dev/null 
tar cO $OTHERFILES 2>/dev/null 
tar cO $OXCONFIG 2>/dev/null 
tar cO $CRONTABS 2>/dev/null 
tar cO $CERTFILES 2>/dev/null 
[ -f $EXTRAFILES ] && tar --no-recursion -T $EXTRAFILES -cO 2>/dev/null 
tar --no-recursion --null -T dirlist_mailandfilestore -cO 2>/dev/null 
tar --null -T filelist_mailandfilestore -cO 2>/dev/null 
tar --no-recursion --null -T dirlist_shares -cO 2>/dev/null 
tar --null -T filelist_shares -cO 2>/dev/null 
) | 

#help us out with smbclient, perl, scp until we get a working curl 

case "$BACKUPPROTOCOL" in 
##stripped protocol specific stuff ... (*) is the way to go! 

     (*)  dd 2>>${LOGFILE}_${DATE} > ${BACKUPPATH:-$DEFAULTBACKUPPATH}/backup_$DATE && echo "201" 

       chmod 640 "${BACKUPPATH}/backup_$DATE" >/dev/null 2>&1 
       chown root:www-data "${BACKUPPATH}/backup_$DATE" >/dev/null 2>&1 

       if [[ x"$BACKUPPATH" != x && "$BACKUPPATH" != "$DEFAULTBACKUPPATH" ]] ; then 
         # temporary permissions fix 
         ln -sf "${BACKUPPATH}/backup_$DATE" "$DEFAULTBACKUPPATH/" 
       fi 
     ;; 

esac 
) 

l'archive est de 54 Go sur le système, le goudron XVF extrait seul le premier niveau de l'archive. Désolé d'être difficile à expliquer. Dans l'ensemble, je n'ai que 40 Mo sur ce 54Go. Tous les répertoires qui devraient être dans l'archive ne sont pas extraits.

L'utilisation de $ ((goudron ... goudron ...) | dd> toto)

est aussi ce qui ne totalement inconnu pour moi, faire ce script?

Je pense avoir trouvé une solution moi-même (j'ai mis à jour le script un petit peu): Le script génère une balise qui marque la fin de la première archive. Je utilisé grep -A1 -a -b "HEADER_ENDTAG" backup.tar Value était 41.247.795 dd sauter = 41247795 if = ../../sauvegarde = test

On dirait que je pouvais maintenant extraire le « réel "archive. Y a-t-il un autre moyen de sauter automatiquement à ce décalage d'octet, par ex. sans utiliser grep manuellement?

+0

Le script est-il terminé? Vous êtes sûr que ça fonctionne comme ça? tar sur debian ne fonctionne pas avec un paramètre "c0". – theomega

+0

oui fonctionne, teste aussi sur lenny. Essayez-vous: $ ((tar --null --no-récursion/etc/-cO; tar --null/etc/-cO) | dd> foo) Et essayez d'extraire plein etc. Non le script n'est pas complet . Shoul je poster la chose complète? – evildead

+0

Oubliez mon commentaire (mais voir ma réponse), j'ai pris le O (lettre) pour un 0 (numéro, zéro). – theomega

Répondre

1

Votre script semble concaténer plusieurs fichiers tar ensemble dans un seul fichier volumineux. Pour extraire une seule section, je l'utilise comme une fonction shell/script ceci:

tarsection du fichier:

#!/bin/sh 
tar_section() { 
    local x=1; 
    while [ $x -lt $1 ]; do 
     tar t > /dev/null || echo "Error in section $x" >&2 
     x=$(($x+1)) 
    done 
    shift 
    tar f - "[email protected]" 
} 

tarfile="$1" 
shift 
tar_section "[email protected]" < "$tarfile" 

Ensuite, vous pouvez le faire (par exemple, pour une partie 3 du grand fichier):

tarsection YOUR_54GB_BACKUP_FILE 3 -t | less 
cd ...extractlocation 
tarsection YOUR_54GB_BACKUP_FILE 3 -x 
+0

c'est tout. Merci beaucoup! – evildead

Questions connexes