This is simple with a custom config file. First, create an appvm via Qubes Manager - for this example, the name of the appvm is 'my-vm'. Then, go to the corresponding folder in /var/lib/qubes/appvms/ - in this example, /var/lib/qubes/appvms/my-vm/. Then, make a copy of the .conf file for the appvm - for example, 'cp my-vm.conf edited.conf'. Then, edit the new .conf file (XML format) to specify the block device you want to use, generally by replacing root.img with the desired block device. For example:
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/var/lib/qubes/appvms/my-vm/root.img'/>
<target dev='xvda' bus='xen'/>
</disk>
becomes
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/dev/sdb'/>
<target dev='xvda' bus='xen'/>
</disk>
Or, maybe you just want to add a second drive. If so, you would duplicate the 'disk' section, but specify 'xvdb', giving you:
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/var/lib/qubes/appvms/my-vm/root.img'/>
<target dev='xvda' bus='xen'/>
</disk>
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/dev/sdb'/>
<target dev='xvdb' bus='xen'/>
</disk>
I have not tried this for a PV domain, but it should work. I am not 100% sure of this - but for some HVM operating systems that do not have PV disk driver support, they may be happier with 'hda' instead of 'xvda'.
Then, to start the domain, you run 'qvm-start my-vm --custom-config=/var/lib/qubes/appvms/my-vm/edited.conf'.
It may be possible to permanently set a custom config via qvm-prefs, but I have not explored that idea yet.
I have been successfully using the above technique for creating a bootable USB on another machine, and booting by specifying the block device for the USB. It should work just fine for an ordinary hard drive too. Depending on the OS, you could take a primary drive out of a laptop or desktop machine, and boot it up inside a Qubes appvm.
Best of luck,
Eric