A computer-implemented method performed by a data processing system comprising a plurality of physical machines, the method comprising: storing, in a first physical machine, data for a virtual machine running on a second physical machine that is separate from the first physical machine, the storing data comprising storing the data according to a plurality of data subsets that are each exclusive of each other; for each data subset, logically mapping in a mapping, by the virtual machine, an address range for the data subset on the first physical machine to a respective logical address range for the virtual machine; enabling read and write access to the data by the virtual machine according to the logical addressing; determining that a first data subset stored on the first physical machine is to be migrated to a third physical machine separate from the first physical machine and the second physical machine, and in response: blocking read and write access by the virtual machine to the first data subset while maintaining read and write access by the virtual machine to the other data subsets; migrating, from the first physical machine to the third physical machine, the first data subset to store the data subset on the third physical machine; updating the mapping, by the virtual machine, to map an address range for the first data subset on the third physical machine to the respective logical address range for the virtual machine; and restoring read and write access to the first data subset for the virtual machine after the migration of the first data subset from the first physical machine to the third physical machine wherein a data subset size is tailored for a particular application executing on the virtual machine during the migration. storing, in a first physical machine, data for a virtual machine running on a second physical machine that is separate from the first physical machine, the storing data comprising storing the data according to a plurality of data subsets that are each exclusive of each other; for each data subset, logically mapping in a mapping, by the virtual machine, an address range for the data subset on the first physical machine to a respective logical address range for the virtual machine; enabling read and write access to the data by the virtual machine according to the logical addressing; determining that a first data subset stored on the first physical machine is to be migrated to a third physical machine separate from the first physical machine and the second physical machine, and in response: blocking read and write access by the virtual machine to the first data subset while maintaining read and write access by the virtual machine to the other data subsets; migrating, from the first physical machine to the third physical machine, the first data subset to store the data subset on the third physical machine; updating the mapping, by the virtual machine, to map an address range for the first data subset on the third physical machine to the respective logical address range for the virtual machine; and blocking read and write access by the virtual machine to the first data subset while maintaining read and write access by the virtual machine to the other data subsets; migrating, from the first physical machine to the third physical machine, the first data subset to store the data subset on the third physical machine; updating the mapping, by the virtual machine, to map an address range for the first data subset on the third physical machine to the respective logical address range for the virtual machine; and restoring read and write access to the first data subset for the virtual machine after the migration of the first data subset from the first physical machine to the third physical machine wherein a data subset size is tailored for a particular application executing on the virtual machine during the migration.