As I was migrating my whole system over to btrfs the other day, I came across my docker volume which was already btrfs and using subvolumes. This was of course intentional, however, I had no idea how to properly move those subvolumes to the new disk. Surprisingly, it was somewhat easy. Btrfs has send-receive functionality which you can use to move data between disks (even do stuff like incremental backups, replication and so on.
With ZFS on Linux, it often happens that zpool is created using disk identifiers such as /dev/sda. While this is fine for most scenarios, the recommended practice is to use the more guaranteed disk identifiers such as the ones found in /dev/disk/by-id. This blog post describes 3 methods how to change the disk identifiers in such zpool after it has been created. All this without migrating data, adding disks or having physical access to the machine.