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

27

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

В настоящее время размер файла составляет 20 ГБ, но он растет с каждым днем, хотя я не храню ничего нового в гостевой файловой системе.

Я часами искал способ уменьшить максимальный размер этого диска , чтобы он никогда не доходил до 150 ГБ (я бы хотел установить ограничение на 30 ГБ и посмотреть, что произойдет, когда виртуальная машина достигнет этого размера) ,

Что я пробовал:

  • Преобразование образа диска с помощью VMware Converter → это не работает, инструмент позволяет только создать полную копию или «связанный клон».
  • Создание новой пустой виртуальной машины нужного размера, чтобы скопировать данные объемом 20 ГБ на новый .vmdk → Я не могу найти способ выполнить копирование или даже подключить новый диск к моей существующей виртуальной машине (чтобы я выполнял копирование, используя гостевая ОС).
  • Загляните в файл .vmx, чтобы проверить, не был ли установлен максимальный размер в виде обычного текста (это не так).

Хотя эта задача технически кажется довольно простой (здесь нет сложного сокращения, а просто изменение предела размера), но у меня действительно нет идей ...

Есть ли решение вообще?

Себастьен
источник
1
Поскольку разделы на виртуальном диске, скорее всего, создаются для заполнения объявленного пространства, «хитрое сжатие» действительно имеет место.
Даниэль Б

Ответы:

25

Обычная процедура для уменьшения размера диска .vmdk:

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

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

  3. Сожмите диск (это может занять довольно много времени).
    VMware Workstation: Меню 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 .

harrymc
источник
2
Это, однако, не уменьшает размер внутреннего диска.
Даниэль Б
@DanielB: нет, это не уменьшает максимальный размер, только физический размер. Уменьшение максимального размера может быть опасным, поскольку некоторые ОС не могут загружаться без свободного места на системном диске.
harrymc
3
Это полезный метод, который я использовал, чтобы уменьшить пространство, занимаемое VMDK. Однако это не полностью решает мою проблему, так как, если я хочу держать VMDK всегда под, скажем, 30 ГБ, мне придется периодически повторять операцию (что действительно занимает много времени).
Себастьян
Если диск всегда можно уменьшить до нужного размера, а это означает, что описанная выше процедура всегда работает для уменьшения размера, вы можете ограничить размер в будущем, преобразовав диск в фиксированный размер.
harrymc
1
@harrymc Преобразование диска в фиксированный размер будет соответствовать моим потребностям. Я просто не нашел способ сделать это с VMWare Workstation или Converter.
Себастьян
6

В настоящее время размер файла составляет 20 ГБ, но он растет с каждым днем, хотя я не храню ничего нового в гостевой файловой системе.

Поскольку ОС и ее прикладные программы временно используют много места на диске для временных файлов, файлов подкачки, файлов спящего режима и файлов конфигурации. Как только они будут удалены в зависимости от политики ОС, в следующий раз будут использоваться новые сектора на диске. ВМ выделяет хранилище для виртуального диска с реального диска всякий раз, когда в виртуальном диске используется новый сектор. Поскольку сектор на виртуальном диске всегда не используется гостевой ОС, виртуальная машина считает, что она используется диском, и освобождает пространство от реального диска, что приведет к увеличению образа виртуального диска.

Название вашего вопроса менее вероятно будет решено, так как использование такого инструмента без проверки изображения может привести к полной катастрофе. Но вы можете предотвратить рост изображения за 30 ГБ. Есть много способов достижения цели.

A. Используйте только 30 ГБ разделов и оставьте оставшееся свободное место. Если вы уже разбили на разделы больше места, вам нужно уменьшить / удалить его, создать новый раздел, затем сбросить его с нулями и пробить, как описано в @harrymc. Поскольку пространство в неразмеченной области никогда не используется, виртуальный диск никогда не будет превышать 30 ГБ.

