IP Library Granted Patent US 9,311,375
Granted Patent B1
US 9,311,375 · App. 13/368,240 · Granted Apr 12, 2016

Systems and methods for compacting a virtual machine file

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,311,375
App. No.
13/368,240
Granted
Apr 12, 2016
Kind
B1
Abstract

Systems and methods for compacting a virtual machine file are presented. In one example, the system accesses a source virtual machine file associated with a guest file system. The system creates a destination virtual machine file based on the guest file system and initializes a block allocation table of the destination virtual machine file. The system accesses a block allocation table of the source virtual machine file and, for each block of the source virtual machine file, determines whether the block is in use. If so, the system copies the block to the destination virtual machine file and updates the block allocation table of the destination virtual machine file. If not, the system does not copy the block or update the block allocation table of the destination virtual machine file, thereby reducing the destination virtual machine file's size compared to the source virtual machine file's size.

Claims (78)

1. A method performed by a physical computer system for compacting a virtual machine file, the method comprising:

under control of a physical computer system configured for use with virtual machines associated with virtual machine files:

accessing a source virtual machine file associated with a guest file system;

determining the guest file system associated with the source virtual machine file;

creating a destination virtual machine file based on the guest file system;

initializing a block allocation table of the destination virtual machine file;

accessing a block allocation table of the source virtual machine file and for each block of the source virtual machine file identified in the block allocation table of the source virtual machine file:

determining whether the block includes data that is not marked for deletion from the source virtual machine file;

in response to determining that the block includes data that is not marked for deletion from the source virtual machine file, copying the block to the destination virtual machine file and updating the block allocation table of the destination virtual machine file; and

in response to determining either that the block does not include data or that the block includes data which is marked for deletion from the source virtual machine file, not copying the block and not updating the block allocation table of the destination virtual machine file, thereby reducing a size of the destination virtual machine file compared to a size of the source virtual machine file.

2. The method of claim 1 , further comprising copying a file header of the source virtual machine file to the destination virtual machine file.

3. The method of claim 1 , further comprising copying a file footer of the source virtual machine file to the destination virtual machine file.

4. The method of claim 1 , wherein determining whether the block is in use comprises:

accessing a logical cluster number bitmap of the source virtual machine file;

identifying one or more clusters associated with the block; and

using the logical cluster number bitmap to determine whether at least one of the one or more clusters is in use.

5. The method of claim 1 , further comprising copying metadata associated with the source virtual machine file to the destination virtual machine file.

6. The method of claim 5 , further comprising updating the metadata associated with the destination virtual machine file based on the blocks copied from the source virtual machine file to the destination virtual machine file.

7. The method of claim 1 , further comprising:

determining the size of the source virtual machine file prior to creating the destination virtual machine file; and

in response to determining that the size of the source virtual machine file satisfies a threshold, creating the destination virtual machine file.

8. The method of claim 7 , wherein determining that the size of the source virtual machine file satisfies the threshold further comprises determining that the size of the source virtual machine file exceeds a threshold size.

9. The method of claim 1 , further comprising:

determining a percentage of blocks not in use prior to creating the destination virtual machine file; and

in response to determining that the percentage of blocks not in use satisfies a threshold, creating the destination virtual machine file.

10. The method of claim 9 , wherein determining that the percentage of blocks not in use satisfies the threshold further comprises determining that the percentage of blocks not in use exceeds a threshold percentage.

11. The method of claim 1 , wherein an initial size of the destination virtual machine file is less than the size of the source virtual machine file.

12. The method of claim 1 , wherein the source virtual machine file comprises a dynamic virtual machine file.

13. The method of claim 1 , wherein the destination virtual machine file comprises a dynamic virtual machine file.

14. The method of claim 1 , wherein determining whether the block is in use comprises determining whether the block is in use based, at least in part, on the block allocation table.

15. The method of claim 1 , further comprising deactivating a source virtual machine associated with the source virtual machine file prior to accessing the source virtual machine file.

16. A system for compacting a virtual machine file, the system comprising a physical computing system configured to:

access a source virtual machine file associated with a guest file system;

create a destination virtual machine file based on the guest file system;

initialize a block allocation table of the destination virtual machine file;

access a block allocation table of the source virtual machine file and for each block of the source virtual machine file identified in the block allocation table of the source virtual machine file:

determine whether the block includes data that is not marked for deletion from the source virtual machine file;

in response to determining that the block includes data that is not marked for deletion from the source virtual machine file, copy the block to the destination virtual machine file and update the block allocation table of the destination virtual machine file; and

in response to determining either that the block does not include data or that the block includes data which is marked for deletion from the source virtual machine file, refrain from copying the block and refrain from updating the block allocation table of the destination virtual machine file, thereby reducing a size of the destination virtual machine file compared to a size of the source virtual machine file.

17. The system of claim 16 , wherein the physical computing system is further configured to determine the guest file system associated with the source virtual machine file.

