VMware Workstation: cách giảm kích thước tối đa .vmdk


27

Tôi có tệp đĩa 150 GB (.vmdk, không được phân bổ trước) nơi máy ảo của tôi được lưu trữ.

Tệp hiện tại là 20 GB, nhưng nó đang tăng lên hàng ngày, mặc dù tôi không lưu trữ bất cứ thứ gì mới trong hệ thống tệp khách.

Tôi đã tìm kiếm hàng giờ để tìm cách giảm kích thước tối đa của đĩa này , để nó không bao giờ xuống tới 150 GB (Tôi muốn đặt giới hạn thành 30 GB và xem điều gì xảy ra khi VM đạt kích thước này) .

Những gì tôi đã thử:

  • Chuyển đổi hình ảnh đĩa bằng VMware Converter → điều này không hoạt động, công cụ chỉ cho phép tạo một bản sao đầy đủ hoặc một 'bản sao được liên kết'.
  • Tạo một máy ảo trống mới có kích thước mong muốn để sao chép dữ liệu 20GB vào .vmdk mới → Tôi không thể tìm cách thực hiện sao chép hoặc thậm chí kết nối đĩa mới với VM hiện tại của mình (để tôi thực hiện sao chép bằng HĐH khách).
  • Tìm trong tệp .vmx để kiểm tra xem kích thước tối đa không được đặt trong văn bản thuần túy (không phải vậy).

Mặc dù nhiệm vụ này có vẻ khá đơn giản về mặt kỹ thuật (không có sự thu hẹp khó khăn liên quan, chỉ là một thay đổi đơn giản về giới hạn kích thước), tôi thực sự không có ý tưởng nào ở đây ...

Có một giải pháp nào cả?


1
Do các phân vùng trên đĩa ảo rất có thể được tạo ra để lấp đầy không gian được quảng cáo, nên thực sự rất khó khăn trong việc thu nhỏ.
Daniel B

Câu trả lời:


25

Quy trình thông thường để giảm kích thước của đĩa .vmdk là:

  1. Chống phân mảnh đĩa thông qua máy khách, chọn chế độ chống phân mảnh hợp nhất không gian trống ở cuối đĩa. Đối với một khách Windows, bạn nên dọn sạch Thùng rác và tắt chế độ ngủ đông và phân trang, trả lại chúng sau khi phân mảnh xong.

  2. Không có tất cả không gian không sử dụng trên đĩa.
    Đối với Windows, sử dụng sdelete : sdelete -c.
    Đối với Linux : dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Thu nhỏ đĩa (có thể mất khá nhiều thời gian để hoàn thành).
    VMware Workstation: Menu VM / Manage / Dọn dẹp đĩa.
    Hoặc sử dụng : vmware-vdiskmanager.exe -k [VMDK PATH].
    cho ESX : vmkfstools --punchzero [VMDK PATH].

Chuyển đổi đĩa từ có thể phát triển sang preallocated có thể ngăn chặn sự phát triển của nó. Điều này có thể được thực hiện bằng cách sử dụng vmware-vdiskmanager với -ttham số có giá trị là:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

Lệnh sau sẽ chuyển đổi .vmdk từ growable thành preallocated:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Nếu bạn muốn thay đổi kích thước của đĩa, điều này nên được thực hiện trong khi đĩa vẫn ở định dạng có thể phát triển (ví dụ ở đây ).

Để biết thêm thông tin, xem Hướng dẫn sử dụng Trình quản lý đĩa ảo .


2
Điều này không làm giảm kích thước ổ đĩa được quảng cáo nội bộ, mặc dù.
Daniel B

@DanielB: Không, nó không làm giảm kích thước tối đa, chỉ là kích thước vật lý. Giảm kích thước tối đa có thể nguy hiểm, vì một số HĐH không thể khởi động mà không có không gian trống trên đĩa hệ thống.
harrymc

