reflink フラグ付きの cp: reflink が可能かどうかを判断するにはどうすればよいでしょうか?

reflink フラグ付きの cp: reflink が可能かどうかを判断するにはどうすればよいでしょうか?

reflinkオプションを使用してファイルをコピーする場合、例えば、

cp --reflink foo bar

cp の実行のどの段階で、その下のファイル システムが COW をサポートしているかどうかがどのように判断されるか。調べてみましたcoreutils/src/cp.cが、COW の能力を判断してそれに応じて cp の実行を続行したりエラーを報告したりする特定のシステム コール/ioctl やその他の方法は見つかりませんでした。

cp: 'foo' から 'bar' を複製できませんでした: アドレスが不正です

つまり、--reflink=autoオプションの解決がどのように行われるかを調べています。

答え1

コードという関数を呼び出すclone_filereflinkオプションが「always」または「auto」に設定されている場合、コピーに戻り、reflinkが「always」の場合はコピーに戻ります(reflinkがオフの場合は直接コピーに進みます)clone_fileBTRFS_IOC_CLONE ioctlしたがって、システムがコピーオンライトをサポートしているかどうかはテストされず、BTRFS 方式が試行されるだけです。

関連情報