VMware Workstation: cara mengurangi ukuran maksimum .vmdk

27

Saya memiliki file disk 150 GB (.vmdk, non-dialokasikan) di mana mesin virtual saya disimpan.

File saat ini 20 GB, tetapi bertambah setiap hari, meskipun saya tidak menyimpan sesuatu yang baru di sistem file tamu.

Saya telah mencari berjam-jam cara untuk mengurangi ukuran maksimum disk ini , sehingga tidak pernah mencapai 150 GB (Saya ingin menetapkan batas hingga 30 GB, dan melihat apa yang terjadi ketika VM mencapai ukuran ini) .

Apa yang saya coba:

  • Mengubah gambar disk dengan VMware Converter → ini tidak berfungsi, alat ini hanya memungkinkan membuat salinan lengkap atau 'klon terkait'.
  • Membuat mesin virtual kosong baru dengan ukuran yang diinginkan untuk menyalin data 20GB ke .vmdk → baru. Saya tidak dapat menemukan cara untuk melakukan salinan atau bahkan menghubungkan disk baru ke VM saya yang ada (sehingga saya melakukan salinan menggunakan OS tamu).
  • Mencari di file .vmx untuk memeriksa apakah ukuran maksimum tidak diatur dalam teks biasa (bukan).

Meskipun tugas ini tampaknya secara teknis sangat sederhana (tidak ada penyusutan rumit yang terlibat, hanya perubahan batas ukuran yang sederhana), saya benar-benar kehabisan ide di sini ...

Apakah ada solusinya?

Sébastien
sumber
1
Karena partisi pada disk virtual kemungkinan besar dibuat untuk mengisi ruang yang diiklankan, "menyusut rumit" memang terlibat.
Daniel B

Jawaban:

25

Prosedur biasa untuk mengurangi ukuran disk .vmdk adalah dengan:

  1. Defragmentasi disk melalui tamu, pilih mode defragmentasi yang mengkonsolidasikan ruang kosong di akhir disk. Untuk tamu Windows, Anda harus mengosongkan Recycle Bin dan mematikan hibernasi dan paging, mengembalikannya setelah defragmentasi selesai.

  2. Kosongkan semua ruang yang tidak digunakan pada disk.
    Untuk Windows penggunaan sdelete : sdelete -c.
    Untuk Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Kecilkan disk (yang mungkin perlu waktu cukup lama untuk selesai).
    VMware Workstation: Menu VM / Kelola / Bersihkan disk.
    Atau gunakan: vmware-vdiskmanager.exe -k [VMDK PATH].
    untuk ESX: vmkfstools --punchzero [VMDK PATH].

Mengubah disk dari growable menjadi preallocated dapat menghentikan pertumbuhannya. Ini dapat dilakukan dengan menggunakan vmware-vdiskmanager dengan -tparameter yang nilainya adalah:

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

Perintah berikut akan mengubah .vmdk dari growable menjadi preallocated:

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

Jika Anda ingin mengubah ukuran disk, ini harus dilakukan saat disk masih dalam format yang dapat ditanami (contoh di sini ).

Untuk informasi lebih lanjut, lihat Panduan Pengguna Virtual Disk Manager .

harrymc
sumber
2
Ini tidak mengurangi ukuran drive yang diiklankan secara internal.
Daniel B
@AnielB: Tidak, itu tidak mengurangi ukuran maksimal, hanya ukuran fisik. Mengurangi ukuran maksimal dapat berbahaya, karena beberapa OS tidak dapat boot tanpa ruang kosong pada disk sistem.
harrymc
3
Ini adalah teknik yang berguna yang saya gunakan untuk mengurangi ruang yang ditempati oleh VMDK. Namun, ini tidak sepenuhnya menyelesaikan masalah saya, karena jika saya ingin menjaga VMDK selalu di bawah, katakanlah 30GB, saya harus mengulangi operasi secara berkala (yang memang membutuhkan waktu lama).
Sébastien
Jika disk dapat selalu dirampingkan ke ukuran yang diinginkan, artinya prosedur di atas selalu berfungsi untuk mengurangi ukuran, maka Anda dapat membatasi ukuran di masa mendatang dengan mengonversi disk ke ukuran tetap.
harrymc
1
@harrymc Mengubah disk ke ukuran tetap akan sesuai dengan kebutuhan saya. Saya hanya tidak menemukan cara untuk melakukan ini dengan VMWare Workstation atau Konverter.
Sébastien
6