3
Đây là một kỹ thuật hữu ích tôi đã sử dụng để giảm không gian bị chiếm dụng bởi VMDK. Tuy nhiên, điều này không giải quyết được hoàn toàn vấn đề của tôi, vì nếu tôi muốn giữ VMDK luôn ở dưới, giả sử 30 GB, tôi sẽ phải lặp lại định kỳ hoạt động (thực sự phải mất một thời gian dài).
Sébastien

Nếu đĩa luôn có thể được làm mỏng xuống kích thước mong muốn, nghĩa là quy trình trên luôn hoạt động để giảm kích thước, thì bạn có thể giới hạn kích thước trong tương lai bằng cách chuyển đổi đĩa thành kích thước cố định.
harrymc

1
@harrymc Chuyển đổi đĩa thành kích thước cố định sẽ phù hợp với nhu cầu của tôi. Tôi chỉ không tìm thấy cách nào để làm điều này với VMWare Workstation hoặc Converter.
Sébastien

6

Tệp hiện tại là 20 GB, nhưng nó đang tăng lên hàng ngày, mặc dù tôi không lưu trữ bất cứ thứ gì mới trong hệ thống tệp khách.

Bởi vì HĐH và các chương trình ứng dụng của nó tạm thời sử dụng nhiều dung lượng đĩa cho các tệp tạm thời, tệp trang, tệp ngủ đông và tệp cấu hình. Khi chúng bị xóa tùy thuộc vào chính sách của HĐH, các thành phần mới trên đĩa sẽ được sử dụng vào lần tiếp theo. VM phân bổ lưu trữ cho đĩa ảo từ đĩa thực bất cứ khi nào một sector mới được sử dụng trong đĩa ảo. Vì khu vực trên đĩa ảo luôn không được hệ điều hành khách sử dụng lại, VM nghĩ rằng việc sử dụng đĩa của nó và cung cấp không gian từ đĩa thực và điều này sẽ dẫn đến hình ảnh đĩa ảo đang phát triển.

Tiêu đề câu hỏi của bạn ít có khả năng được giải quyết vì sử dụng một công cụ như vậy mà không kiểm tra hình ảnh có thể dẫn đến thảm họa toàn diện. Nhưng bạn có thể ngăn việc phát triển hình ảnh vượt quá 30 GB. Có nhiều cách để đạt được mục tiêu.

A. Chỉ sử dụng 30 GB được phân vùng và còn lại dưới dạng không gian trống. Nếu bạn đã phân vùng nhiều không gian hơn thì bạn cần thu nhỏ / xóa nó, tạo một phân vùng mới sau đó đổ nó bằng số không và đấm vào nó như mô tả bởi @harrymc. Vì không gian trong khu vực không liên kết không bao giờ được sử dụng, đĩa ảo sẽ không bao giờ phát triển vượt quá 30 GB.

B. Tạo ảnh chụp nhanh và khôi phục lại sau khi sử dụng. Sau khi tạo ảnh chụp nhanh lưu trữ dữ liệu vào một tệp hình ảnh mới. Nếu bạn khôi phục lại nó, mà không lưu hoặc tạo ảnh chụp nhanh mới, tất cả dữ liệu đã thay đổi sẽ bị xóa và do đó không gian được giải phóng.

C. Tạo một đĩa ảo mới tối đa 30 GB, thêm nó dưới dạng một đĩa mới vào máy ảo hiện tại của bạn, di chuyển tất cả dữ liệu sang đĩa ảo mới bằng công cụ sao lưu. Bạn có thể sử dụng Linux trực tiếp để nhân bản.

Tùy chọn đề xuất là A


2

Tại sao không chỉ đơn giản là đặt kích thước của đĩa liên quan đến 30 GB từ 150 GB.

Bạn sẽ phải đặt tổng của tất cả các phân vùng dưới 30 GB. Bạn sẽ phải thu nhỏ kích thước của các phân vùng xuống khi bạn đi. Có rất nhiều tài liệu trên trang web này về cách thu nhỏ phân vùng xuống vì vậy tôi sẽ không lặp lại điều này ở đây LẠI.

