24

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

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

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

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

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

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

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

7 ответов7

21

Обычная процедура уменьшения размера диска .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.

6

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

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

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

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

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

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

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

3

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

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

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

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

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

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

В Windows:

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

В Linux:

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

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

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

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

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

2

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

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

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

2

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

Сжатие ВМДК

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

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

1

Ответ @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

0

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

sudo vmware-toolbox-cmd disk shrinkonly

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .