How is that different subvolumes can share data blocks when using COW, but not in the should-be easier operation of moving data?
mv usa o renomear syscall para tentar o movimento. O kernel rename impl do btrfs detecta a movimentação dos subvolumes cruzados e explicitamente desaprova isso (mesmo se sob o mesmo ponto de montagem):
/* we only allow rename subvolume link between subvolumes */
if (old_ino != BTRFS_FIRST_FREE_OBJECTID && root != dest)
return -EXDEV;
Isso provavelmente tem a ver com a contabilidade de subvolume inode e os caminhos de código que essas operações executam. A cópia do reflink está realmente criando novos metadados (mas os dados em si são CoW) contabilizados no novo subvolume. Em teoria, eles provavelmente poderiam fazer a renomeação "mover" os metadados, fazendo algo similar ao que a cópia --reflink seguiu a rm source ... simplesmente ninguém fez o esforço para fazê-lo.