
reflinkオプションを使用してファイルをコピーする場合、例えば、
cp --reflink foo bar
cp の実行のどの段階で、その下のファイル システムが COW をサポートしているかどうかがどのように判断されるか。調べてみましたcoreutils/src/cp.c
が、COW の能力を判断してそれに応じて cp の実行を続行したりエラーを報告したりする特定のシステム コール/ioctl やその他の方法は見つかりませんでした。
cp: 'foo' から 'bar' を複製できませんでした: アドレスが不正です
つまり、--reflink=auto
オプションの解決がどのように行われるかを調べています。
答え1
のコードという関数を呼び出すclone_file
reflinkオプションが「always」または「auto」に設定されている場合、コピーに戻り、reflinkが「always」の場合はコピーに戻ります(reflinkがオフの場合は直接コピーに進みます)clone_file
。BTRFS_IOC_CLONE
ioctlしたがって、システムがコピーオンライトをサポートしているかどうかはテストされず、BTRFS 方式が試行されるだけです。