`cp --sparse = always`の欠点はありますか?


10

を呼び出すたびにuseを使用しない理由はありますか?--sparse=alwayscp

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が別に指定したのか?(posixでもcpですが、忘れます)

2
スパース性のチェックはパフォーマンスにとって不利である可能性があり、スパースファイルは深刻なファイルシステムの断片化を引き起こす可能性があり、によるデータ破損のインスタンスが少なくとも1つありましたcp --sparse
frostschutz 2017

1
読み取り/書き込みループを介して(主に非スパース)ファイルのデータをコピーすることにより、暗示ゼロの実行を探しているのに対し、中およびメモリからのデータのDMAを必要とする常に(または自動ブロックの数は、ファイルと一致していませんサイズ)は、データをCPUキャッシュにドラッグし、CPU帯域幅とサイクルを大幅に増やします。
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

これがデフォルトではない理由はいくつかあります。1つは、下位互換性、パフォーマンス、そして最後に、驚きの原則です。

私の理解では、このオプションを有効にすると、必ずしも許容できるとは限らないCPUオーバーヘッドが発生するだけでなく、下位互換性も重要になります。このcpコマンドは確実に機能しますが、少しスペースを節約できますが、最近はほとんど無視できます。ほとんどの場合、少なくとも...

あなたが受け取ったコメントは他の理由も強調したと思います。

あなたは不必要なものを変更しない少なくとも驚き手段の原理は、cpそのデフォルトの動作は、多くの退役軍人を混乱させるだろう変更、数十年の周りされています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.