cp с флагом рефлинка: как определить, возможна ли рефлинкинг?

cp с флагом рефлинка: как определить, возможна ли рефлинкинг?

Когда я копирую файл, используя опцию рефссылки, например,

cp --reflink foo bar

как и на каком этапе выполнения cp определяется, поддерживает ли файловая система COW. Я пытался разобраться, coreutils/src/cp.cно не смог найти конкретный системный вызов/ioctl или любой другой метод, который определяет возможности COW и соответственно переходит к выполнению cp/сообщает об ошибке:

cp: не удалось клонировать «bar» из «foo»: Неверный адрес

Короче говоря, я ищу, как --reflink=autoпроисходит разрешение опциона.

решение1

Theкодвызывает функцию, называемуюclone_fileесли опция reflink установлена ​​на «всегда» или «авто», и возвращается к копированию, если reflink установлена ​​на «всегда» (и переходит непосредственно к копированию, если reflink выключена). clone_fileвызываетBTRFS_IOC_CLONE ioctl. Таким образом, проверка того, поддерживает ли система копирование при записи, не выполняется, она просто пытается использовать метод BTRFS.

Связанный контент