cp com flag de reflink: como determinar se o reflink é possível?

2

Quando copio um arquivo usando a opção de reflink, por exemplo,

cp --reflink foo bar

como e qual estágio na execução do cp determina se o sistema de arquivos abaixo suporta o COW. Eu tentei olhar em coreutils/src/cp.c , mas não consegui encontrar a chamada específica do sistema / ioctl ou qualquer outro método que determina a capacidade de COW e, consequentemente, prossegue para o erro de execução / relatórios cp:

cp: failed to clone 'bar' from 'foo': Bad address

Em suma, estou procurando como a resolução da opção --reflink=auto acontece.

    
por Vishal Sahu 25.10.2016 / 07:23

1 resposta

1

As chamadas código uma função chamada clone_file se a opção de refling estiver configurada como “always” ou “auto” e voltar a copiar se o reflink for “always” (e vai diretamente para a cópia se o reflink estiver desligado). clone_file chama o BTRFS_IOC_CLONE ioctl . Portanto, não há teste se o sistema suporta copy-on-write, apenas tenta o método BTRFS.

    
por 26.10.2016 / 01:41