GNU/Linux >> Tutoriels Linux >  >> Linux

Copie d'un fichier fragmenté de 1 To

Je me rends compte que cette question est très ancienne, mais voici une mise à jour qui pourrait être utile à d'autres qui trouvent leur chemin ici de la même manière que moi.

Heureusement, l'excellente réponse de mvp est désormais obsolète. Selon les notes de publication de GNU tar, SEEK_HOLE/SEEK_DATA a été ajouté dans la version 1.29, publiée le 16/05/2016. (Et avec GNU tar v. 1.30 étant maintenant standard dans Debian stable, il est prudent de supposer que la version tar ≥ 1.29 est disponible presque partout.)

Donc, la façon de gérer les fichiers épars maintenant est de les archiver avec n'importe quel tar (GNU ou BSD) installé sur votre système, et de même pour l'extraction.

De plus, pour les fichiers épars qui contiennent réellement des données, s'il vaut la peine d'utiliser la compression (c'est-à-dire que les données sont suffisamment compressibles pour économiser un espace disque substantiel, et les économies d'espace disque valent le temps et les ressources CPU nécessaires pour le compresser) :

  • tar -cSjf <archive>.tar.bz2 /path/to/sparse/file tireront à la fois parti de la fonctionnalité SEEK_HOLE de tar pour archiver rapidement et efficacement le fichier fragmenté et utiliseront bzip2 pour compresser les données réelles.
  • tar --use-compress-program=pbzip2 -cSf <archive>.tar.bz2 /path/to/sparse/file , comme mentionné dans le commentaire de marcin, fera de même tandis que également en utilisant plusieurs cœurs pour la tâche de compression.

Sur mon petit serveur domestique avec un processeur Atom quadricœur, en utilisant pbzip2 contre bzip2 réduit le temps d'environ 25 ou 30 %.

Avec ou sans compression, cela vous donnera une archive qui n'a besoin d'aucune gestion spéciale des fichiers fragmentés, occupe approximativement la taille "réelle" du fichier fragmenté d'origine (ou moins s'il est compressé) et peut être déplacée sans souci à propos de l'incohérence entre les capacités de fichiers fragmentés des différents utilitaires. Par exemple :cp détectera automatiquement les fichiers épars et fera ce qu'il faut, rsync gérera correctement les fichiers fragmentés si vous utilisez le -S drapeau, et scp n'a pas d'option pour les fichiers clairsemés (cela consommera de la bande passante en copiant des zéros pour tous les trous et la copie résultante sera un fichier non clairsemé dont la taille est la taille «apparente» de l'original); mais tous géreront bien sûr très bien une archive tar, qu'elle contienne des fichiers épars ou non, sans aucun indicateur spécial.

Remarques supplémentaires

  1. Lors de l'extraction, tar détectera automatiquement une archive créée avec -S il n'est donc pas nécessaire de le spécifier.
  2. Une archive créée avec pbzip2 est stocké en morceaux. Il en résulte que l'archive est légèrement plus grande que si bzip2 est utilisé, mais signifie également que l'extraction peut être multithread, contrairement à une archive créée avec bzip2 .
  3. pbzip2 et bzip2 extrairont de manière fiable les archives de l'autre sans erreur ni corruption.

Réponse courte : Utilisez bsdtar ou GNU tar (version 1.29 ou ultérieure) pour créer des archives, et GNU tar (version 1.26 ou supérieure) pour les extraire sur une autre box.

Réponse longue : Il y a certaines conditions pour que cela fonctionne.

Tout d'abord, Linux doit être au moins le noyau 3.1 (Ubuntu 12.04 ou une version ultérieure ferait l'affaire), il prend donc en charge SEEK_HOLE fonctionnalité.

Ensuite, vous avez besoin de l'utilitaire tar qui peut prendre en charge cet appel système. GNU tar le supporte depuis la version 1.29 (sortie le 16/05/2016, il devrait être présent par défaut depuis Ubuntu 18.04), ou bsdtar depuis la version 3.0.4 (disponible depuis Ubuntu 12.04) - installez-le en utilisant sudo apt-get install bsdtar .

Alors que bsdtar (qui utilise libarchive ) est génial, malheureusement, il n'est pas très intelligent lorsqu'il s'agit de décompresser - il nécessite bêtement d'avoir au moins autant d'espace libre sur le lecteur cible que la taille du fichier non compressé, sans tenir compte des trous. GNU tar décompressera efficacement ces archives éparses et ne vérifiera pas cette condition.

Ceci est le journal d'Ubuntu 12.10 (noyau Linux 3.5) :

$ dd if=/dev/zero of=1tb seek=1T bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000143113 s, 7.0 kB/s

$ time bsdtar cvfz sparse.tar.gz 1tb 
a 1tb

real    0m0.362s
user    0m0.336s
sys 0m0.020s

# Or, use gnu tar if version is later than 1.29:
$ time tar cSvfz sparse-gnutar.tar.gz 1tb
1tb

real    0m0.005s
user    0m0.006s
sys 0m0.000s

$ ls -l
-rw-rw-r-- 1 autouser autouser 1099511627777 Nov  7 01:43 1tb
-rw-rw-r-- 1 autouser autouser           257 Nov  7 01:43 sparse.tar.gz
-rw-rw-r-- 1 autouser autouser           134 Nov  7 01:43 sparse-gnutar.tar.gz
$

Comme je l'ai dit plus haut, malheureusement, untarring avec bsdtar ne fonctionnera que si vous disposez de 1 To d'espace libre. Cependant, toute version de GNU tar fonctionne très bien pour décompresser un tel sparse.tar :

$ rm 1tb 
$ time tar -xvSf sparse.tar.gz 
1tb

real    0m0.031s
user    0m0.016s
sys 0m0.016s
$ ls -l
total 8
-rw-rw-r-- 1 autouser autouser 1099511627777 Nov  7 01:43 1tb
-rw-rw-r-- 1 autouser autouser           257 Nov  7 01:43 sparse.tar.gz

Linux
  1. Comment transformer un fichier tar en fichier Tgz ?

  2. Comment compresser/décompresser sous Linux

  3. Que sont les fichiers fragmentés sous Linux

  4. Comment rendre le fichier clairsemé?

  5. Extraction d'un fichier *.tar.bz2 ?

Comment extraire (décompresser) le fichier Tar Gz

Comment extraire (décompresser) le fichier Tar Bz2

Comment extraire (décompresser) le fichier tar.xz

Comment créer un fichier Tar Gz

Comment créer un fichier Tar gz

Extraire le fichier tar.gz sous Linux