Есть ли недостатки у `cp --sparse = always`?

10

Есть ли какая-либо причина не использовать use --sparse=alwaysс каждым вызовом cp?

info cp говорит:

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

Это также говорит:

[...] со следующим псевдонимом 'cp' будет использовать минимальный объем пространства, поддерживаемый файловой системой.

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

Почему не --sparse=alwaysпо умолчанию?

Том Хейл
источник
1
Это несовместимо с --reflink, кроме того, что я не знаю ...
Стивен Китт
возможно, только потому, что разработчики хотели использовать принцип наименьшего удивления, или потому что POSIX указал иное? (cp даже в posix, я забыл)
кошка
2
Проверка на разреженность может отрицательно сказаться на производительности, разреженные файлы могут вызвать серьезную фрагментацию файловой системы, и был хотя бы один случай повреждения данных cp --sparse.
frostschutz
1
Копирование данных для (в основном не разреженных) файлов с помощью цикла чтения / записи включает в себя dma данных в память и из нее, тогда как поиск нулей подразумевает всегда (или auto, когда количество блоков не соответствует файлу). size) будет перетаскивать данные в кэши процессора и задействовать гораздо большую пропускную способность и циклы процессора.
meuh
1
@StephenKitt Он является совместимым с --reflink: info cpсодержит:with the following alias, ‘cp’ will use the minimum amount of space supported by the file system. alias cp='cp --reflink=auto --sparse=always'
Том Хейл

Ответы:

2

Есть несколько причин, почему это не по умолчанию, одна из них - обратная совместимость, производительность и, наконец, что не менее важно, принцип наименьшего удивления.

Насколько я понимаю, когда вы включаете эту опцию, есть загрузка ЦП, которая не обязательно может быть приемлемой, кроме того, обратная совместимость также является ключевой. Команда cpнадежно работает без нее, она добавляет немного экономии места, но в наши дни это действительно незначительно, в большинстве случаев по крайней мере ...

Я думаю, что комментарии, которые вы получили, также выделили другие причины.

Принцип наименьшего удивления означает, что вы не меняете что-либо без необходимости, cpсуществует уже несколько десятилетий, изменение поведения по умолчанию расстроит многих ветеранов.

thecarpy
источник