File saat ini 20GB, tetapi bertambah setiap hari, meskipun saya tidak menyimpan sesuatu yang baru dalam sistem file tamu.

Karena OS dan program aplikasinya untuk sementara menggunakan banyak ruang disk untuk file sementara, file halaman, file hibernasi, dan file konfigurasi. Setelah dihapus, tergantung pada kebijakan OS, sektor baru pada disk digunakan di waktu berikutnya. VM mengalokasikan penyimpanan untuk disk virtual dari disk nyata setiap kali sektor baru digunakan dalam disk virtual. Karena sektor pada disk virtual selalu tidak digunakan kembali oleh guest OS, VM berpikir itu adalah penggunaan disk dan memberikan ruang dari disk nyata dan ini akan menyebabkan tumbuhnya citra disk virtual.

Judul pertanyaan Anda kecil kemungkinannya untuk diselesaikan karena menggunakan alat seperti itu tanpa inspeksi gambar dapat menyebabkan bencana total. Tetapi Anda dapat mencegah tumbuhnya gambar di atas 30GB. Ada banyak cara untuk mencapai tujuan.

A. Gunakan hanya 30GB yang dipartisi dan biarkan tersisa sebagai ruang kosong. Jika Anda sudah mempartisi lebih banyak ruang maka Anda perlu mengecilkan / menghapusnya, buat partisi baru lalu buang dengan nol dan pukul seperti yang dijelaskan oleh @harrymc. Karena ruang di area tanpa partisi tidak pernah digunakan, disk virtual tidak akan pernah tumbuh melebihi 30GB.

B. Buat snapshot dan pulihkan setelah penggunaan Setelah membuat snapshot, VM menyimpan data ke dalam file gambar baru. Jika Anda mengembalikannya, tanpa menyimpan atau membuat snapshot baru, semua data yang diubah dihapus dan dengan demikian ruang dibebaskan.

C. Buat disk virtual baru maksimum 30GB, tambahkan sebagai disk baru ke mesin virtual Anda saat ini, pindahkan semua data ke disk virtual baru menggunakan alat cadangan. Anda dapat menggunakan Linux langsung untuk kloning.

Opsi yang disarankan adalah A

totti
sumber
2

Mengapa tidak mengatur ukuran disk yang terlibat menjadi 30GB dari 150GB.

Anda harus mengatur jumlah semua partisi menjadi kurang dari 30GB. Anda harus mengecilkan ukuran partisi saat Anda pergi. Ada BANYAK dokumentasi di situs ini tentang cara mengecilkan partisi jadi saya tidak akan mengulanginya lagi di sini.

Mengapa Anda membuat 150GB (partisi tipis) jika Anda tidak memiliki ruang untuk mendukungnya pada ukuran maksimum? Sepertinya ini hanya meminta masalah.

mdpc
sumber
5
Saya pribadi tidak membuat VM, ini sebabnya.
Sébastien
Bagaimana cara mengecilkan disk itu sendiri? Saya memiliki partisi di dalam disk menyusut tetapi vdiskmanager.exe -k [VMDK PATH]seperti yang disarankan dalam balasan lain tidak menyusut drive.
Aaron Franke
Masalah yang tidak didokumentasikan dengan jelas, adalah bagaimana mengubah ukuran perangkat vmdk (Setelah mengubah ukuran partisi tentu saja). Juga @ mdpc saya pikir jawaban Anda tidak konstruktif. Ada banyak kesempatan Anda perlu mengubah ukuran data pada vm yang ada , sehingga tidak ada gunanya menunjuk jari bahwa VM harus dibuat dengan benar.
basos
2

Ada cara memutar menggunakan VMWare Converter untuk membuat VM baru dan ukuran VMDK yang lebih kecil, kemudian mengonversi VMDK asli ke VMDK kecil yang baru dibuat.

Kecilkan VMDK

Langkah-langkah terperinci di sini .

Perhatikan bahwa setiap perubahan pada ukuran VMDK juga akan membutuhkan pembaruan yang sesuai dengan tabel partisi .

hanxue
sumber
Ini adalah VMWare Workstation VM, dan opsi penyalinan lanjutan ini tidak ditawarkan oleh Konverter untuk jenis VM ini. Itu tidak akan membiarkan saya mengubah ukuran disk.
Sébastien
2

Ini hanya berfungsi untuk VMDK yang jarang (tidak dialokasikan sebelumnya) Defragmentasi diperlukan sebelum menyusut untuk memastikan bahwa ruang yang digunakan bersebelahan