Б. Создайте снимок и восстановите его после использования. После создания снимка виртуальной машины данные сохраняются в новый файл образа. Если вы восстановите его, не сохраняя и не создавая новые снимки, все измененные данные будут удалены, и, таким образом, освободится место.

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

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

Тотти
источник
2

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

Вам нужно будет установить сумму всех разделов не более 30 ГБ. Вы должны будете уменьшить размеры перегородок вниз по мере продвижения. На этом сайте есть много документации о том, как сократить разделы, поэтому я не буду повторять это здесь снова.

Почему вы создали 150 ГБ (тонкий раздел), если у вас не было места для его поддержки в максимальном размере? Похоже, это просто напрашивается на неприятности.

Якорь,
источник
5
Я лично не создавал ВМ, вот почему.
Себастьян
Как мне сжать сам диск? У меня есть разделы на диске, уменьшенные, но, vdiskmanager.exe -k [VMDK PATH]как предложено в другом ответе, диск не уменьшается.
Аарон Франке
Проблема, которая четко не задокументирована, заключается в том, как изменить размер устройства vmdk (после изменения размера раздела, конечно). Также @mdpc я думаю, что ваш ответ не является конструктивным. Есть много случаев, когда вам нужно изменить размер данных в существующем виртуальном компьютере, поэтому нет смысла указывать пальцем на то, что виртуальная машина должна быть создана правильно.
Басос
2

Существует обходной способ использования VMWare Converter для создания новой VM и меньшего размера VMDK, а затем преобразование исходного VMDK во вновь созданный меньший VMDK.

Термоусадочная ВМДК

Подробные шаги здесь .

Обратите внимание, что любые изменения размера VMDK также потребуют соответствующего обновления таблицы разделов .

hanxue
источник
Это виртуальная машина VMWare Workstation, и эти расширенные параметры копирования не предоставляются Converter для этого типа виртуальных машин. Это просто не позволит мне изменить размер диска.
Себастьян
2

Эта работа только для разреженного VMDK (без предварительного выделения). Перед сжатием необходима дефрагментация, чтобы гарантировать, что используемое пространство является непрерывным.

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

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

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

Чтобы сжать виртуальный диск:

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

В Windows:

Дважды щелкните значок Инструменты VMware на панели задач или выберите Пуск> Панель управления> Инструменты VMware.

В Linux:

Откройте терминал и выполните эту команду:

VMware-инструментов

Примечание. В рабочей станции 9.x (Windows) и выше сжатие выполняется автоматически при очистке диска. Поэтому этот параметр удален из панели инструментов VMware. Зайдите в ВМ> Управление> Очистить диски. Это недоступно в Linux-версии VMware Workstation 9.x и выше.

Перейдите на вкладку «Сокращение». Выберите диск, который вы хотите сжать. Нажмите «Приготовиться к сжатию», затем следуйте инструкциям на экране. Предостережение. Не выключайте виртуальную машину или хост-компьютер, пока диск сокращается. Также не пытайтесь отменить процесс. Прерывание этого процесса может нанести непоправимый ущерб вашему виртуальному диску, и вы не сможете снова запустить виртуальную машину.

Из базы знаний VMWare

Джалал Мостафа
источник
Чтение существующих ответов сначала позволяет избежать дублирования ответов.
harrymc
1
Извините, в любом случае я разместил его с полной процедурой и источником. Это может помочь ему больше
Джалал Мостафа
Не отвечает на оп тоже. ОП хочет уменьшить максимальный предел, а не текущий размер.
Рю
2

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

Итак, шаги для сжатия диска:

  1. Изменить размер раздела на диске через ОС или через подходящий live CD
  2. Измените размер устройства vmdk, тщательно выбирая границу, чтобы не сократить пространство для использования. Вы всегда можете оставить немного больше места в образе, чем это на самом деле нужно.

Первый шаг включает процедуру изнутри виртуальной машины и зависит от гостевой ОС. Второй шаг может быть поддержан командами vmware, но я не нашел глубокого способа сделать это. Таким образом, хакерский подход.

