Por que “cp -R --reflink = always” executa uma cópia padrão em um sistema de arquivos btrfs?

10

O suporte ao Btrfs é Copy-On-Write. Eu tentei usar esse recurso para clonar um diretório:

cp -R --reflink=always foo_directory foo_directory.mirror

Eu esperava que o comando terminasse quase instantaneamente (como btrfs subvolume snapshot ), mas o comando cp parece realizar uma cópia lenta e padrão.

De acordo com a página do manual, esperava-se que --reflink=always imponha o recurso Cópia em gravação:

When --reflink[=always] is specified, perform a lightweight copy, where the data blocks are copied only when modified. If this is not possible the copy fails, or if --reflink=auto is specified, fall back to a standard copy.

Perguntas:

  • Você sabe por que --reflink=always não funciona?
  • Quais opções (ou outros comandos) devo usar?
por Philipp Claßen 30.07.2015 / 17:30

1 resposta

17

cp --reflink=always quase certamente está funcionando corretamente. Se não fosse, você estaria recebendo um erro. Por design, essa é a diferença entre --reflink=always e --reflink=auto . O erro seria assim:

# Filesystem that does not support the feature at all
cp: failed to clone 'xx' from 'yy': Inappropriate ioctl for device

# Filesystem that does support it, but copy across filesystems
cp: failed to clone 'xx' from 'yy': Invalid cross-device link

Você está copiando uma estrutura de diretório com muitos arquivos pequenos? Nesse caso, cp ainda tem que criar todos os diretórios e abrir e fechar todos os arquivos, por isso ainda levará tempo, ao contrário de btrfs subvolume snapshot . Isso provavelmente explica o tempo necessário para realizar a operação.

    
por 30.07.2015 / 21:55

Tags