Ci sono degli svantaggi di `cp --sparse = always`?


10

C'è qualche motivo per non usare l'uso --sparse=alwayscon ogni invocazione 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.

Dice anche:

[...] con il seguente alias, 'cp' utilizzerà la quantità minima di spazio supportata dal file system.

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

Perché non è --sparse=alwaysl'impostazione predefinita?


1
È incompatibile con --reflink, a parte questo, non lo so ...
Stephen Kitt,

forse solo perché gli sviluppatori volevano utilizzare il principio della minima sorpresa o perché POSIX specificato diversamente? (è cp anche in posix, dimentico)
cat

2
Il controllo della scarsità potrebbe essere dannoso per le prestazioni, i file sparsi potrebbero causare una grave frammentazione del file system e vi era almeno un'istanza di corruzione dei dati cp --sparse.
Frostschutz,

1
La copia dei dati per i file (principalmente non sparsi) attraverso un ciclo di lettura / scrittura comporta il dma dei dati dentro e fuori la memoria, mentre la ricerca di esecuzioni di zero implica sempre (o auto dove il numero di blocchi non corrisponde al file dimensione) trascinerà i dati nelle cache della CPU e comporterà molta più larghezza di banda e cicli della CPU.
Meuh

1
@StephenKitt Si è compatibile 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

Risposte:


2

Ci sono alcuni motivi per cui non è predefinito, uno è retrocompatibilità, prestazioni e, ultimo ma non meno importante, il principio della minima sorpresa.

La mia comprensione è che quando si abilita questa opzione, c'è un sovraccarico della CPU che potrebbe non essere necessariamente accettabile, inoltre, la compatibilità con le versioni precedenti è anche la chiave. Il cpcomando funziona in modo affidabile senza, aggiunge un po 'di spazio, ma al giorno d'oggi è davvero trascurabile, nella maggior parte dei casi ...

Penso che i commenti che hai ricevuto abbiano anche evidenziato altri motivi.

Il principio della minima sorpresa significa che non si cambia nulla inutilmente, esiste cpda decenni, cambiando il suo comportamento predefinito farà arrabbiare molti veterani.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.