¿Hay alguna desventaja de `cp --sparse = always`?


10

¿Hay alguna razón para no usar el uso --sparse=alwayscon cada invocación a cp?

info cp dice:

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

También dice:

[...] con el siguiente alias, 'cp' usará la cantidad mínima de espacio admitida por el sistema de archivos.

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

¿Por qué no es --sparse=alwaysel predeterminado?


1
Es incompatible con --reflink, aparte de eso, no sé ...
Stephen Kitt

¿tal vez solo porque los desarrolladores querían utilizar el principio de menor sorpresa, o porque POSIX especificó lo contrario? (es cp incluso en posix, lo olvido)
gato

2
La comprobación de la escasez puede ser perjudicial para el rendimiento, los archivos dispersos pueden causar una fragmentación grave del sistema de archivos y hubo al menos una instancia de corrupción de datos cp --sparse.
frostschutz

1
Copiar los datos para archivos (principalmente no dispersos) a través de un bucle de lectura / escritura implica dma de datos dentro y fuera de la memoria, mientras que busca corridas de ceros implícitos por always (o auto donde el número de bloques no coincide con el archivo tamaño) arrastrará los datos a las memorias caché de la CPU e implicará mucho más ancho de banda y ciclos de la CPU.
meuh

1
@StephenKitt Se es compatible con --reflink: info cpcontiene: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

Respuestas:


2

Hay algunas razones por las cuales no es predeterminado, una es la compatibilidad con versiones anteriores, el rendimiento y, por último, el principio de la menor sorpresa.

Tengo entendido que cuando habilita esta opción, hay una sobrecarga de la CPU que puede no ser necesariamente aceptable, además, la compatibilidad con versiones anteriores también es clave. El cpcomando funciona de manera confiable sin, agrega un poco de ahorro de espacio, pero en estos días, eso es realmente insignificante, en la mayoría de los casos al menos ...

Creo que los comentarios que recibió también destacaron otras razones.

El principio de menor sorpresa significa que no cambia algo innecesariamente, cpha existido durante décadas, cambiar su comportamiento predeterminado molestará a muchos veteranos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.