Czy są wady `cp --sparse = always`?

10

Czy jest jakiś powód, aby nie używać użycia --sparse=alwaysprzy każdym wywołaniu cp?

info cp mówi:

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

Mówi także:

[...] z następującym aliasem „cp” zajmie minimalną ilość miejsca obsługiwaną przez system plików.

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

Dlaczego nie jest --sparse=alwaysdomyślna?

Tom Hale
źródło
1
Jest to niezgodne z tym --reflink, że nie wiem ...
Stephen Kitt
być może tylko dlatego, że programiści chcieli zastosować zasadę najmniejszego zaskoczenia, lub ponieważ POSIX określono inaczej? (jest cp nawet w posix, zapomniałem)
cat
2
Sprawdzanie rzadkości może mieć niekorzystny wpływ na wydajność, rzadkie pliki mogą powodować poważne rozdrobnienie systemu plików i wystąpił co najmniej jeden przypadek uszkodzenia danych cp --sparse.
frostschutz
1
Kopiowanie danych dla (głównie nierzadkich) plików przez pętlę odczytu / zapisu wymaga dma danych do i z pamięci, podczas gdy szukanie ciągów zer implikowanych przez zawsze (lub auto, gdzie liczba bloków nie pasuje do pliku size) przeciągnie dane do pamięci podręcznej procesora i będzie wymagało znacznie większej przepustowości procesora i cykli.
Meuh
1
@StephenKitt To jest kompatybilny z --reflink: info cpzawiera: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

Odpowiedzi:

2

Jest kilka powodów, dla których nie jest to domyślne, jednym z nich jest kompatybilność wsteczna, wydajność i wreszcie zasada najmniejszego zaskoczenia.

Rozumiem, że po włączeniu tej opcji występuje obciążenie procesora, które niekoniecznie może być do zaakceptowania, poza tym kluczowa jest również kompatybilność wsteczna. cpKomenda działa niezawodnie bez, to nie dodać trochę oszczędność miejsca, ale te dni, że naprawdę jest znikoma, w większości przypadków co najmniej ...

Myślę, że w otrzymanych uwagach podkreślono także inne powody.

Zasada najmniejszego zaskoczenia oznacza, że ​​nie zmieniasz niczego niepotrzebnie, cpistnieje od dziesięcioleci, zmiana jego domyślnego zachowania zdenerwuje wielu weteranów.

karp
źródło