Tại sao bạn tạo một 150GB (phân vùng mỏng) nếu bạn không có không gian để hỗ trợ nó ở kích thước tối đa? Có vẻ như đây chỉ là vấn đề rắc rối.


5
Tôi không đích thân tạo VM, đây là lý do.
Sébastien

Làm thế nào để tôi thu nhỏ đĩa? Tôi có các phân vùng trong đĩa thu nhỏ lại nhưng vdiskmanager.exe -k [VMDK PATH]như được đề xuất trong một trả lời khác không thu nhỏ ổ đĩa.
Aaron Franke

Vấn đề không được ghi lại rõ ràng là làm thế nào để thay đổi kích thước thiết bị vmdk (Tất nhiên sau khi thay đổi kích thước phân vùng). Ngoài ra @mdpc tôi nghĩ rằng câu trả lời của bạn không mang tính xây dựng. Có nhiều trường hợp bạn cần thay đổi kích thước dữ liệu trên một vm hiện có , vì vậy không có điểm nào chỉ ra rằng VM nên được tạo chính xác.
basos

2

Có một cách sử dụng VMWare Converter để tạo một VMDK mới và kích thước VMDK nhỏ hơn, sau đó chuyển đổi VMDK ban đầu sang VMDK mới được tạo, nhỏ hơn.

Thu nhỏ VMDK

Các bước chi tiết tại đây .

Lưu ý rằng mọi thay đổi đối với kích thước VMDK cũng sẽ cần một bản cập nhật tương ứng cho bảng phân vùng .


Đây là VMWare Workstation VM và các tùy chọn sao chép nâng cao này không được Trình chuyển đổi cung cấp cho loại VM này. Nó sẽ không cho phép tôi thay đổi kích thước của đĩa.
Sébastien

2

Công việc này chỉ dành cho VMDK thưa thớt (Không được phân bổ trước) Cần phải phân mảnh trước khi thu hẹp để đảm bảo rằng không gian đã sử dụng tiếp giáp nhau

Chống phân mảnh trong Windows

Trong máy ảo Windows, trước tiên bạn phải chạy phân mảnh đĩa từ bên trong Windows. Chống phân mảnh trong Windows đảm bảo rằng tất cả các không gian được sử dụng đều liền kề nhau. Sau đó bạn có thể giảm kích thước của đĩa ảo.

Thu nhỏ đĩa ảo

Để thu nhỏ đĩa ảo:

Mở Bảng điều khiển / Hộp công cụ VMware Tools:

Trong Windows:

Bấm đúp vào biểu tượng Công cụ VMware trong khay hệ thống hoặc bấm Bắt đầu> Bảng điều khiển> Công cụ VMware.

Trong Linux:

Mở terminal và chạy lệnh này:

hộp công cụ vmware

Lưu ý: Trong Workstation 9.x (Windows) trở lên, việc thu nhỏ sẽ tự động được thực hiện trong khi Dọn dẹp đĩa. Do đó, tùy chọn này bị xóa khỏi VMware Tools Panel. Chuyển đến VM> Manage> Dọn sạch đĩa. Điều này không có sẵn trong phiên bản Linux của VMware Workstation 9.x trở lên.

Nhấp vào tab Thu nhỏ. Chọn ổ đĩa bạn muốn thu nhỏ. Nhấp vào Chuẩn bị thu nhỏ, sau đó làm theo các hướng dẫn trên màn hình. Thận trọng: Không tắt máy ảo hoặc máy chủ trong khi đĩa đang co lại. Ngoài ra, đừng cố gắng hủy bỏ quá trình. Làm gián đoạn quá trình này có thể gây ra thiệt hại không thể khắc phục cho đĩa ảo của bạn và bạn không thể khởi động lại máy ảo của mình.

Từ cơ sở tri thức VMWare


Đọc câu trả lời hiện có trước tiên tránh câu trả lời trùng lặp.
harrymc

1
Xin lỗi, dù sao tôi đã đăng lại nó với đầy đủ thủ tục và nguồn. Điều này có thể giúp anh ta nhiều hơn
Jalal Mostafa

