Apakah ada kerugian dari `cp --sparse = always`?


10

Apakah ada alasan untuk tidak menggunakan digunakan --sparse=alwaysdengan setiap doa cp?

info cp mengatakan:

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

Ia juga mengatakan:

[...] dengan alias berikut, 'cp' akan menggunakan jumlah ruang minimum yang didukung oleh sistem file.

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

Kenapa tidak --sparse=alwaysdefault?


1
Ini tidak cocok dengan --reflink, selain itu saya tidak tahu ...
Stephen Kitt

mungkin hanya karena pengembang ingin menggunakan prinsip kejutan paling tidak, atau karena POSIX menentukan sebaliknya? (cp bahkan dalam posix, saya lupa)
cat

2
Memeriksa sparseness mungkin merusak kinerja, file jarang dapat menyebabkan fragmentasi sistem file yang parah, dan setidaknya ada satu contoh data korupsi cp --sparse.
frostschutz

1
Menyalin data untuk (terutama non-jarang) file melalui loop baca / tulis melibatkan dma data masuk dan keluar dari memori, sedangkan mencari run dari nol tersirat selalu (atau otomatis di mana jumlah blok tidak cocok dengan file) ukuran) akan menyeret data ke dalam cpu cache dan melibatkan lebih banyak bandwidth cpu dan siklus.
meuh

1
@StephenKitt Ini adalah kompatibel dengan --reflink: info cpberisi: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

Jawaban:


2

Ada beberapa alasan mengapa ini bukan default, satu adalah kompatibilitas mundur, kinerja, dan yang terakhir, prinsip paling tidak mengejutkan.

Pemahaman saya adalah bahwa ketika Anda mengaktifkan opsi ini, ada overhead CPU yang mungkin tidak dapat diterima, selain itu, kompatibilitas juga merupakan kunci. The cpperintah bekerja andal tanpa, itu tidak menambahkan menghemat ruang sedikit, tapi hari ini, yang benar-benar diabaikan, dalam kebanyakan kasus setidaknya ...

Saya pikir komentar yang Anda terima juga menyoroti alasan lain.

Prinsip kejutan setidaknya berarti Anda tidak mengubah sesuatu yang sia-sia, cptelah ada selama beberapa dekade, mengubah perilaku standarnya akan mengecewakan banyak veteran.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.