Робоча станція VMware: як зменшити максимальний розмір .vmdk


27

У мене дисковий файл розміром 150 Гб (.vmdk, не призначений попередньо), де зберігається моя віртуальна машина.

Зараз файл становить 20 ГБ, але він зростає з кожним днем, хоча я не зберігаю нічого нового в гостьовій файловій системі.

Я годинами шукав спосіб зменшити максимальний розмір цього диска , щоб він ніколи не потрапляв до 150 ГБ (я хотів би встановити ліміт в 30 ГБ і подивитися, що станеться, коли VM досягне цього розміру) .

Що я спробував:

  • Перетворення образу диска за допомогою VMware Converter → це не працює, інструмент дозволяє створити лише повну копію або "пов'язаний клон".
  • Створення нової порожньої віртуальної машини потрібного розміру для того, щоб скопіювати дані 20 ГБ на новий .vmdk → я не можу знайти спосіб виконати копію або навіть підключити новий диск до свого наявного VM (так що я виконую копію за допомогою гостьова ОС).
  • Заглянувши у файл .vmx, щоб перевірити, чи не встановлено максимальний розмір у простому тексті (це не так).

Хоча це завдання здається технічно досить простим (тут немає ніяких складних скорочень, просто проста зміна обмеження розміру), я дійсно не маю ідеї тут ...

Чи взагалі є рішення?


1
Оскільки розділи на віртуальному диску, швидше за все, створені для заповнення рекламованого простору, дійсно йдеться про "хитре зменшення".
Даніель Б

Відповіді:


25

Звичайною процедурою зменшення розміру .vmdk диска є:

  1. Дефрагментуйте диск через гостьовий, вибираючи режим дефрагментації, який консолідує порожній простір в кінці диска. Для гостя Windows ви повинні спорожнити кошик і вимкнути сплячку та пейджинг, повертаючи їх після дефрагментації.

  2. Нульовий весь невикористаний простір на диску.
    Для Windows використовуйте SDelete : sdelete -c.
    Для Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Стисніть диск (що може зайняти досить тривалий час).
    Робоча станція VMware: Меню VM / Управління / Очищення дисків.
    Або використовувати: vmware-vdiskmanager.exe -k [VMDK PATH].
    для ESX: vmkfstools --punchzero [VMDK PATH].

Перетворення диска з розгорнутого в попередньо розміщений може зупинити його зростання. Це можна зробити за допомогою vmware-vdiskmanager з -tпараметром, значення якого:

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

Наступна команда перетворить .vmdk з розробленого в попередньо виділений:

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

Якщо ви хочете змінити розмір диска, це слід зробити, поки диск все ще знаходиться у форматі, який можна розробити (приклади тут ).

Для отримання додаткової інформації дивіться Посібник користувача Virtual Disk Manager .


2
Однак це не зменшує розмір внутрішньо рекламованих дисків.
Даніель Б

@DanielB: Ні, це не зменшує максимальний розмір, а лише фізичний розмір. Зменшення максимального розміру може бути небезпечним, оскільки деякі ОС не можуть завантажуватися без вільного місця на системному диску.
harrymc

3
Це корисна методика, яку я використовував для зменшення місця, займаного VMDK. Однак це не повністю вирішує мою проблему, так як якщо я хочу тримати VMDK завжди під, скажімо, 30 Гб, мені доведеться періодично повторювати операцію (що дійсно займає багато часу).
Себастьян

Якщо диск завжди можна зменшити до потрібного розміру, це означає, що вищезазначена процедура завжди працює для зменшення розміру, то ви можете в майбутньому обмежити розмір, перетворивши диск у фіксований розмір.
harrymc

1
@harrymc Перетворення диска у фіксований розмір відповідало б моїм потребам. Я просто не знайшов способу зробити це за допомогою VMWare Workstation або Converter.
Себастьян

6

Зараз файл становить 20 Гб, але він зростає з кожним днем, хоча я не зберігаю нічого нового в гостьовій файловій системі.

Оскільки ОС та додаткові програми тимчасово використовують багато дискового простору для тимчасових файлів, файлів сторінок, сплячого та конфігураційних файлів. Після їх видалення в залежності від політики ОС в наступний раз будуть використовуватися нові сектори на диску. VM виділяє сховище для віртуального диска з реального диска щоразу, коли новий віктор використовується у віртуальному диску. Оскільки сектор на віртуальному диску завжди не використовується повторно гостьовою ОС, VM думає про його використання диска і дає простір з реального диска, і це призведе до зростання образу віртуального диска.

Заголовок вашого запитання рідше вирішиться, оскільки використання такого інструменту без перевірки зображення може призвести до повної катастрофи. Але ви можете запобігти зростанню зображення понад 30 Гб. Існує багато способів досягнення мети.

A. Використовуйте лише 30 ГБ з розділеними частинами і залишайте вільним місце. Якщо ви вже розділили більше місця, тоді вам потрібно зменшити / видалити його, створіть новий розділ, а потім скиньте його нулями і пробийте, як описано в @harrymc. Оскільки простір у нероздільній зоні ніколи не використовується, віртуальний диск ніколи не виросте більше 30 Гб

