У меня есть файл на 150 ГБ (.vmdk, без предварительного выделения), где хранится моя виртуальная машина.
В настоящее время размер файла составляет 20 ГБ, но он растет с каждым днем, хотя я не храню ничего нового в гостевой файловой системе.
Я часами искал способ уменьшить максимальный размер этого диска , чтобы он никогда не доходил до 150 ГБ (я бы хотел установить ограничение на 30 ГБ и посмотреть, что произойдет, когда виртуальная машина достигнет этого размера) ,
Что я пробовал:
- Преобразование образа диска с помощью VMware Converter → это не работает, инструмент позволяет только создать полную копию или «связанный клон».
- Создание новой пустой виртуальной машины нужного размера, чтобы скопировать данные объемом 20 ГБ на новый .vmdk → Я не могу найти способ выполнить копирование или даже подключить новый диск к моей существующей виртуальной машине (чтобы я выполнял копирование, используя гостевая ОС).
- Загляните в файл .vmx, чтобы проверить, не был ли установлен максимальный размер в виде обычного текста (это не так).
Хотя эта задача технически кажется довольно простой (здесь нет сложного сокращения, а просто изменение предела размера), но у меня действительно нет идей ...
Есть ли решение вообще?
virtual-machine
vmware-workstation
Себастьен
источник
источник
Ответы:
Обычная процедура для уменьшения размера диска .vmdk:
Дефрагментируйте диск через гостя, выбирая режим дефрагментации, который объединяет пустое пространство в конце диска. Для гостя Windows вы должны очистить корзину и отключить гибернацию и пейджинг, возвращая их после завершения дефрагментации.
Обнулить все неиспользуемое пространство на диске.
Для Windows используйте SDelete :
sdelete -c
.Для Linux:
dd if=/dev/zero of=/mytempfile && rm -f /mytempfile
.Сожмите диск (это может занять довольно много времени).
VMware Workstation: Меню VM / Управление / Очистка дисков.
Или использовать:
vmware-vdiskmanager.exe -k [VMDK PATH]
.для ESX:
vmkfstools --punchzero [VMDK PATH]
.Преобразование диска из растущего в предварительно выделенный может остановить его рост. Это можно сделать с помощью vmware-vdiskmanager с
-t
параметром, значения которого:Следующая команда преобразует .vmdk из растущего в предварительно выделенный:
Если вы хотите изменить размер диска, это следует сделать, пока диск все еще находится в расширяемом формате (примеры здесь ).
Для получения дополнительной информации см. Руководство пользователя Virtual Disk Manager .
источник
Поскольку ОС и ее прикладные программы временно используют много места на диске для временных файлов, файлов подкачки, файлов спящего режима и файлов конфигурации. Как только они будут удалены в зависимости от политики ОС, в следующий раз будут использоваться новые сектора на диске. ВМ выделяет хранилище для виртуального диска с реального диска всякий раз, когда в виртуальном диске используется новый сектор. Поскольку сектор на виртуальном диске всегда не используется гостевой ОС, виртуальная машина считает, что она используется диском, и освобождает пространство от реального диска, что приведет к увеличению образа виртуального диска.
Название вашего вопроса менее вероятно будет решено, так как использование такого инструмента без проверки изображения может привести к полной катастрофе. Но вы можете предотвратить рост изображения за 30 ГБ. Есть много способов достижения цели.
A. Используйте только 30 ГБ разделов и оставьте оставшееся свободное место. Если вы уже разбили на разделы больше места, вам нужно уменьшить / удалить его, создать новый раздел, затем сбросить его с нулями и пробить, как описано в @harrymc. Поскольку пространство в неразмеченной области никогда не используется, виртуальный диск никогда не будет превышать 30 ГБ.
Б. Создайте снимок и восстановите его после использования. После создания снимка виртуальной машины данные сохраняются в новый файл образа. Если вы восстановите его, не сохраняя и не создавая новые снимки, все измененные данные будут удалены, и, таким образом, освободится место.
C. Создайте новый виртуальный диск объемом не более 30 ГБ, добавьте его в качестве нового диска в текущую виртуальную машину, переместите все данные на новый виртуальный диск с помощью инструмента резервного копирования. Вы можете использовать живой Linux для клонирования.
Рекомендуемый вариант - A
источник
Почему бы просто не установить размер используемого диска в 30 ГБ из 150 ГБ.
Вам нужно будет установить сумму всех разделов не более 30 ГБ. Вы должны будете уменьшить размеры перегородок вниз по мере продвижения. На этом сайте есть много документации о том, как сократить разделы, поэтому я не буду повторять это здесь снова.
Почему вы создали 150 ГБ (тонкий раздел), если у вас не было места для его поддержки в максимальном размере? Похоже, это просто напрашивается на неприятности.
источник
vdiskmanager.exe -k [VMDK PATH]
как предложено в другом ответе, диск не уменьшается.Существует обходной способ использования VMWare Converter для создания новой VM и меньшего размера VMDK, а затем преобразование исходного VMDK во вновь созданный меньший VMDK.
Подробные шаги здесь .
Обратите внимание, что любые изменения размера VMDK также потребуют соответствующего обновления таблицы разделов .
источник
Эта работа только для разреженного VMDK (без предварительного выделения). Перед сжатием необходима дефрагментация, чтобы гарантировать, что используемое пространство является непрерывным.
Из базы знаний VMWare
источник
Ответ @harrym довольно хороший, но на самом деле он не отвечает на вопрос. ОП хочет уменьшить максимальный размер . Проблема в том, что гипервизор не знает, сколько из представленного размера (или максимального размера) действительно используется ОС. Уплотнение (vmware-vdiskmakager -k) применяется к растущему vmdk. Он ничего не делает по заранее выделенному.
Итак, шаги для сжатия диска:
Первый шаг включает процедуру изнутри виртуальной машины и зависит от гостевой ОС. Второй шаг может быть поддержан командами vmware, но я не нашел глубокого способа сделать это. Таким образом, хакерский подход.
Вот не очень быстрое (из-за большого перемещения данных) и грязное решение, которое помогло. Нам нужно будет иметь доступное пространство, равное максимальному размеру устройства .
ВНИМАНИЕ: Не забудьте сделать резервную копию важных данных перед любой операцией !!
Найдите способ изменить размер гостевого раздела и оставить нераспределенное пространство на конце устройства. Два примера:
Из гостевой ОС: windows 7
Убедитесь, что вы добавили хотя бы это число к размеру диска. Теперь нам нужно преобразовать байты в сектора с делением на 512 и округлением вверх (потолок). Например, 209709448. Запишите этот номер для шага 3.
Через живой CD: SystemResqueCD
Отметьте конечный сектор и добавьте 1. Например, 113455104. Запишите этот номер для шага 3.
Поскольку хак работает с предварительно распределенными vmdks одного типа (тип 2) (не пробовал с несколькими типами файлов), мы сначала преобразуем растущий в предварительно выделенный. Нам временно понадобится раздел с физическим пространством в качестве максимального размера устройства. (например, 150 ГБ).
vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk
Теперь самая сложная часть, для предварительно выделенного диска должно быть 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 в начале устройства и сделали правильные и безопасные вычисления, верно?)
До сих пор никаких данных не трогали. Сделайте этот последний шаг, чтобы фактически обрезать удлинители. Мы будем использовать функцию переименования vmware-vdiskmanager, чтобы воссоздать vmdk с его обрезанным размером.
vmware-vdiskmanager.exe -n destvmdk sourcevmdk
источник
Для гостевой ОС vmware linux запустите:
sudo vmware-toolbox-cmd disk shrinkonly
источник