Volatile / xvdc handling

I’m a bit lost when it comes to handling of volatile / xvdc so I hope to gain some insight through this thread:

What is the current expectation of xvdc? I’ve read about volatile.img but obviously in the days of lvm there is no volatile.img but xvdc maps to a (r/w, not cow) logical volume.
Is it still the case that it is used as r/w overlay for running systems somehow? I’m seeing different behavior between Debian/Gentoo templates but I cannot observe (either in domU or dom0) any glue/wrapping that suggests that xvdc is actually used (other than xvdc1 as SWAP on some, but not all templates). I’d expect to see either mount/overlay command in domU (nope) or some sort of LV-magic in dom0 (nope, root is just a cow snap of the template’s lv). So maybe this statement is not up-to-date anymore?

If there is any “standard” usage or expectations around xvdc/volatile or any documentation around it?

I’m seeing some inconsistent behavior on my system (r4.1) again:
On the (standard) debian-11 template, xvdc maps to /dev/qubes_dom0/vm-debian-11-volatile which doesn’t even exist. However, AppVMs using the debian-11 template do have a valid xvdc LV - but where is it taken from if not cloned from the template? If this is handled by dom0 independent of the template then why do my Gentoo-based AppVMs also have a xvdc - but an empty one, without any partitions (and as result no xvdc1 for swap)? Is it the responsibility of a template to handle the volatile LV or not?

Also, if not already answered by the above questions, what is the expected partition layout of xvdc?

  • xvdc1 (swap?)
  • xvdc2 (doesn’t exist - placeholder?)
  • xvdc3 (exists, but what’s the purpose?)

And where is the responsibility to create it (dom0, template, user)?