суббота, 19 сентября 2009 г.

ESX(i) vmdk shrink

Как уменьшить размер vmdk файла - How to Shrink a VMDK file in ESX.
Суть:

Открываем disk.vmdk. Видим там что то вроде
# Extent description
RW 52428800 VMFS “foo-flat.vmdk”

Умножением RW на 512 получаем размер диска:
52428800 * 512 = 26 843 545 600 (25.6 ГБ).

Например, хотим уменьшить диск до 12 ГБ. Для этого меняем disk.vmdk с помощью текстового редактора (vi или nano):
# Extent description
RW 12582912 VMFS “foo-flat.vmdk”

Теперь делаем Storage VMotion или Clone этой ВМ, и после этой операции диск становится нужного размера.
Если у нас нет vCenter, т.е. эти операции недоступны, можно склонировать этот диск из командной строки:
# vmkfstools -i disk.vmdk disk_1.vmdk

Я попробовал.
WinXP до:
vmdk_shrink_1

Сделал по инструкции, чтобы уменьшить диск до 3 ГБ.

WinXP после:
disk_shrink_2

Может быть, экспериментировать на системном диске это плохая идея?

Напомню, что работающая альтернатива этому способу это использование VMware Converter для переконфигурирования ВМ. В частности, конвертор способен корректно уменьшить размер диска.

UPD.
попробовал на не системном диске для Windows Server 2008. Тоже убило раздел:
до:
shrink_2008_1
после:
shrink_2008_2

