Compression de données lourdes

Compression de données lourdes - Linux et OS Alternatifs

Marsh Posté le 18-03-2005 à 12:49:53    

Bonjour,
 
[Debian Sarge, noyau 2.6.8]
 
J'ai un système de sauvegardes automatiques à mettre en place, assez basique mais avec graveur DVD. J'utiliserai le cron. Comme le volume de données est sensé pouvoir atteindre plus de 30Go, il est évident qu'on va passer par une phase de compression. J'aurais bien voulu utiliser rar, mais il n'est pas libre, donc je me suis rabattu sur tar. Pour 30 Go, cette compression depassant certainement 8Go (à peu près... la taille d'un DVD double couche), il faudrait qu'il change de dvd à chaque fois qu'un est plein. J'imagine qu'il faut utiliser les options M L et F (et jfc bien sûr), mais comment les imbriquer ? (le -F servirai à executer un script envoyant un mail par exemple pour informer qu'il faut changer de DVD)
 
Des passages du man tar
 

Citation :

 -M, --multi-volume         créer/afficher/extraire une archive à
                             multiples volumes
  -L, --tape-length=N        utiliser un autre ruban après l'écriture
                             de N x 1024 octets
  -F, --info-script=SCRIPT   exécuter le SCRIPT à la fin de chaque
                             ruban (implique -M)

Reply

Marsh Posté le 18-03-2005 à 12:49:53   

Reply

Marsh Posté le 18-03-2005 à 13:04:10    

Je me rend compte que ça n'est peut-être pas possible de "graver" comme ça. Si c'est le cas, il faudrait faire ceci :
 
- création d'un tar avec limite à 8Go
- lorsqu'il a dépassé les 8Go il lance un script qui grave ce tar (et envoie un mail pour dire qu'il va falloir changer de DVD)
- passe au tar suivant et ainsi de suite jusqu'à ce que tout le répertoire à compresser ait été gravé.

Reply

Marsh Posté le 18-03-2005 à 14:24:27    

si tu as de la place à revendre sur le média temporaire, tu peux faire un tar de tout ce que tu as à sauvegarder et ensuite tu le découpes avec split avant de graver chaque partie.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 18-03-2005 à 14:43:07    

avec une commande du genre  
tar cfz - /mes/dossiers/à/sauvegarder | split -b ${taille}m -d - backup-
ça marche.


---------------
Jotenakis
Reply

Marsh Posté le 18-03-2005 à 16:37:31    

Merci infiniment à vous 2. J'ai testé et c'est OK pour la création. Cette commande me donner un certain nombre de fichiers (j'ai gardé le nom "backup" ) : backup-00 (de type gzip archive) backup-01 (de type inconnu) backup-02 (de type inconnu) etc... Il ne me reste plus qu'à trouver comment décopresser à partir de plusieurs backup. :p *part fouiller*
 
Encore merci !

Reply

Marsh Posté le 18-03-2005 à 16:46:21    

avec cat tu les rassembles et tu pipes pour exraire ton tar (à tester) :
cat fichier1 fichier2 fichier3 |tar xzf -


Message édité par Mjules le 18-03-2005 à 16:46:38

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 18-03-2005 à 17:13:21    

Ca marche, j'ai juste un petit message qui s'affiche lorsque je dészip, mais je ne sais pas comment l'interpréter :
 
bzip2: (stdin): trailing garbage after EOF ignored
 
La seule chose que j'ai changé dans ta commande c'est le "z", j'ai mis "j" pour qu'il fasse en bzip2 ce qui donne :  
 
# tar jcf - /home/commun/Drivers | split -b 300k -d - TEST-
tar: Removing leading `/' from member names
# cat TEST-00 >> FINAL
# cat TEST-01 >> FINAL
# cat TEST-02 >> FINAL
# cat TEST-03 >> FINAL
# tar xfj FINAL
 
bzip2: (stdin): trailing garbage after EOF ignored
 
 
Au passage, la présence du message "tar: Removing leading `/' from member names" est normale ?  
 
Le nioob n'a plus de question ;)

Reply

Marsh Posté le 18-03-2005 à 17:14:47    

pour le message de tar, c'est normal, il vire le / au début du patch il me semble (ça se contrôle avec une option)
 
pour l'incidence du message de bzip2, le plus simple est surement de comparer les sommes md5 avant et après, tu verras si ce sont les même (md5sum ton_fichier)


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 18-03-2005 à 23:28:25    

pour l'erreur ça n'a pas d'incidence. J'ai archivé/découpé une archive source.tar.gz  en plusieurs dest-$i et après reconstruction avec un cat sur les différents dest-$i, le fichier résultant correspond parfaitement au source.tar.gz initial.
 
pour le / enlevé, c'est souhaitable car ça permet de travailler en dossier relatif et non absolu.


---------------
Jotenakis
Reply

Marsh Posté le 18-03-2005 à 23:39:30    

le test du md5sum est probant :  


[~]$ tar cfz - Univers-1.avi | split -b 80m -d - backup-
[~]$ mv Univers-1.avi Univers-1.avi.old
[~]$ cat backup-00 backup-01 backup-02 backup-03 backup-04 | tar xvfz -
Univers-1.avi
 
gzip: stdin: decompression OK, trailing garbage ignored
tar: Child returned status 2
tar: Statut d'erreur reporté d'erreurs précédentes.
[~]$ md5sum Univers-1.avi
d766aa6922c691ab8fe1d55d697ec48b  Univers-1.avi
[~]$ md5sum Univers-1.avi.old
d766aa6922c691ab8fe1d55d697ec48b  Univers-1.avi.old



---------------
Jotenakis
Reply

Marsh Posté le 18-03-2005 à 23:39:30   

Reply

Marsh Posté le 21-03-2005 à 10:00:01    

Merci infiniment ;)