Вот не очень быстрое (из-за большого перемещения данных) и грязное решение, которое помогло. Нам нужно будет иметь доступное пространство, равное максимальному размеру устройства .

ВНИМАНИЕ: Не забудьте сделать резервную копию важных данных перед любой операцией !!

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

    Из гостевой ОС: windows 7

    1. Вы можете использовать онлайн-функцию изменения размера. Хорошей идеей будет сначала выполнить дефрагментацию диска из квестовой ОС.
    2. Запустите diskmgmt.msc, выберите раздел (том) на диске, размер которого вы хотите изменить, щелкните правой кнопкой мыши -> Уменьшить том. В появившемся диалоговом окне уменьшите размер в соответствии с вашими требованиями. Обратите внимание, что, поскольку раздел используется (если это системный диск или сильно фрагментирован), вы не сможете восстановить большую часть свободного пространства. Предоставление оставить дополнительное свободное место.
    3. Теперь мы хотим знать разделы, заканчивающиеся сектором диска (или байтом). Предполагая, что это единственный раздел на устройстве, мы берем размер тома, который отображается на моем компьютере-> выберите диск-> щелкните правой кнопкой мыши-> свойства-> Емкость: запишите число в байтах. (например, в моем примере 107371032576 для 99,9 ГБ). Добавьте несколько сотен мег для безопасности (+204800) (например, 107371237376). Чтобы быть уверенным, что нам не нужно добавлять что-то пропущенное, мы можем использовать утилиту diskpart cmd line, чтобы найти смещение раздела от начала устройства. запустите diskpart, затем: список дисков, выберите идентификатор диска , список частей, выберите идентификатор части , подробно. Пример:

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

    Раздел 1

    Смещение в байтах: 1048576

    Убедитесь, что вы добавили хотя бы это число к размеру диска. Теперь нам нужно преобразовать байты в сектора с делением на 512 и округлением вверх (потолок). Например, 209709448. Запишите этот номер для шага 3.

    Через живой CD: SystemResqueCD

    1. В качестве альтернативы вы можете использовать Resque CD, ( SystemResqueCD - мое предложение), загрузить загрузочный ISO, смонтировать его как виртуальное устройство CD на вашей виртуальной машине, загрузиться с CD (нажав клавишу Esc на экране загрузки VMWare, вам может потребоваться попытаться несколько раз, как это появляется очень скоро). При достижении командной строки введите: startx, это, мы надеемся, приведет вас к графическому интерфейсу.
    2. Попав на рабочий стол systemresque, запустите gparted (например, из терминала). Найдите раздел, размер которого нужно изменить (это должно быть чисто демонтировано, если вы сомневаетесь, сделайте скандик из гостевой операционной системы). Сделайте изменение размера, тщательно планируя свои потребности в пространстве.
    3. Снова нам нужно найти конечное смещение в секторах (или байтах) раздела. Откройте терминал и напишите parted [ device ], затем unit s, распечатайте. Например

Номер Начало Конец Размер Тип Файловая система Флаги

1 2048s 113455103s 113453056s основная загрузка ntfs

Отметьте конечный сектор и добавьте 1. Например, 113455104. Запишите этот номер для шага 3.

  1. Поскольку хак работает с предварительно распределенными vmdks одного типа (тип 2) (не пробовал с несколькими типами файлов), мы сначала преобразуем растущий в предварительно выделенный. Нам временно понадобится раздел с физическим пространством в качестве максимального размера устройства. (например, 150 ГБ).

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

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

    disk.vmdk disk-flat.vmdk

    первый имеет длину всего в КБ, а второй, содержащий данные, расширяется. Откройте первый (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

basos
источник
0

Для гостевой ОС vmware linux запустите:

sudo vmware-toolbox-cmd disk shrinkonly

Том Хейл
источник