Không trả lời op. OP muốn thu hẹp giới hạn tối đa, không phải kích thước hiện tại.
Ryuu

2

Câu trả lời của @harrym khá hay, nhưng thực ra nó không trả lời được câu hỏi. OP muốn giảm kích thước tối đa . Vấn đề là nhà ảo thuật không biết bao nhiêu kích thước được trình bày (còn gọi là kích thước tối đa) thực sự được sử dụng bởi HĐH. Việc nén (vmware-vdiskmakager -k) áp dụng cho vmdk có thể phát triển. Nó không làm gì trên preallocated một.

Vì vậy, các bước để thu nhỏ đĩa là:

  1. Thay đổi kích thước phân vùng trên đĩa thông qua HĐH hoặc qua đĩa CD trực tiếp phù hợp
  2. Thay đổi kích thước thiết bị vmdk, cẩn thận chọn ranh giới không cắt bất kỳ không gian phân vùng có thể sử dụng. Bạn luôn có thể để lại một số không gian trong imnage hơn là thực sự cần thiết.

Bước đầu tiên bao gồm một quy trình từ bên trong VM và thay đổi theo hệ điều hành khách. Bước thứ hai có thể được hỗ trợ bởi các lệnh vmware nhưng tôi chưa tìm thấy cách làm sâu sắc nào. Do đó, cách tiếp cận hacky.

Đây là một cách không nhanh chóng (do liên quan đến việc di chuyển dữ liệu lớn) và giải pháp bẩn đã thực hiện thủ thuật này. Chúng tôi sẽ cần phải có không gian có sẵn bằng với kích thước thiết bị tối đa .

CẢNH BÁO: Hãy nhớ sao lưu dữ liệu quan trọng trước khi thực hiện bất kỳ thao tác nào !!

  1. Tìm cách thay đổi kích thước phân vùng khách và chừa không gian chưa phân bổ ở cuối thiết bị. Hai ví dụ:

    Từ hệ điều hành khách: windows 7

    1. Bạn có thể sử dụng khả năng thay đổi kích thước trực tuyến. Đó là một ý tưởng tốt để trước tiên chống phân mảnh đĩa từ trong hệ điều hành nhiệm vụ.
    2. Chạy diskmgmt.msc, chọn phân vùng (âm lượng) trên đĩa bạn muốn thay đổi kích thước, nhấp chuột phải-> Thu nhỏ âm lượng. Trong hộp thoại xuất hiện giảm kích thước theo yêu cầu của bạn. Lưu ý rằng vì phân vùng đang được sử dụng (nếu đó là đĩa hệ thống hoặc bị phân mảnh nhiều), bạn có thể không thể phục hồi hầu hết dung lượng trống của mình. Dự phòng để lại thêm không gian trống.
    3. Bây giờ chúng tôi muốn biết các phân vùng kết thúc khu vực đĩa (hoặc byte). Giả sử đây là phân vùng duy nhất trên thiết bị, chúng tôi lấy kích thước của âm lượng như được hiển thị trên máy tính của tôi-> chọn đĩa-> nhấp chuột phải-> thuộc tính-> Dung lượng: Lưu ý số theo byte. (ví dụ trong ví dụ 107371032576 của tôi cho 99,9GB). Thêm vài trăm megs cho an toàn (+204800) (ví dụ 107371237376). Để chắc chắn rằng chúng tôi không cần thêm bất cứ thứ gì còn thiếu, chúng tôi có thể sử dụng tiện ích dòng cmd của đĩa để tìm phần bù của phân vùng từ khi bắt đầu thiết bị. chạy đĩapart rồi: liệt kê đĩa, chọn id đĩa , liệt kê phần, chọn id id , chi tiết. Thí dụ:

    DISKPART> phần chi tiết

    Phân vùng 1

    Bù đắp bằng byte: 1048576

    Hãy chắc chắn rằng bạn thêm ít nhất số này vào kích thước đĩa. Bây giờ chúng ta cần chuyển đổi các byte thành các ngành chia cho 512 và làm tròn lên (trần). Ví dụ: 209709448. Lưu ý số này cho bước 3.

    Thông qua một đĩa CD trực tiếp: SystemResqueCD

    1. Ngoài ra, bạn có thể sử dụng đĩa CD resque, ( SystemResqueCD là đề xuất của tôi), tải xuống ISO có thể khởi động, gắn nó dưới dạng thiết bị rom cd ảo trên máy ảo của bạn, khởi động từ CD (bằng cách nhấn phím Esc trên màn hình khởi động VMWare, bạn có thể cần thử một số lần vì nó xuất hiện rất ngắn). Khi đạt đến loại dấu nhắc lệnh: startx, điều này hy vọng sẽ đưa bạn đến giao diện đồ họa.
    2. Khi ở trên máy tính để bàn của hệ thống, hãy bắt đầu gparted (ví dụ từ thiết bị đầu cuối). Tìm phân vùng cần thay đổi kích thước (điều này phải được xóa sạch sẽ, nếu nghi ngờ hãy thực hiện một scandisk từ hệ điều hành khách). Làm thay đổi kích thước, cẩn thận lập kế hoạch nhu cầu không gian của bạn.
    3. Một lần nữa chúng ta cần tìm phần bù cuối cùng trong các sector (hoặc byte) của phân vùng. Mở terminal và viết parted [ thiết bị ], sau đó đơn vị s, in. Ví dụ

