Is it better to install a very large Postgres database (billions of rows) in a real or a virtual machine?
Your decision on VM or not shouldn't be so much determined by the number of rows but rather the availability, scaling, technical expertise, company culture, and performance based on your hardware availability.  

You can run billions of rows in VMs.  Obviously you'd want to find the database engines best practices doc for your hypervisor and follow them carefully.  You should conduct plenty of testing to ensure it meets your needs and also test your HA solutions if needed for your SLAs.

External and internal at the end of the day come down to availability and IOPS or MBps.  If you have the expertise to run a fast external source reliability, great!  If you don't, then it would be safer to go internal.  Internal will be faster anyways by default without any special configuration or external hardware anyways and you should be testing your perf. reqs. but with SSDs and the latest nand solutions you're a lot less likely to under perform.