Defragmentasi dalam Windows

Di mesin virtual Windows, pertama-tama Anda harus menjalankan defragment disk dari dalam Windows. Defragmentasi dalam Windows memastikan bahwa semua ruang yang digunakan bersebelahan. Anda kemudian dapat mengurangi ukuran disk virtual.

Mengecilkan disk virtual

Untuk mengecilkan disk virtual:

Buka Panel Kontrol / Kotak Alat VMware:

Di Windows:

Klik dua kali ikon VMware Tools di baki sistem, atau klik Start> Control Panel> VMware Tools.

Di Linux:

Buka terminal dan jalankan perintah ini:

vmware-toolbox

Catatan: Di Workstation 9.x (Windows) dan di atasnya, penyusutan dilakukan secara otomatis saat Membersihkan disk. Oleh karena itu, opsi ini dihapus dari Panel Alat VMware. Pergi ke VM> Kelola> Bersihkan Disk. Ini tidak tersedia dalam versi Linux dari VMware Workstation 9.x dan yang lebih baru.

Klik tab Shrink. Pilih drive yang ingin Anda susutkan. Klik Bersiap untuk Mengecilkan, lalu ikuti instruksi pada layar. Perhatian: Jangan mematikan mesin virtual Anda atau mesin host saat disk menyusut. Juga, jangan mencoba untuk membatalkan proses. Mengganggu proses ini dapat menyebabkan kerusakan yang tidak dapat diperbaiki ke disk virtual Anda dan Anda mungkin tidak dapat memulai mesin virtual Anda lagi.

Dari Basis Pengetahuan VMWare

Jalal Mostafa
sumber
Membaca jawaban yang sudah ada terlebih dahulu menghindari jawaban rangkap.
harrymc
1
Maaf, bagaimanapun saya mem-posting ulang dengan prosedur lengkap dan sumbernya. Ini mungkin membantunya lebih banyak
Jalal Mostafa
Juga tidak menjawab op. OP ingin mengecilkan batas maksimum, bukan ukuran saat ini.
Ryuu
2

Jawaban @harrym cukup bagus, tetapi sebenarnya tidak menjawab pertanyaan. OP ingin mengurangi ukuran maksimum . Masalahnya adalah hypervisor tidak tahu berapa ukuran yang disajikan (alias ukuran maksimum) yang memang digunakan oleh OS. Kompaksi (vmware-vdiskmakager -k) berlaku untuk vmdk yang dapat ditumbuhkan. Itu tidak melakukan apa pun pada preallocated seseorang.

Jadi langkah-langkah untuk mengecilkan disk adalah:

  1. Ubah ukuran partisi pada disk melalui OS, atau melalui live CD yang sesuai
  2. Ubah ukuran perangkat vmdk, hati-hati memilih batas untuk tidak memotong ruang partisi yang dapat digunakan. Anda selalu dapat meninggalkan lebih banyak ruang dalam gambar daripada yang sebenarnya dibutuhkan.

Langkah pertama melibatkan prosedur dari dalam VM dan bervariasi dengan OS tamu. Langkah kedua bisa didukung oleh perintah vmware tapi saya belum menemukan cara yang mendalam untuk melakukannya. Demikian pendekatan hacky.

Ini adalah solusi yang tidak terlalu cepat (karena melibatkan banyak data) dan kotor yang berhasil. Kami harus memiliki ruang yang tersedia sama dengan ukuran perangkat maksimum .

