Y a-t-il des inconvénients à `cp --sparse = always`?

10

Y a-t-il une raison de ne pas utiliser use --sparse=alwaysà chaque appel à cp?

info cp dit:

‘--sparse=WHEN’
     A “sparse file” contains “holes”—a sequence of zero bytes that does
     not occupy any physical disk blocks; the ‘read’ system call reads
     these as zeros.  This can both save considerable disk space and
     increase speed, since many binary files contain lots of consecutive
     zero bytes.  By default, ‘cp’ detects holes in input source files
     via a crude heuristic and makes the corresponding output file
     sparse as well.  Only regular files may be sparse.

    The WHEN value can be one of the following:

...

    ‘always’
          For each sufficiently long sequence of zero bytes in the input
          file, attempt to create a corresponding hole in the output
          file, even if the input file does not appear to be sparse.
          This is useful when the input file resides on a file system
          that does not support sparse files (for example, ‘efs’ file
          systems in SGI IRIX 5.3 and earlier), but the output file is
          on a type of file system that does support them.  Holes may be
          created only in regular files, so if the destination file is
          of some other type, ‘cp’ does not even try to make it sparse.

Cela dit aussi:

[...] avec l'alias suivant, 'cp' utilisera le minimum d'espace pris en charge par le système de fichiers.

alias cp='cp --reflink=auto --sparse=always'

Pourquoi n'est-ce pas --sparse=alwaysla valeur par défaut?

Tom Hale
la source
1
C'est incompatible avec --reflink, à part ça je ne sais pas ...
Stephen Kitt
peut-être simplement parce que les développeurs ont voulu utiliser le principe de la moindre surprise, ou parce que POSIX a spécifié le contraire? (est cp même en posix, j'oublie)
cat
2
La vérification de la rareté peut nuire aux performances, les fichiers épars peuvent entraîner une fragmentation grave du système de fichiers et il y a eu au moins une instance de corruption de données avec cp --sparse.
frostschutz
1
La copie des données pour les fichiers (principalement non clairsemés) via une boucle de lecture / écriture implique dma de données dans et hors de la mémoire, tandis que la recherche de séries de zéros implicite par toujours (ou auto où le nombre de blocs ne correspond pas au fichier taille) fera glisser les données dans les caches cpu et impliquera beaucoup plus de bande passante cpu et de cycles.
meuh
1
@StephenKitt Il est compatible avec --reflink: info cpcontient:with the following alias, ‘cp’ will use the minimum amount of space supported by the file system. alias cp='cp --reflink=auto --sparse=always'
Tom Hale

Réponses:

2

Il y a plusieurs raisons pour lesquelles ce n'est pas par défaut, l'une est la compatibilité descendante, les performances et enfin et surtout, le principe de la moindre surprise.

D'après ce que je comprends, lorsque vous activez cette option, il y a une surcharge du processeur qui n'est pas nécessairement acceptable, en plus, la compatibilité descendante est également essentielle. La cpcommande fonctionne de manière fiable sans, elle ajoute un peu d'espace, mais de nos jours, c'est vraiment négligeable, dans la plupart des cas au moins ...

Je pense que les commentaires que vous avez reçus ont également mis en évidence d'autres raisons.

Le principe de la moindre surprise signifie que vous ne changez pas quelque chose inutilement, cpexiste depuis des décennies, changer son comportement par défaut bouleversera de nombreux vétérans.

la carpe
la source