
Когда я копирую файл, используя опцию рефссылки, например,
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.