Gibt es irgendwelche Nachteile von "cp --sparse = always"?

10

Gibt es irgendeinen Grund nicht Gebrauch zu verwenden --sparse=alwaysmit jedem Aufruf an cp?

info cp sagt:

‘--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.

Es heißt auch:

[...] Mit dem folgenden Alias ​​verwendet 'cp' den vom Dateisystem unterstützten Mindestspeicherplatz.

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

Warum ist nicht --sparse=alwaysdie Standardeinstellung?

Tom Hale
quelle
1
Es ist nicht kompatibel mit --reflink, ansonsten weiß ich nicht ...
Stephen Kitt
Vielleicht nur, weil die Entwickler das Prinzip der geringsten Überraschung anwenden wollten oder weil POSIX etwas anderes spezifiziert hat? (ist cp sogar in posix, ich vergesse)
Katze
2
Das Überprüfen auf Spärlichkeit kann sich nachteilig auf die Leistung auswirken, spärliche Dateien können zu einer schwerwiegenden Fragmentierung des Dateisystems führen, und es gab mindestens einen Fall von Datenbeschädigung mit cp --sparse.
Frostschutz
1
Das Kopieren der Daten für (hauptsächlich nicht spärliche) Dateien durch eine Lese- / Schreibschleife umfasst das Dma von Daten in den und aus dem Speicher, während das Suchen nach Nullenläufen durch immer (oder automatisch, wenn die Anzahl der Blöcke nicht mit der Datei übereinstimmt) gesucht wird Größe) zieht die Daten in die CPU-Caches und erfordert viel mehr CPU-Bandbreite und -Zyklen.
Meuh
1
@StephenKitt Es ist kompatibel mit --reflink: info cpenthält: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

Antworten:

2

Es gibt einige Gründe, warum dies nicht die Standardeinstellung ist. Eine davon ist die Abwärtskompatibilität, die Leistung und nicht zuletzt das Prinzip der geringsten Überraschung.

Meines Wissens nach entsteht bei Aktivierung dieser Option ein CPU-Overhead, der möglicherweise nicht unbedingt akzeptabel ist. Außerdem ist die Abwärtskompatibilität von entscheidender Bedeutung. Der cpBefehl funktioniert zuverlässig ohne, es fügt ein wenig Platzersparnis hinzu, aber heutzutage ist das wirklich vernachlässigbar, zumindest in den meisten Fällen ...

Ich denke, die Kommentare, die Sie erhalten haben, haben auch andere Gründe hervorgehoben.

Das Prinzip der geringsten Überraschung bedeutet, dass Sie etwas nicht unnötig ändern. Es cpgibt es schon seit Jahrzehnten. Eine Änderung des Standardverhaltens wird viele Veteranen verärgern.

thecarpy
quelle