1. A computer-implemented method of producing a backup of virtual machine data, the method comprising: creating a first snapshot of virtual machine data associated with a virtual machine; causing the virtual machine to produce a second snapshot, the second snapshot comprising data from an application running on the virtual machine; causing the application to participate in the production of the second snapshot by writing data consistent with the application's current state; and updating the first snapshot with the second snapshot.