Чи є недоліки `cp --sparse = always`?


10

Чи є якась причина, щоб не використовувати використання --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 даних у пам'ять і поза нею, тоді як шукати прогони нулів, які маються на увазі завжди (або автоматично, коли кількість блоків не відповідає файлу 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вже десятиліттями, зміна його поведінки за замовчуванням засмутить багатьох ветеранів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.