18. The system of claim 16 , wherein the physical computing system is further configured to copy a file header of the source virtual machine file to the destination virtual machine file.

19. The system of claim 16 , wherein the physical computing system is further configured to copy a file footer of the source virtual machine file to the destination virtual machine file.

20. The system of claim 16 , wherein determining whether the block is in use comprises:

accessing a logical cluster number bitmap of the source virtual machine file;

identifying one or more clusters associated with the block; and

using the logical cluster number bitmap to determine whether at least one of the one or more clusters is in use.

21. The system of claim 16 , wherein the physical computing system is further configured to copy metadata associated with the source virtual machine file to the destination virtual machine file.

22. The system of claim 21 , wherein the physical computing system is further configured to update the metadata associated with the destination virtual machine file based on the blocks copied from the source virtual machine file to the destination virtual machine file.

23. The system of claim 16 , wherein the physical computing system is further configured to:

determine the size of the source virtual machine file prior to creating the destination virtual machine file; and

in response to determining that the size of the source virtual machine file satisfies a threshold, create the destination virtual machine file.

24. The system of claim 16 , wherein the physical computing system is further configured to:

determine a percentage of blocks not in use prior to creating the destination virtual machine file; and

in response to determining that the percentage of blocks not in use satisfies a threshold, create the destination virtual machine file.

25. A system for compacting a virtual machine file, the system comprising:

a physical host server comprising a virtualization layer configured to support a parent partition and one or more child partitions, the parent partition comprising a virtual machine management system and a compactor, the one or more child partitions each comprising a virtual machine associated with a guest operating system and one or more applications;

a data store comprising one or more virtual machine files configured to be accessed by the one or more child partitions; and

the compactor configured to:

access, from the data store, a source virtual machine file comprising a dynamic virtual machine file and a guest file system;

create a destination virtual machine file based, at least in part, on the guest file system, the destination virtual machine file comprising a dynamic virtual machine file;

initialize a block allocation table of the destination virtual machine file;

access a block allocation table of the source virtual machine file and for each block of the source virtual machine file identified in the block allocation table of the source virtual machine file:

determining whether the block includes data that is not marked for deletion from the source virtual machine file;

in response to determining that the block includes data that is not marked for deletion from the source virtual machine file, causing the block to be copied to the destination virtual machine file and updating the block allocation table of the destination virtual machine file; and

in response to determining either that the block does not include data or that the block includes data which is marked for deletion from the source virtual machine file, not causing the block to be copied and not updating the block allocation table of the destination virtual machine file thereby reducing a size of the destination virtual machine file compared to a size of the source virtual machine file.

26. The system of claim 25 , wherein the compactor is further configured to determine the guest file system associated with the source virtual machine file.

27. The system of claim 25 , further comprising a duplicator configured to copy a block to the destination virtual machine file in response to the compactor determining that the block is in use.

28. The system of claim 25 , wherein each of the one or more applications access resources of the host server via a hypervisor.

29. The system of claim 25 , wherein each of the one or more applications access resources of the host server via a virtual machine management system.

30. Non-transitory computer storage configured to store executable instructions that when executed by a processor cause the processor to:

access a source virtual machine file comprising a dynamic virtual machine file associated with a guest file system;

determine the guest file system associated with the source virtual machine file;

create a destination virtual machine file based on the guest file system, the destination virtual machine file comprising a dynamic virtual machine file;

initialize a block allocation table of the destination virtual machine file;

access a block allocation table of the source virtual machine file and for each block of the source virtual machine file identified in the block allocation table of the source virtual machine file:

determine whether the block includes data that is not marked for deletion from the source virtual machine file;

in response to determining that the block includes data that is not marked for deletion from the source virtual machine file, copy the block to the destination virtual machine file and update the block allocation table of the destination virtual machine file; and

in response to determining either that the block does not include data or that the block includes data which is marked for deletion from the source virtual machine file, not copy the block and not update the block allocation table of the destination virtual machine file thereby reducing a size of the destination virtual machine file compared to a size of the source virtual machine file.