B. Створіть знімок і відновіть його після використання. Після створення знімка VM зберігає дані у новий файл зображення. Якщо ви відновите його, не зберігаючи і не роблячи нових знімків, всі змінені дані видаляються і, таким чином, звільняється простір.

C. Створіть новий віртуальний диск розміром до 30 Гб, додайте його як новий диск у поточну віртуальну машину, перемістіть усі дані на новий віртуальний диск за допомогою інструмента резервного копіювання. Ви можете використовувати живий Linux для клонування.

Рекомендований варіант - A


2

Чому б просто не встановити розмір залученого диска до 30 ГБ від 150 ГБ.

Вам доведеться встановити суму всіх розділів менше 30 Гб. Вам доведеться зменшити розміри розділів вниз, коли ви йдете. На цьому сайті є багато документації про те, як зменшити перегородки, щоб я не повторював це ПРОТИ.

Чому ви створили 150 Гб (тонкий розділ), якщо у вас не було місця для підтримки максимального розміру? Здається, це просто прохання про неприємності.


5
Я особисто не створив ВМ, ось чому.
Себастьян

Як я стискаю сам диск? У мене розділи на диску зменшуються, але, vdiskmanager.exe -k [VMDK PATH]як було запропоновано в іншій відповіді, диск не зменшує.
Аарон Франке

Проблема, яка не зафіксована чітко, полягає в тому, як змінити розмір пристрою vmdk (Після зміни розміру розділу звичайно). Також @mdpc я думаю, що ваша відповідь не конструктивна. Багато разів вам потрібно змінити розмір даних про існуючий vm, тому немає сенсу вказувати пальцем на те, що VM слід створити правильно.
basos

2

Існує обхідний спосіб використання конвертора VMWare для створення нового VM та меншого розміру VMDK, а потім перетворення оригінального VMDK в новостворений, менший VMDK.

Зменшити VMDK

Детальні кроки тут .

Зауважте, що для будь-яких змін розміру VMDK також знадобиться відповідне оновлення таблиці розділів .


Це робоча станція VMWare Workstation VM, і ці вдосконалені варіанти копіювання не пропонуються конвертором для цього типу VM. Це просто не дозволить мені змінити розмір диска.
Себастьян

2

Ця робота лише для рідкого VMDK (NON-попередньо виділеного) Дефрагментація потрібна перед зменшенням, щоб переконатися, що використаний простір є суміжним

Дефрагментація в Windows

У віртуальній машині Windows спочатку потрібно запустити дефрагментацію диска зсередини Windows. Дефрагментація в Windows забезпечує збереження всіх використаних просторів. Потім ви можете зменшити розмір віртуального диска.

Скорочення віртуального диску

Щоб зменшити віртуальний диск:

Відкрийте панель управління / панель інструментів VMware Tools:

У Windows:

Двічі клацніть піктограму Інструменти VMware в системному треї або натисніть кнопку Пуск> Панель управління> Інструменти VMware.

У Linux:

Відкрийте термінал і запустіть цю команду:

vmware-панель інструментів

Примітка. У Workstation 9.x (Windows) і вище, стискання виконується автоматично під час очищення диска. Тому цей параметр видалено з панелі інструментів VMware. Перейдіть до програми VM> Керування> Очищення дисків. Це недоступно у версії Linux VMware Workstation 9.x та пізнішої версії.

Перейдіть на вкладку Зменшити. Виберіть диск, який ви хочете зменшити. Клацніть Підготуватися до скорочення, а потім дотримуйтесь інструкцій на екрані. Попередження: Не вимикайте віртуальну машину або хост-машину, поки диск скорочується. Також не намагайтеся скасувати процес. Переривання цього процесу може завдати непоправної шкоди вашому віртуальному диску, і ви, можливо, не зможете запустити віртуальну машину знову.

З бази знань VMWare


Читання існуючих відповідей спочатку уникає повторюваних відповідей.
harrymc

1
Вибачте, я все одно повернув його з повною процедурою та джерелом. Це може допомогти йому більше
Джалал Мостафа

Не відповідає і на оп. ОП хоче зменшити максимальну межу, а не поточний розмір.
Рюу

2

Відповідь @harrym досить гарна, але насправді не відповідає на питання. ОП хоче зменшити максимальний розмір . Проблема полягає в тому, що гіпервізор не знає, скільки представленого розміру (він же максимальний розмір) дійсно використовується ОС. Ущільнення (vmware-vdiskmakager -k) стосується вирощуваного vmdk. Він нічого не робить на попередньо розподілених.

Отже, кроки для зменшення диска:

  1. Змініть розмір розділу на диску через ОС або через відповідний живий компакт-диск
  2. Змініть розмір пристрою vmdk, обережно вибираючи межу, щоб не скорочувати корисний простір розділів. Ви завжди можете залишити трохи більше місця в іманенті, ніж це насправді потрібно.

Перший крок передбачає процедуру зсередини VM і залежить від гостьової ОС. Другий крок може бути підтриманий командами vmware, але я не знайшов глибокого способу цього. Таким чином, підступний підхід.

