Can I run a virtual machine from external USB drive?
The answer depends a bit on what the VMs are supposed to do. For "paperwork" like writing and reading you'll be fine. "Major performance loss" is not a well-defined value.
For most people it should be okay. If you find yourself to be an extremely impatient computer user, get the fastest equipment you can, I would even suggest replacing the internal SSD with a bigger one. A 2 TB SSD is now on the market, which may or may not be too expensive for you (700-800$).
For programming, you likely won't get much more bang when writing code. You might get a performance boost when compiling. If you're not the type to do stuff in parallel while your code is compiling, get the fastest equipment you can.
The TLDR is: If you can afford it or if you don't have HDD lying around, get an SSD, internal or external (eSATA or USB 3). When in doubt, get the good stuff.
- Is it possible to run a VM from an external HDD? (Or is SSD a must here?)
Yes, it is possible, but you will likely have some performance loss. The VM should run okay as long as you don't have operations that require a lot of file writing. Also, the smaller the VM, the better. If you have a 50-60 GB Windows VM, it will be very slow on an external 5400 HD with USB 3. I am speaking from experience here. You can still do stuff, but it will take a while.
Running more than one VM on an external HDD at a time may bring a severe performance loss. Consider using two external HDDs for that scenario.
- Will USB3 suffice or should I get one that also supports eSATA?
USB3 should be fine, at least it was in the cases where I used them. Faster is better. If you haven't bought the external HDD yet, you might want to go for eSATA because you never know what you'll use your spare USB ports for. (You may want to add a 2nd external drive for back-up purposes.) With an HDD, you might not get much more performance from eSATA because file-writing and -reading speeds on a spinning platter disk are the limiting factor.
Also try to get an SSD or at least a 7200 rpm HDD for the external drive, if you can still find one. Or build one from an external case and an external USB enclosure. If you can't afford an SSD, a 7200 will cut file transfer times by a few percentage points.
- Is it better to store the less frequent used VMs on the external drive and then move them to the internal drive, when I need to use it? This will require me to move a VM from internal drive to external first, hence this question.
I think you should keep the VMs that will do lots of heavy lifting like file-writing and computing intensive stuff on the internal drive, irrespective of how often you use them. Shifting them can be quite a pain. Copying a 20 GB VM from internal to external HDD will take about 6-7 minutes at 60 MB/s. Internal to external SSD will be substantially faster. If you find the performance from the VMs on the external disk acceptable, moving them around might not be necessary. You can cross that bridge when you get there.
- Is it even possible to run a VM from an external drive without major performance loss?
See 1., yes it is possible for normal to medium computer work, if the VM is small. If you do graphics design or lots of file transfers, there may be a severe performance loss.
For your programming needs I would suggest on data gathered elsewhere that you get an SSD (What is more important CPU or RAM for compiling large software, e.g. bootstrapping gcc?, http://www.overclock.net/t/997361/compiling-and-cpu-usage). Though there are some dissenting opinions (https://stackoverflow.com/questions/15199356/speed-up-compile-time-with-ssd). Again, when in doubt, get the good stuff.
Edit: Januar 5th, 2016 - added some information due to recent experiences
I ran a VM on a USB3 stick over the last year. It was super easy to do and very convenient, but there are a few sidenotes to be made.
I'm not sure about VMWare, but for VirtualBox it's just a matter of dropping your virtual disk file onto the USB and linking it to your VM. You'll have to make a configuration on every host you use it with, but that's just a one time thing. The hosts play quite nicely with each other. The only thing I noticed is that my VM will have a network interface for every host network it has been connected to, but otherwise it hasn't given me any sort of conflicts.
My USB gave out eventually, which is not surprising. USB flash sticks are not meant for constantly taking in write cycles, they'll wear out quite fast if you use your VM for development purposes especially if your VM is acting as a server and constantly writing to log/cache files.
Performance can be an issue. If you do get a USB stick, look specifically for those with high read and write speeds, but even then you'll notice an impact.
I think an external SSD disk might be the better choice, it's less convenient than a small stick, but usually they're still portable enough to easily carry around, have higher performance, and live longer. (I'm aware Flash and SSD are really one and the same technology these days, but SSD's are designed with higher read and write frequency in mind while USB sticks are mostly just focused on file storage)
I've opted to use some kind of hybrid solution these days. It was really convenient to have my full programming suite inside a portable VM, but my IDE was noticeably slower running inside it and would occasionally freeze for a few seconds. Now I use most of my programming tools on the host while keeping the source code and servers on the guest. My VM is still a full-blown desktop as well though, so for the rare occasions that I still DO have to work on a foreign computer, I can just spin up my VM's GUI and work with its IDE and programming tools.