Existem desvantagens em `cp --sparse = always`?


10

Existe alguma razão para não usar --sparse=alwaysem todas as chamadas cp?

info cp diz:

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

Também diz:

[...] com o seguinte alias, 'cp' usará a quantidade mínima de espaço suportada pelo sistema de arquivos.

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

Por que não é --sparse=alwayso padrão?


1
É incompatível com --reflink, além do que eu não sei ...
Stephen Kitt

talvez apenas porque os desenvolvedores desejassem utilizar o princípio da menor surpresa, ou porque o POSIX especificou o contrário? (é cp mesmo em POSIX, eu esqueço)
gato

2
A verificação da escassez pode ser prejudicial ao desempenho, os arquivos esparsos podem causar uma fragmentação grave do sistema de arquivos e houve pelo menos uma instância de corrupção de dados cp --sparse.
frostschutz

1
Copiar os dados para arquivos (principalmente não esparsos) por meio de um loop de leitura / gravação envolve dados de dma para dentro e para fora da memória, enquanto a procura de execuções de zeros implícitas por always (ou auto onde o número de blocos não corresponde ao arquivo tamanho) arrastará os dados para os caches da CPU e envolverá muito mais largura de banda e ciclos da CPU.
meuh

1
@StephenKitt Ele é compatível com --reflink: info cpcontém: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

Respostas:


2

Existem algumas razões pelas quais não é padrão, uma é a compatibilidade com versões anteriores, o desempenho e, por último, mas não menos importante, o princípio da menor surpresa.

Meu entendimento é que, quando você ativa essa opção, há uma sobrecarga da CPU que pode não ser necessariamente aceitável, além disso, a compatibilidade com versões anteriores também é essencial. O cpcomando funciona de maneira confiável sem, ele adiciona um pouco de economia de espaço, mas hoje em dia isso é realmente insignificante, na maioria dos casos pelo menos ...

Acho que os comentários que você recebeu também destacaram outros motivos.

O princípio da menor surpresa significa que você não muda algo desnecessariamente, cpexiste há décadas, mudar seu comportamento padrão incomodará muitos veteranos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.