Số Bắt đầu Kích cỡ Kết thúc Loại Hệ thống tệp Cờ

1 2048s 113455103s 113453056s ntfs chính khởi động

Lưu ý khu vực kết thúc và thêm 1. Ví dụ 113455104. Lưu ý số này cho bước 3.

  1. Vì hack hoạt động trên một tập tin vmdks (loại 2) vmdks (chưa thử trên nhiều loại tập tin), trước tiên chúng tôi chuyển đổi có thể phát triển thành preallocated. Chúng tôi sẽ tạm thời cần một phân vùng với không gian vật lý là kích thước tối đa của thiết bị. (ví dụ: 150GB).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 Destvmdk

  2. Bây giờ là phần khó khăn, đối với đĩa preallocated nên có 2 vmdks

    đĩa.vmdk đĩa-phẳng.vmdk

    cái trước chỉ dài KB và cái sau giữ dữ liệu mở rộng. Mở đầu tiên (đĩa.vmdk) trong khi máy trạm VMWare tắt , với trình soạn thảo văn bản (Notepad ++ là đề xuất của tôi). Tìm dòng

    RW 113455104 FLAT "Windows 7_x64-fl-phẳng.vmdk" 0

    Có bạn nhận được điểm, trường thứ hai là số ngành được phân bổ cho thiết bị. Khi xác thực nhân với 512 và tìm kích thước theo byte, sau đó chia cho 1073741824 (1024 ** 3) để tìm kích thước tính bằng GB. Đây phải là kích thước của thiết bị trước đó.

    Bây giờ thay thế số đó bằng số được ghi chú từ bước một và lưu tệp. CẢNH BÁO : Một lỗi ở đây và bạn có thể sẽ cắt dữ liệu thực tế được sử dụng trên hệ thống tập tin. (Nhưng chúng tôi đã thay đổi kích thước fs khi bắt đầu thiết bị và thực hiện các phép tính chính xác và an toàn phải không?)

  3. Cho đến bây giờ không có dữ liệu đã được chạm vào. Làm bước cuối cùng này để thực sự cắt bớt phần mở rộng. Chúng tôi sẽ sử dụng chức năng đổi tên của vmware-vdiskmanager để tạo lại vmdk với kích thước hiện đã được cắt bớt.

    vmware-vdiskmanager.exe -n Destvmdk sourcevmdk


0

Đối với hệ điều hành linux vmware, hãy chạy:

sudo vmware-toolbox-cmd disk shrinkonly

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.