14 комментариев:

  1. я подозреваю, что плохая идея — это уменьшать размер *диска* до того, как ты уменьшил размер *раздела* на нём ;)

    в XP для этого нету встроенных средств, придётся использовать что-то вроде Norton PartitionMagic или Acronis DiskDirector. В Висте и старше можно сделать прямо из «управления дисками» (или diskpart) — если, конечно, на разделе есть свободное место.

    потому что, как видно на скриншотах, с размером *диска* проблем нет — он действительно уменьшился =). А вот разделу на нём сильно поплохело.

    если я ничего не путаю, то у NTFS в середине раздела находятся какие-то жизненно важные структуры. А уменьшив диск больше, чем на половину (с 5 Гб от 2 Гб), ты эту середину откусил тоже.

    ОтветитьУдалить
  2. ну я согласен.

    интересно, а дефрагментация нужна?

    ОтветитьУдалить
  3. ну если ты и так сможешь уменьшить размер раздела — то думаю, что после этого дерфгаментация уже не нужна. (По крайней мере, для решения данной конкретной задачи).

    я бы сделал дефрагментацию до того, как стал уменьшать раздел. Это, с одной стороны, может сократить время выполнения операции по уменьшению раздела, а с другой — поможет убедиться, что данные на диске будут сложены как следует (с точки зрения ФС), а не как попало (как взбрело в голову программе-редактору разделов). С третьей стороны, встроенные средства уменьшения размера раздела (в висте и старше) позволяют откусить не всё свободное метро, а только его часть. В чём состоит логика — я не разбирался. Но подозреваю, что они позволяют откусить только самый хвост без данных. Т.е. в этом случае дефрагментация поможет откусить кусок побольше. В конце концов, если ты планируешь делать дефрагментацию в ближайшем будущем — то следует помнить, что для успеха этой операции нужно какое-то свободное место. Поэтому лучше делать дефрагментацию в тот момент, когда этого места ещё много — т.е. до уменьшения раздела и диска =)

    ОтветитьУдалить
  4. в общем, метод если и применим, то только лишь если очень хочется уменьшить размер диска без выключения ВМ.
    Иначе проще и надежне воспользоваться ковертором.

    ОтветитьУдалить
  5. ну без выключения всяко не получится. Ведь операция клонирования ВМ или диска, как я понимаю, возможна только в оффлайне.

    и даже если мы произведём её в онлайне (?) — всё равно, потом надо будет включить копию, а оригинал потушить. И это будет даунтайм. И что в таком случае будет с данными, которые были записаны на диск после начала клонирования, но перед выключением оригинала?

    с конвертором есть другая проблема. Во-первых, его надо ещё скачать и установить куда-то. Во-вторых, его функционал, по-моему, — всё-таки некий overkill для такой задачи. Т.е. если мне надо всего лишь уменьшить один диск — я бы предпочёл сначала попробовать описанный здесь метод. Мне кажется, что с учётом поправки об необходимости предварительного уменьшения раздела, всё должно работать.

    ОтветитьУдалить
  6. чтобы без выключения уменьшить vmdk можно сделать Storage VMotion.

    По поводу функционала конвертора - переконфигурирование ВМ это штатная функция, одна из многих. Я это к тому, что у кого то он будет иметься так и так.

    И потом, установка конвертора делается один раз,

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

    ОтветитьУдалить
  7. ну я поэтому и говорю, что если мне нужно уменьшить один диск один раз, и при этом конвертора у меня ещё нету — то проще будет этот метод, чем искать, скачивать и ставить конвертор. Если он уже есть — тогда, наверное, конвертор проще.

    ещё один минус конвертора (и storage vmtion тоже) — это если у ВМ много дисков, а уменьшить надо только один. В результате копироваться будут все. Это трата времени и места (пусть временно). А если использовать этот метод (с vmkfstools -i) — копируем только тот диск, который нужно.

    а вот насчёт надёжности — это самый спорный момент. Т.е. понятно, что вероятность сбоя в обоих случаях минимальна. Но всё-таки.

    уменьшение раздела (в висте и старше) — встроенная операция. Дальше копирование диска производится побайтово 1:1, т.е. никто не лезет в содержимое нашего диска своими грязными лапами. Клонирование ничего не знает про ФС и ему это не нужно.

    А в случае с конвертером если он сам «на лету» меняет размер диска — это значит, что он переупорядочивает данные на диске, производит что-то вроде оффлайновой дефрагментации. Для этого надо очень хорошо понимать, как работает ФС. У меня были случаи, когда всякие умные утилиты клонирования дисков (уже не помню, какие) нормально переносили обычные файлы, но при этом портили всякие хитрые функции NTFS вроде Junction Points или хардлинков. Ну то есть они пытались как-то оптимизировать процесс, и переносили не данные побайтово, а только файлы. И в результате забирали только то, о чём они знали.

    В общем, если есть выбор — я бы предпочёл доверять встроенным средствам. Т.е. каждый делает то, в чём разбирается лучше всего. Сначала ОС сама уменьшает свой раздел, затем vmkfstools тупо копирует байты и ничего не делает с ФС.

    ОтветитьУдалить
  8. при Storage VMotion можно мигрировать один какой то диск.

    ОтветитьУдалить
  9. ну тогда да, это должно быть удобно.

    мне, кстати, всегда было интересно — почему встроенными средствами ESX нельзя уменьшить размер диска, а только увеличить. Ведь если ОС это поддерживает (а она поддерживает, раз сама умеет уменьшать размер раздела) — то никакой опасности в этом нету.

    ОтветитьУдалить
  10. а vmware workstation умеет уменьшать раздел, и если он лежит например на NFS может проще ей ?

    ОтветитьУдалить
  11. >почему встроенными средствами ESX нельзя уменьшить размер диска, а только увеличить

    Потому что ESX не лезет внутрь гостевой ОС.

    >Ведь если ОС это поддерживает (а она поддерживает, раз сама умеет уменьшать размер раздела)

    Возможно, скоро мы сможем это увидеть на практике. Действительно, один из самых популярных вопросов на форуме: как мне уменьшить vmdk с Windows.

    ОтветитьУдалить
  12. >уменьшение раздела (в висте и старше) — встроенная операция

    Если не брать Linux и прочие Solaris и FreeBSD, то какова доля ВМ с Vista, Win 7 и Win 2008 среди ВМ?

    ОтветитьУдалить
  13. Все работает, если изначально уменьшить размер раздела.

    ОтветитьУдалить