1. A computer-implemented method comprising: defining a cache storage portion within a first cache storage device coupled to a first computing device within a first virtual machine and a second cache storage device coupled to a second computing device included within a second virtual machine, wherein the cache storage portion is for storing cache data for a storage area network, wherein the cache data is at least one of: stored to and retrieved from one or more storage targets included within the storage area network, wherein the cache data includes cache user data and cache metadata; defining an application storage portion within the first cache storage device coupled to the first computing device and the second cache storage device coupled to the second computing device, wherein the application storage portion is for storing application data, wherein the application storage portion is overprovisioned, such that an amount of storage space visible and mappable to the application data as usable to store the application data is greater than an actual amount of storage space allotted to the application storage portion; if the application data requires more storage space than the actual amount of storage space allotted to the application storage portion, dynamically reducing an amount of visible and mappable storage space usable to store the cache data for the cache storage portion to provide more storage space to the application storage portion; and moving the cache data from the first cache storage device coupled to the first computing device to the second cache storage device coupled to the second computing device, wherein the cache user data is moved via a shared intermediate flash storage device while the cache metadata is moved directly from the first cache storage device within the first virtual machine to the second cache storage device within the second virtual machine.