Ось не настільки швидке (через великі переміщення даних) і брудне рішення, яке зробило трюк. Нам потрібно мати вільний простір, рівний максимальному розміру пристрою .

УВАГА: Не забудьте створити резервну копію важливих даних перед будь-якою операцією !!

  1. Знайдіть спосіб змінити розмір гостьового розділу та залишити нерозподілений простір в кінці пристрою. Два приклади:

    Від гостьової ОС: windows 7

    1. Ви можете використовувати можливість зміни розміру в Інтернеті. Потрібно спочатку дефрагментацію диска в межах квест-операційної системи.
    2. Запустіть diskkmgmt.msc, виберіть розділ (том) на диску, який ви хочете змінити, змініть правою кнопкою миші-> Зменшити гучність. У діалоговому вікні, що з’явиться, зменшіть розмір відповідно до ваших вимог. Зауважте, що оскільки розділ використовується (якщо це системний диск або сильно фрагментований), ви, можливо, не зможете відновити більшу частину вільного місця. Застереження, щоб залишити додатковий вільний простір.
    3. Тепер ми хочемо знати секції, що закінчують диск (або байт). Якщо припустити, що це єдиний розділ на пристрої, ми приймаємо розмір гучності, який відображається на моєму комп’ютері-> виберіть диск-> клацніть правою кнопкою миші>> властивості-> Ємність: відмітьте число в байтах. (наприклад, у моєму прикладі 107371032576 на 99,9 ГБ). Додайте кілька сотень мегів для безпеки (+204800) (наприклад, 107371237376). Щоб бути впевненим, що нам не потрібно додавати нічого, що не вистачає, ми можемо скористатися утилітою cmd-рядка diskpart, щоб знайти зрушення розділу з початку пристрою. запустіть diskpart потім: список диска, виберіть ідентифікатор диска , частина списку, виберіть ідентифікатор частини , деталізація. Приклад:

    DISKPART> детальна частина

    Розділ 1

    Зсув у байтах: 1048576

    Не забудьте додати принаймні цей номер до розміру диска. Тепер нам потрібно перетворити байти в сектори, що діляться на 512 і округлюються вгору (стеля). Наприклад, 209709448. Зауважте це число для кроку 3.

    Через живий компакт-диск: SystemResqueCD

    1. Крім того, ви можете використовувати cd-диск Resque ( SystemResqueCD - моя пропозиція), завантажувати завантажувальний ISO, монтувати його як віртуальний пристрій CD-ROM на вас VM, завантажувати з CD (натискаючи клавішу Esc на екрані завантаження VMWare, можливо, вам доведеться спробувати іноді, як це з’являється дуже коротко). При досягненні типу командного рядка: startx, це, сподіваємось, приведе вас до графічного інтерфейсу.
    2. Потрапивши на робочий стіл systemque, почніть gparted (наприклад, з терміналу). Знайдіть розділ, який слід змінити (це повинно бути чисто вимкнено, якщо ви сумніваєтесь у скандалі від гостьової операційної системи). Зробіть розміри, ретельно плануючи свої потреби в просторі.
    3. Знову нам потрібно знайти закінчення зміщення в секторах (або байтах) розділу. Відкрийте термінал і запишіть розділене [ пристрій ], потім блок s, друкуйте. Напр

Номер Початковий Кінець Розмір Тип Файлова система Прапори

1 2048s 113455103s 113453056s завантаження первинного ntfs

Відмітьте кінцевий сектор і додайте 1. Напр. 113455104. Зверніть увагу на це число для кроку 3.

  1. Оскільки хак працює на одному файлі, попередньо розміщеному (тип 2), vmdks (не пробували для декількох типів файлів), ми спочатку конвертуємо оброблюваний в попередньо розміщений. Нам тимчасово знадобиться розділ з фізичним простором як максимальний розмір пристрою. (наприклад, 150 Гб).

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

  2. Тепер складна частина, для попередньо виділеного диска має бути 2 vmdks

    disk.vmdk disk-flat.vmdk

    перший має довжину лише KB, а останній містить дані. Відкрийте перший (disk.vmdk), поки робоча станція VMWare вимкнена , текстовий редактор (моя пропозиція Notepad ++). Знайдіть рядок

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

    Так, ви отримаєте бал, друге поле - це кількість секторів, виділених для пристрою. У якості перевірки помножте на 512 і знайдіть розмір у байтах, а потім розділіть на 1073741824 (1024 ** 3), щоб знайти розмір у ГБ. Це має бути розмір попереднього пристрою.

    Тепер замініть це число на зазначене число на кроці першого та збережіть файл. УВАГА : Тут є помилка, і ви можете закінчити обрізку фактичних даних, що використовуються у файловій системі. (Але ми змінили розмір fs на початку пристрою і зробили правильні та безпечні розрахунки, правильно?)

  3. До цих пір жодних даних ще не торкнулося. Зробіть цей останній крок, щоб фактично обрізати розширення. Ми будемо використовувати функцію перейменування vmware-vdiskmanager для відтворення vmdk з його розміром, який тепер оброблений.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.