PERINGATAN: Ingatlah untuk membuat cadangan data penting sebelum operasi apa pun !!

  1. Temukan cara untuk mengubah ukuran partisi tamu dan meninggalkan ruang yang tidak terisi di akhir perangkat. Dua contoh:

    Dari OS tamu: windows 7

    1. Anda dapat menggunakan kemampuan mengubah ukuran online. Sebaiknya defragment disk terlebih dahulu dari dalam OS pencarian.
    2. Jalankan diskmgmt.msc, pilih partisi (volume) pada disk yang ingin Anda ubah ukurannya, klik kanan-> Kecilkan volume. Dalam dialog yang muncul kurangi ukuran sesuai kebutuhan Anda. Perhatikan bahwa karena partisi sedang digunakan (jika itu adalah disk sistem, atau sangat terfragmentasi) Anda mungkin tidak dapat memulihkan sebagian besar ruang kosong Anda. Ketentuan untuk meninggalkan ruang ekstra.
    3. Sekarang kita ingin tahu partisi yang mengakhiri sektor disk (atau byte). Dengan asumsi ini adalah satu-satunya partisi pada perangkat, kami mengambil ukuran volume seperti yang ditampilkan di komputer saya-> pilih disk-> klik kanan-> properti-> Kapasitas: Catat angka dalam byte. (misalnya dalam contoh saya 107371032576 untuk 99,9GB). Tambahkan beberapa ratus MB untuk keamanan (+204800) (mis. 107371237376). Untuk memastikan bahwa kami tidak perlu menambahkan apa pun yang hilang, kami dapat menggunakan utilitas garis cmd disk untuk menemukan offset partisi dari awal perangkat. jalankan diskpart kemudian: daftar disk, pilih id disk , bagian daftar, pilih id bagian , detail. Contoh:

    DISKPART> bagian detail

    Partisi 1

    Offset dalam Bytes: 1048576

    Pastikan Anda menambahkan setidaknya nomor ini ke ukuran disk. Sekarang kita perlu mengkonversi byte ke sektor yang membagi dengan 512 dan pembulatan ke atas (langit-langit). Misalnya 209709448. Catat nomor ini untuk langkah 3.

    Melalui live cd: SystemResqueCD

    1. Atau Anda dapat menggunakan resque cd, ( SystemResqueCD adalah proposal saya), unduh ISO yang dapat di-boot, pasang sebagai perangkat CD virtual pada Anda VM, boot dari CD (dengan menekan tombol Esc pada layar boot VMWare, Anda mungkin perlu mencoba beberapa kali karena muncul sangat singkat). Saat mencapai command prompt ketik: startx, ini mudah-mudahan akan membawa Anda ke antarmuka grafis.
    2. Setelah di desktop systemresque, mulai gparted (misalnya dari terminal). Cari partisi yang akan diubah ukurannya (ini harus di-unmount dengan bersih, jika ragu lakukan scandisk dari sistem operasi guest). Lakukan pengubahan ukuran, rencanakan dengan cermat kebutuhan ruang Anda.
    3. Sekali lagi kita perlu menemukan offset akhir di sektor (atau byte) dari partisi. Buka terminal dan tulis [ perangkat ] yang dibelah , kemudian unit s, cetak. Misalnya

Nomor Mulai Akhir Ukuran Jenis Sistem file Bendera

1 2048d 113455103s 113453056s merupakan boot ntfs primer

Perhatikan sektor akhir dan tambahkan 1. Misalnya 113455104. Perhatikan nomor ini untuk langkah 3.

  1. Saat peretasan bekerja pada file tunggal yang telah dialokasikan sebelumnya (tipe 2) vmdks (belum pernah mencoba beberapa jenis file), pertama-tama kita mengkonversi growable menjadi preallocated. Untuk sementara kami membutuhkan partisi dengan ruang fisik sebagai ukuran maksimum perangkat. (mis. 150GB).

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

  2. Sekarang bagian yang sulit, untuk disk yang dialokasikan sebelumnya harus ada 2 vmdks

    disk.vmdk disk-flat.vmdk

    yang pertama hanya panjang KB, dan yang terakhir memegang data diperluas. Buka yang pertama (disk.vmdk) saat workstation VMWare mati , dengan editor teks (Notepad ++ menjadi saran saya). Temukan garis

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    Ya, Anda mendapatkan intinya, bidang kedua adalah jumlah sektor yang dialokasikan untuk perangkat. Sebagai validasi, kalikan dengan 512 dan temukan ukuran dalam byte, kemudian bagi dengan 1073741824 (1024 ** 3) untuk menemukan ukuran dalam GB. Ini harus menjadi ukuran perangkat sebelumnya.

    Sekarang ganti nomor itu dengan nomor yang dicatat dari langkah pertama dan simpan file. PERINGATAN : Kesalahan di sini dan Anda bisa memangkas data aktual yang digunakan pada sistem file. (Tapi kami mengubah ukuran fs di awal perangkat dan membuat perhitungan yang benar dan aman, kan?)

  3. Sampai sekarang belum ada data yang disentuh. Lakukan langkah terakhir ini untuk benar-benar memangkas ekstensi. Kami akan menggunakan fungsionalitas rename vmware-vdiskmanager untuk membuat ulang vmdk dengan ukurannya sekarang dipangkas.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

basos
sumber
0

Untuk OS tamu linux vmware, jalankan:

sudo vmware-toolbox-cmd disk shrinkonly

Tom Hale
sumber