Assignments (27)
RELEASE OF SECURITY INTEREST Recorded Nov 19, 2025
From: MORGAN STANLEY SENIOR FUNDING, INC.
To: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.
Reel/Frame 073606/0001 →
RELEASE OF SECURITY INTEREST Recorded Nov 18, 2025
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.
Reel/Frame 073613/0326 →
SECURITY INTEREST Recorded Jun 8, 2025
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; ERWIN, INC.
To: ALTER DOMUS (US) LLC
Reel/Frame 071527/0649 →
SECURITY INTEREST Recorded Jun 8, 2025
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; ERWIN, INC.
To: ALTER DOMUS (US) LLC
Reel/Frame 071527/0001 →
RELEASE OF FIRST LIEN SECURITY INTEREST IN PATENTS Recorded Feb 2, 2022
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.
Reel/Frame 059105/0479 →
FIRST LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Feb 2, 2022
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.; ONE IDENTITY LLC; ONELOGIN, INC.; ONE IDENTITY SOFTWARE INTERNATIONAL DESIGNATED ACTIVITY COMPANY
To: GOLDMAN SACHS BANK USA
Reel/Frame 058945/0778 →
SECOND LIEN INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Feb 2, 2022
From: QUEST SOFTWARE INC.; ANALYTIX DATA SERVICES INC.; BINARYTREE.COM LLC; ERWIN, INC.; ONE IDENTITY LLC; ONELOGIN, INC.; ONE IDENTITY SOFTWARE INTERNATIONAL DESIGNATED ACTIVITY COMPANY
To: MORGAN STANLEY SENIOR FUNDING, INC.
Reel/Frame 058952/0279 →
RELEASE OF SECOND LIEN SECURITY INTEREST IN PATENTS Recorded Feb 2, 2022
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC.
Reel/Frame 059096/0683 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Jun 7, 2018
From: QUEST SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 046327/0347 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Jun 7, 2018
From: QUEST SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 046327/0486 →
RELEASE OF FIRST LIEN SECURITY INTEREST IN PATENTS RECORDED AT R/F 040581/0850 Recorded May 22, 2018
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
To: QUEST SOFTWARE INC. (F/K/A DELL SOFTWARE INC.); AVENTAIL LLC
Reel/Frame 046211/0735 →
CHANGE OF NAME Recorded Dec 6, 2017
From: DELL SOFTWARE INC.
To: QUEST SOFTWARE INC.
Reel/Frame 044800/0848 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE PREVIOUSLY RECORDED AT REEL: 040587 FRAME: 0624. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Nov 28, 2017
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: QUEST SOFTWARE INC. (F/K/A DELL SOFTWARE INC.); AVENTAIL LLC
Reel/Frame 044811/0598 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Nov 10, 2016
From: DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040587/0624 →
FIRST LIEN PATENT SECURITY AGREEMENT Recorded Nov 9, 2016
From: DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040581/0850 →
RELEASE OF SECURITY INTEREST Recorded Oct 31, 2016
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: AVENTAIL LLC; DELL PRODUCTS, L.P.; DELL SOFTWARE INC.
Reel/Frame 040521/0467 →
RELEASE OF SECURITY INTEREST IN CERTAIN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (040039/0642) Recorded Oct 31, 2016
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
To: AVENTAIL LLC; DELL PRODUCTS L.P.; DELL SOFTWARE INC.
Reel/Frame 040521/0016 →
RELEASE OF SECURITY INTEREST Recorded Sep 14, 2016
From: BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040065/0618 →
SECURITY AGREEMENT Recorded Sep 14, 2016
From: AVENTAIL LLC; DELL PRODUCTS, L.P.; DELL SOFTWARE INC.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040030/0187 →
SECURITY AGREEMENT Recorded Sep 14, 2016
From: AVENTAIL LLC; DELL PRODUCTS L.P.; DELL SOFTWARE INC.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 040039/0642 →
RELEASE OF SECURITY INTEREST Recorded Sep 14, 2016
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040040/0001 →
RELEASE OF SECURITY INTEREST Recorded Sep 13, 2016
From: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
To: DELL MARKETING L.P.; ASAP SOFTWARE EXPRESS, INC.; APPASSURE SOFTWARE, INC.; COMPELLANT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL PRODUCTS L.P.; DELL USA L.P.; DELL SOFTWARE INC.; FORCE10 NETWORKS, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
Reel/Frame 040065/0216 →
PATENT SECURITY AGREEMENT (TERM LOAN) Recorded Jan 2, 2014
From: DELL INC.; APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 031899/0261 →
PATENT SECURITY AGREEMENT (ABL) Recorded Jan 2, 2014
From: DELL INC.; APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 031898/0001 →
PATENT SECURITY AGREEMENT (NOTES) Recorded Jan 2, 2014
From: APPASSURE SOFTWARE, INC.; ASAP SOFTWARE EXPRESS, INC.; BOOMI, INC.; COMPELLENT TECHNOLOGIES, INC.; CREDANT TECHNOLOGIES, INC.; DELL INC.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL USA L.P.; FORCE10 NETWORKS, INC.; GALE TECHNOLOGIES, INC.; PEROT SYSTEMS CORPORATION; SECUREWORKS, INC.; WYSE TECHNOLOGY L.L.C.
To: BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS FIRST LIEN COLLATERAL AGENT
Reel/Frame 031897/0348 →
CHANGE OF NAME Recorded Aug 19, 2013
From: QUEST SOFTWARE, INC.
To: DELL SOFTWARE INC.
Reel/Frame 031035/0914 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 9, 2012
From: NAIK, DILIP C.
To: QUEST SOFTWARE, INC.
Reel/Frame 027682/0174 →