cp --reflink=autoがデフォルトの動作ではないのはなぜですか?

cp --reflink=autoがデフォルトの動作ではないのはなぜですか?

なぜcp --reflink=autoこれがデフォルトの動作ではないのですか?活性化すると害を及ぼすことができますか?

対話型シェルだけでなく、システム全体で使用されるようにコンパイル時に有効にできますか?

答え1

これは画期的な変更なので、coreutils 9.0以前はデフォルト設定ではありませんでした。堅牢性のため、データの破損を防ぐために複製が必要な場合もあります。また、パフォーマンス上の理由から、CoWファイルで待ち時間に敏感ないくつかのプロセスを実行し、書き込みがマシンディスクの他の部分にある可能性があるため、潜在的に遅延するのではなく、コピー中に書き込みが発生する可能性があります。 coreutils v8.24 mv で起動すると、上記の制約がないため、デフォルトで再接続されます。 coreutils 9.0 cpはデフォルトで再接続を試みるため、これらの変更はマイナーリリースには適していません。

答え2

rsyncなぜデフォルトではないのかよくわかりません。これをサポートしていない他のコピーユーティリティ(、、、、...)と同じように機能することもできます(またはcpio許可されていないインターフェイスpaxtarNFS、Samba、ヒューズなど)を介してファイルがコピーされる場合はファイルなど)。 .).

私は数年前も同じ状況に遭遇し、GNU cpコードを少し見てみると、まだ同じことがわかります。他の基本的な動作を得るには、コードをパッチする必要がありました。

--- coreutils-8.21/src/cp.c~    2013-06-22 21:50:26.265639114 +0100
+++ coreutils-8.21/src/cp.c     2013-06-22 21:51:06.880513924 +0100
@@ -775,7 +775,7 @@ cp_option_init (struct cp_options *x)
   x->interactive = I_UNSPECIFIED;
   x->move_mode = false;
   x->one_file_system = false;
-  x->reflink_mode = REFLINK_NEVER;
+  x->reflink_mode = REFLINK_AUTO;

   x->preserve_ownership = false;
   x->preserve_links = false;

答え3

coreutils 9.0以降、reflink = autoはデフォルトの動作です。望むより:

https://lists.gnu.org/archive/html/info-gnu/2021-09/msg00010.html

これは安定版coreutils-9.0をリリースするためのものです。

これは、次の主要な変更を含む新しいメジャーバージョンです。

  • cpはデータ処理方法を変更します。
    • CoWはデフォルトで(FICLONE ioctlを介して)有効になっています。
    • 可能であれば、コピーオフロード(copy_file_range経由)を使用してください。
    • 穴の検出は異なる方法で行われます(SEEK_HOLEにもかかわらず)。
    • これはmvとinstallにも当てはまります。

答え4

大きな問題は、文章を書いてコピーするスペースが足りなくなることです。

通常のコピーでは、コピーが完了した後にファイルの既存の部分への書き込み失敗を心配する必要はありません。スペースは完全に割り当てられ、ファイルが削除されるまで消えません。ただし、コピーを再接続すると、数週間または数ヶ月後にコピーを作成するためのスペースが不足し、ファイルの既存の部分への書き込みが失敗するリスクが常にあります。

これらの操作が失敗した場合、システムが後ろから再リンクコピーを実行したことを知っていると、非常に困惑する可能性があります。

関連情報