And I specifically mentioned that as it is, with the mentioned limitations, it is an option mostly useful for people using btrfs on a single device as root filesystem as it is more convenient to tag a subvolume (a folder) with "nodatacow" so you can keep your VMs and stuff in there while the rest of the drive is still using btrfs. This saves the major headache of repartitioning the drive to store a few basic stuff or a few test VMs and things that aren't critical.
While for large and/or dedicated arrays where you are doing ONLY ONE THING it makes little sense to not choose the best setup for it.
mdadm RAID provides the same redundancy at a much better speed and snapshotting is not useful in my case.
All half-decent virtualization software (KVM aka the default Linux hypervisor, VMWare ESXi, Citrix XenServer or its free counterpart XCP-ng+XenOrchestra) are able to snapshot the VMs on their own in a very much more convenient way since ages ago.
Yes and no. It will COW only the first time you modify the data (again at the block level), then if you are modifying data that is already modified (i.e. out of the snapshot) it will not COW on that.
Again, this happens at block level, so at the 4kbyte chunks of the file, not the whole file.
btrfs can make snapshots and still do checksum and compression too, the general mechanism is the same, as it's supposed to be an evolution of ZFS general concept. It's just slower because it does not use GBs of RAM as cache.
People that want to use btrfs with "nodatacow" should also be informed that it disables checksumming and compression, because they should be able to make their own decision, based on their needs in the particular system.
I'm not a btrfs hater, I use it for my "cold storage drive pool" (a massive RAID1 pool of 20-ish random mismatched sata drives that btrfs can actually use fully as mentioned above) and I'm using OpenSUSE on my PC and home server/NAS, that uses btrfs by default.
I just can't use it for VM storage.