Le nom tar
est, pour la plupart des comptes, l’abréviation de tape archive. Les « bandes » en question seraient tous ces disques de stockage magnétiques qui étaient populaires tout au long des années 1950.
Cela suggère que l’outil tar
pourrait être un peu vieux et dépassé son apogée. Mais la vérité est que, au fil des années et à travers tous les changements sismiques dans le monde informatique, tar
n’a rien perdu de sa puissance et de sa valeur.
Dans cet article, basé sur le contenu de mon livre Linux in Action, je vais vous montrer les bases de la création, de la compression et de la restauration d’archives tar. Commençons par le début.
Cet exemple prendra tous les fichiers et répertoires dans et en dessous du répertoire de travail actuel et créera un fichier d’archive que j’ai habilement nommé archivename.tar
.
Ici, j’utilise trois arguments après la commande tar:
- le
c
indique à tar de créer une nouvelle archive, -
v
définit la sortie de l’écran sur verbeuse pour que je reçoive des mises à jour, et -
f
pointe vers le nom de fichier que je voudrais donner à l’archive.
Le *
est ce qui indique à tar
d’inclure récursivement tous les fichiers et répertoires locaux.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
La commande tar ne déplace ni ne supprime aucun des répertoires et fichiers d’origine que vous lui transmettez – elle ne fait que des copies archivées.
Vous devez également noter que l’utilisation d’un point (.) au lieu d’un astérisque (*) dans la commande précédente inclurait même des fichiers cachés (dont les noms de fichiers commencent par un point) dans l’archive.
Si vous suivez sur votre propre ordinateur (comme vous le devriez certainement), vous verrez un nouveau fichier nommé archivename.tar. Le .l’extension de nom de fichier tar n’est pas nécessaire, mais c’est toujours une bonne idée de communiquer clairement le but d’un fichier de toutes les manières possibles.
Extraire votre archive afin de restaurer les fichiers est facile: Utilisez simplement xvf
au lieu de cvf
. Cela, dans l’exemple, enregistrera de nouvelles copies des fichiers et répertoires d’origine à l’emplacement actuel.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
Bien sûr, vous pouvez également demander à tar d’envoyer vos fichiers extraits à un autre endroit en utilisant l’argument -C
, suivi de l’emplacement cible:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
Vous ne voudrez pas toujours inclure tous les fichiers d’une arborescence de répertoires dans votre archive.
Supposons que vous ayez produit des vidéos, mais qu’elles soient actuellement conservées dans des répertoires avec toutes sortes de fichiers graphiques, audio et texte (contenant vos notes). Les seuls fichiers que vous devez sauvegarder sont les clips vidéo finaux utilisant l’extension de nom de fichier .mp4.
Voici comment faire cela:
$ tar cvf archivename.tar *.mp4
C’est génial. Mais ces fichiers vidéo sont énormes. Ne serait-il pas agréable de rendre cette archive un peu plus petite en utilisant la compression?
N’en dites pas plus ! Exécutez simplement la commande précédente avec l’argument z
(zip). Cela indiquera au programme gzip de compresser l’archive.
Si vous voulez suivre la convention, vous pouvez également ajouter une extension .gz
en plus de la .tar
qui est déjà là. Rappelez-vous: clarté.
Voici comment cela se déroulerait:
$ tar czvf archivename.tar.gz *.mp4
Si vous essayez cela sur vos propres fichiers .mp4 puis exécutez ls-l sur le répertoire contenant les nouvelles archives, vous remarquerez peut-être que le fichier .tar.gz
n’est pas beaucoup plus petit que le .tar
, peut-être 10% environ. C’est quoi ça ?
Eh bien, le format de fichier .mp4
est lui-même compressé, il y a donc beaucoup moins de place pour gzip pour faire son travail.
Comme tar connaît parfaitement son environnement Linux, vous pouvez l’utiliser pour sélectionner des fichiers et des répertoires situés en dehors de votre répertoire de travail actuel. Cet exemple ajoute tous les fichiers .mp4
dans le répertoire /home/myuser/Videos/
:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
Comme les fichiers d’archive peuvent devenir volumineux, il peut parfois être judicieux de les décomposer en plusieurs fichiers plus petits, de les transférer dans leur nouveau domicile, puis de recréer le fichier d’origine à l’autre extrémité. L’outil split est conçu à cet effet.
Dans cet exemple, -b
indique à Linux de diviser le nom d’archive.tar.fichier gz en parties de 1 Go. L’opération nomme ensuite chacune des parties – nom d’archivage.tar.gz.partaa, nom de l’archive.tar.gz.partab, nom de l’archive.tar.gz.partac, et ainsi de suite:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
De l’autre côté, vous recréez l’archive en lisant chacune des parties dans l’ordre (nom de l’archive cat.tar.gz.partie *), puis redirigez la sortie vers un nouveau fichier appelé archivename.tar.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
Archives du système de fichiers en streaming
Voici où les bonnes choses commencent. Je vais vous montrer comment créer une image d’archive d’une installation Linux fonctionnelle et la diffuser vers un emplacement de stockage distant — le tout en une seule commande. Voici la commande:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
Plutôt que d’essayer d’expliquer tout cela tout de suite, j’utiliserai des exemples plus petits pour l’explorer une pièce à la fois.
Créons une archive du contenu d’un répertoire appelé importantstuff qui est rempli de choses vraiment importantes:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
Laissez-moi vous expliquer cet exemple. Plutôt que d’entrer le nom de l’archive juste après les arguments de la commande (comme vous l’avez fait jusqu’à présent), j’ai utilisé un tiret (czvf-).
Le tableau de bord envoie les données sur la sortie standard. Il vous permet de repousser les détails du nom de fichier d’archive à la fin de la commande et indique à tar d’attendre le contenu source de l’archive à la place.
J’ai ensuite acheminé (/) l’archive compressée sans nom vers une connexion ssh sur un serveur distant où on m’a demandé mon mot de passe.
La commande entre guillemets a ensuite exécuté cat contre le flux de données d’archive, qui a écrit le contenu du flux dans un fichier appelé myfiles.tar.gz dans mon répertoire personnel sur l’hôte distant.
Un avantage de générer des archives de cette façon est que vous évitez la surcharge d’une étape intermédiaire. Il n’est même pas nécessaire d’enregistrer temporairement une copie de l’archive sur la machine locale. Imaginez la sauvegarde d’une installation qui remplit 110 Go de ses 128 Go d’espace disponible. Où iraient les archives ?
C’était juste un répertoire de fichiers. Supposons que vous deviez sauvegarder un système d’exploitation Linux actif sur une clé USB afin de pouvoir le déplacer sur une machine séparée et le déposer sur le lecteur principal de cette machine.
En supposant qu’il y ait déjà une nouvelle installation de la même version Linux sur la deuxième machine, l’opération de copier/coller suivante générera une réplique exacte de la première.
REMARQUE: Cela ne fonctionnera pas sur un lecteur cible qui n’a pas déjà de système de fichiers Linux installé. Pour gérer cette situation, vous devrez utiliser
dd
L’exemple suivant crée une archive compressée sur le lecteur USB appelée /dev/sdc1
.
L’argument --one-file-system
exclut toutes les données de tout système de fichiers en dehors du système actuel. Cela signifie que les pseudo-partitions telles que /sys/
et /dev/
ne seront pas ajoutées à l’archive. S’il y a d’autres partitions que vous souhaitez inclure (comme vous le ferez pour /usr/
et /var/
dans cet exemple), elles doivent être explicitement ajoutées.
Enfin, vous pouvez exclure des données du système de fichiers actuel en utilisant l’argument --exclude
:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
Revenons maintenant à cet exemple de commande à service complet. En utilisant ce que vous avez déjà appris, archivez tous les répertoires importants d’un système de fichiers et copiez le fichier d’archive sur une clé USB. Cela devrait avoir du sens pour vous maintenant:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
Il y a beaucoup plus de bonté d’administration sous la forme de livres, de cours et d’articles disponibles sur my bootstrap-it.com .