Reply

Marsh Posté le 21-03-2005 à 13:04:51    

Ah si ! Une dernière chose (décidement ^^), je pense basique pour certains :  
 
tar jcf - /home/commun/Drivers | split -b 300k -d - TEST-
 
A quoi correspondent ces 2 tirets en rouge ? Je me demande pourquoi sans eux la commande ne marche pas.

Reply

Marsh Posté le 21-03-2005 à 13:26:14    

Pour tar, ca veut dire qu'il doit utiliser la sortie standard comme fichier de destination et non un fichier bidule.tar classique.
 
Pour le split cela signifie qu'il doit utiliser l'entrée standard comme fichier d'entrée à découper.
 
cela permet d'utiliser le pipe '|' pour associer ces deux commandes ensemble :jap:


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 21-03-2005 à 14:42:27    

Génial ;)
 
Donc voilà le script que j'ai fait pour une partie de la sauvegarde automatique (j'ajouterai la suite au fur et à mesure, des fois que ça dépanne quelqu'un) :
 

Citation :

#!/bin/sh
cd /home/tmp
tar jcfPp - /home --exclude /home/tmp/* | split -b 4608m -d - SAUVE-


 
L'option P vient du man tar :
 
       -P, --absolute-paths
              n'enlève pas les '/' au début des noms des fichiers.

 
Donc à priori ce script devrait "tarer" le répertoire /home et le découper en tranche de 4608 Mo (1024*4,5 Go), puis mettre tout ça dans /home/tmp.
 
Il n'y a qu'une seule chose que je trouve bizare : /home fait 1.8 Go et le tar créé fait 3 Go. oO
Est-ce que ça a un rapport avec ce message apparu ? "tar: /home/tmp/SAUVE-00: le fichier a été modifié durant sa lecture". Sûrement, je réessaierai quand il n'y aura plus personne sur le réseau.


Message édité par Hermolas le 21-03-2005 à 16:36:51
Reply

Marsh Posté le 21-03-2005 à 14:54:56    

le --exclude ne fonctionne pas sur un repertoire mais sur un fichier.
 
Essaye avec une pattern comme : --exclude /home/tmp/*
(je garantis pas le resultat mais ca mange pas de pain)


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 21-03-2005 à 16:33:51    

Ca roule. J'ai édité au dessus en ajoutant un p (permet de garder les même permissions). Par contre le taux de compression reste assez moyen. :s Je passe de 1,8 Go à 1,5 Go.
 
J'attaque la gravure sur DVD et l'envoi par mail de rapport (ou demande de changement de DVD).
 
To be continued...


Message édité par Hermolas le 21-03-2005 à 16:55:42
Reply

Marsh Posté le 22-03-2005 à 00:34:56    

la commande que j'utilise est la suivante :
nice -19 tar --exclude /home/tmp --exclude /home/bidule -czpf - /home 2>>$logfile | split -b ${taille}m -d - SAUVE-
 
ça marche uniquement si les --exclude sont AVANT le -czpf (et le --exclude peux concerner des dossiers). Va savoir pourquoi...


---------------
Jotenakis
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed