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


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

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

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

То, что я пробовал:

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

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

Есть ли решение?


23
2018-06-25 18:45


происхождения


Поскольку разделы на виртуальном диске, скорее всего, созданы для заполнения рекламируемого пространства, «сложное сокращение» действительно задействовано. - Daniel B


ответы:


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

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

  2. Zero все неиспользуемое пространство на диске.
    Для использования в 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],

Преобразование диска из растущего в prealocated может остановить его рост. Это можно сделать с помощью 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 из growable в preallocated:

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

Если вы хотите изменить размер диска, это нужно сделать, пока диск по-прежнему в готовом формате (примеры Вот).

Для получения дополнительной информации см. Руководство пользователя виртуального диска,


18
2018-04-30 08:06



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


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

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

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

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

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

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

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


6
2018-05-02 12:44





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

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

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


2
2018-06-25 18:58



Именно поэтому я лично не создал виртуальную машину. - Sébastien
Как уменьшить размер диска? У меня есть разделы в диске, которые сокращаются, но vdiskmanager.exe -k [VMDK PATH] как предложено в другом ответе, не сжимает диск. - Aaron Franke
Проблема, которая четко не документирована, заключается в том, как изменить размер устройства vmdk (после изменения размера раздела). Также @mdpc я считаю, что ваш ответ не является конструктивным. Существует много случаев, когда вам нужно изменить размер данных на существующий vm, поэтому нет смысла указывать пальцем, что виртуальная машина должна быть создана правильно. - basos


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

Shrink VMDK

Подробные шаги Вот,

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


2
2018-06-25 20:33



Это VMWare Workstation VM, и эти расширенные опции копирования не предлагаются конвертером для этого типа виртуальной машины. Это просто не позволит мне изменить размер диска. - Sébastien


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

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

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

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

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

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

В Windows:

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

В Linux:

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

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

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

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

Из База знаний VMWare


2
2018-05-04 17:50



Чтение существующих ответов сначала позволяет избежать дублирования ответов. - harrymc
Извините, в любом случае я отправил его с полной процедурой и источником. Это может помочь ему больше - Jalal Mostafa


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

Таким образом, шаги для сжатия диска:

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

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

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

ПРЕДУПРЕЖДЕНИЕ. Не забудьте выполнить резервное копирование важных данных перед любой операцией!

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

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

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

    DISKPART> деталь детали

    Раздел 1

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

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

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

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

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

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

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

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

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

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

    disk.vmdk диск-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


1
2018-02-13 11:19





Для гостевой ОС vmware linux выполните:

sudo vmware-toolbox-cmd disk shrinkonly


0
2017-08-19 03:43