I ran into this same problem. The workarounds suggested here seemed really hacky so I tried to dig a bit deeper for a proper solution...
I found the "btrfs device ready $DEV" command which is equivalent to "btrfs device scan $DEV" except it only has exit code 0 if all devices that are part of the same filesystem are known to the kernel, implying it is ready to be mounted. Note that contrary to what the btrfs-device manpage and "btrfs device --help" say it does not actually wait for this condition, it merely checks and exits. I also found that udev has a "btrfs ready" builtin which is used by /lib/udev/rules.d/64-btrfs.rules to set the ID_BTRFS_READY property based on this same criterion, and it also sets SYSTEMD_READY=0 until the filesystem is ready, which causes systemd to pretend the device doesn't exist yet. I tried testing the ID_BTRFS_READY property in an initramfs script but for some reason it doesn't seem to get set, even though udev should be running if I understand correctly. I didn't get around to try using "btrfs device ready" since I found a much easier workaround: apt-get install dracut apt-get purge initramfs-tools-core Matthijs van Duin

