Толстое и тонкое выделение: в чем разница?

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

Толстое выделение

Толстое выделение – это тип предварительного выделения места для хранения. При толстом выделении весь объем виртуальной дисковой емкости предварительно выделяется на физическом носителе при создании виртуального диска. Толсто-выделенный виртуальный диск использует все выделенное для него пространство на хранилище данных с самого начала, поэтому это пространство недоступно для использования другими виртуальными машинами.

Существуют два подтипа толсто-выделенных виртуальных дисков:

  • A Lazy zeroed disk is a disk that takes all of its space at the time of its creation, but this space may contain some old data on the physical media. This old data is not erased or written over, so it needs to be “zeroed out” before new data can be written to the blocks. This type of disk can be created more quickly, but its performance will be lower for the first writes due to the increased IOPS (input/output operations per second) for new blocks;
  • Диск с жадным заполнением нулями – это диск, который получает всё необходимое пространство уже на момент его создания, и пространство очищается от любых предыдущих данных на физическом носителе. Создание дисков с жадным заполнением нулями занимает больше времени, потому что нули записываются на всём диске, но их производительность быстрее при первых записях. Этот подтип толсто-выделенного виртуального диска поддерживает функции кластеризации, такие как отказоустойчивость.

По соображениям безопасности данных, жадное зануление более распространено, чем ленивое зануление с толстыми виртуальными дисками. Почему? При удалении VMDK данные на хранилище данных не удаляются полностью; блоки просто помечаются как доступные, пока операционная система не перезапишет их. Если вы создадите жадно зануленный виртуальный диск на этом хранилище данных, область диска будет полностью стерта (т.е. занулена), что предотвратит возможность восстановления предыдущих данных даже специализированным сторонним программным обеспечением у лиц с плохими намерениями.

Тонкое выделение

Тонкое выделение – это еще один тип предварительного выделения памяти. Тонко-выделенный виртуальный диск потребляет только ту память, которая ему изначально необходима, и увеличивается по мере необходимости.

Например, если вы создадите новый тонко-выделенный виртуальный диск на 30 ГБ и скопируете на него 10 ГБ файлов, размер результирующего файла VMDK будет 10 ГБ, в то время как у вас был бы файл VMDK размером 30 ГБ, если бы вы выбрали использовать толстый виртуальный диск.

Тонкие виртуальные диски, созданные с использованием тонкой инициализации, быстро создаются и полезны для экономии места на хранилище. Производительность тонкого диска не выше, чем у диска с ленивой инициализацией (lazy zeroed thick), поскольку для обоих типов дисков нули должны быть записаны перед записью данных в новый блок. Обратите внимание, что при удалении данных из тонкого виртуального диска размер диска не уменьшается автоматически. Это происходит потому, что операционная система удаляет только индексы из таблицы файлов, которые ссылаются на тело файла в файловой системе; она помечает блоки, которые принадлежали “удаленным” файлам, как свободные и доступные для записи новых данных. Вот почему мы видим удаление файлов как мгновенное. Если бы это было полное удаление, при котором нули записывались бы на блоки, которые занимали удаленные файлы, это заняло бы примерно столько же времени, сколько и копирование этих файлов. См. упрощенную иллюстрацию ниже.

Проблемы, которые могут возникнуть при использовании тонко-провиженных виртуальных дисков

Использование тонко-провиженных виртуальных дисков не всегда проходит гладко. Существуют некоторые проблемы, о которых вы должны быть осведомлены и готовы к их решению.

Давайте рассмотрим пример, который делает виртуальные машины непригодными к использованию. Например, у нас есть хранилище данных объемом 20 ГБ с тремя виртуальными машинами, работающими на нем. У каждой виртуальной машины установлен тонкопрофилированный виртуальный диск с максимальным размером 10 ГБ. (Эта практика называется “перепроектированием” – мы назначаем виртуальным дискам больше места, чем они физически могут занять. Это делается часто, так как это позволяет масштабировать систему, добавляя больше физического хранилища по мере необходимости.) Размер файла каждого виртуального диска будет увеличиваться при добавлении данных, пока на хранилище данных не останется свободного места. Ситуация становится критической, когда на хранилище остается всего 1 ГБ свободного места, например, когда ВМ1 занимает 8 ГБ, ВМ2 – 7 ГБ, а ВМ3 – 4 ГБ.

Обычные методы удаления файлов в виртуальных машинах не помогут уменьшить размер тонкопрофилированных виртуальных дисков. Если на любую из этих виртуальных машин будет записано более 1 ГБ новых данных, все три из них выйдут из строя, и вам придется перенести одну или несколько виртуальных машин на другое хранилище данных, чтобы восстановить их состояние работы.

Как уменьшить размер тонкопрофилированного виртуального диска после удаления файлов

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

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

Уменьшение тонкопровиженных дисков VMware в Linux

Давайте рассмотрим пример: у нас есть файл VMDK размером 10,266,496 КБ (10 ГБ) (мы узнали его размер, перейдя в каталог на хранилище данных, где расположена наша виртуальная машина), и мы хотим уменьшить виртуальный диск, на котором установлена гостевая ОС Linux. Мы можем попытаться удалить ненужные файлы на этом виртуальном диске. Однако Linux не автоматически обнуляет блоки после удаления файлов; вам придется сделать это самостоятельно. Вы можете сделать это, используя утилиту dd (дубликатор данных) для копирования и преобразования данных. Этот инструмент доступен на всех системах Linux.

Примечание: Перед запуском утилиты dd необходимо убедиться, что хранилище данных имеет достаточную емкость для ее использования (например, для сервера ESXi вы можете проверить емкость хранения в разделе хранения клиента vSphere – перейдите к Настройки > Хранение).

Давайте воспользуемся утилитой dd.

  1. Сначала мы проверяем свободное место на гостевой виртуальной машине Linux с помощью команды df -h:

    root@test-virtual-machine:/# df -h

    Мы получаем следующий вывод в консоли:

    Файловая система   Размер   Использовано   Доступно   Использовано%   Смонтировано на
    udev         469M   0      469M    0%     /dev
    tmpfs        99M    6,3M   92M     7%     /run
    /dev/sda7    17G    8,8G   6,4G    58%    /
    tmpfs        491M   116K   491M    1%     /dev/shm
    tmpfs        5,0M   4,0K   5,0M    1%     /run/lock
    tmpfs        491M   0      491M    0%     /sys/fs/cgroup
    /dev/sda1    945M   121M   760M    14%    /boot
    /dev/sda6    3,7G   13M    3,5G    1%     /var/log
    tmpfs        99M    36K    99M     1%     /run/user/1000
    

    Мы видим из этого вывода, что раздел / (root) содержит 8,8 ГБ файлов.

  2. Давайте удалим несколько гигабайт ненужных файлов в корневом разделе. Вот что мы видим в консоли, если запустим команду df -h /:

    Файловая система   Размер   Использовано   Доступно   Использовано%   Смонтировано на
    /dev/sda7    17G    4,7G   11G     31%    /

    Таким образом, наш корневой раздел теперь содержит 4,7 ГБ файлов. Однако, перейдя в каталог, где расположен наш файл VMDK, мы видим, что его размер все еще составляет 10 266 496 КБ (10 ГБ).

  3. Теперь мы собираемся заполнить свободное пространство нулями (в нашем случае мы заполним 10 ГБ из доступных 11 ГБ). Сначала мы набираем cd, а затем имя каталога, к которому примонтирован раздел, который необходимо обнулить (в нашем случае это cd /, потому что мы хотим перейти к корневому разделу). Затем мы запускаем следующую команду, изменяя переменные под наши нужды:

    dd bs=1M count=10240 if=/dev/zero of=zero

    В этой команде:

    • dd может быть выполнен только от имени суперпользователя.
    • bs устанавливает размер блока (например, bs=1M даст вам блок размером 1 мегабайт).
    • count указывает количество блоков, которые должны быть скопированы (по умолчанию dd будет продолжать работать вечно или до тех пор, пока не закончится ввод). В нашем случае 10 240 МБ – это количество свободного места, которое мы хотим заполнить нулями, так что количество блоков по 1 мегабайту равно 10240.
    • if означает «входной файл». Здесь нужно указать источник, из которого вы хотите скопировать данные. В нашем случае это /dev/zero – специальный файл (псевдоустройство), который предоставляет столько нулевых символов, сколько вы хотите прочитать из него.
    • of означает «выходной файл». Здесь задается место назначения, куда вы хотите записать/вставить свои данные (в нашем случае имя файла zero).

    После выполнения вышеуказанной команды размер нашего файла VMDK увеличивается. Вот вывод, который мы видим после успешного завершения команды:

    10240+0 записей в
    10240+0 записей из
    10737418240 байт (10 ГБ) скопировано, 59,4348 с, 181 МБ/с
    Команда успешно выполнена.

    Таким образом, теперь размер нашего файла VMDK составляет 11 321 856 КБ (10,8 ГБ), что означает его увеличение. Кроме того, если мы снова выполним команду df -h /, мы увидим следующее:

    Файловая система   Размер   Использовано   Доступно   Использование%   Монтирование
    /dev/sda7    17Г    15Г    569М    97%    /

    Это означает, что почти весь корневой раздел (т.е. 97%) занят. Это происходит потому, что мы заполнили большую часть ранее «доступного» пространства нулями. Теперь наша тонкопроводная виртуальная диск готова к уменьшению.

Примечание: Для выполнения уменьшения необходимо установить инструменты VMware.

  1. Для виртуальных машин, работающих на VMware ESXi или VMware Workstation, мы выполняем следующие две команды в гостевой операционной системе Linux.а) Чтобы убедиться, что раздел диска доступен, мы запускаем команду:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk list

    Это вывод, который мы видим в нашем случае (т.е. мы видим список доступных разделов):

    /
    /boot
    /var/log

    Корневой раздел присутствует, поэтому мы можем продолжить.б) Чтобы уменьшить раздел, мы запускаем следующую команду:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /

    Это вывод, который мы видим в нашем случае:

    Пожалуйста, игнорируйте любые предупреждения о дисковом пространстве во время процесса уменьшения.
    Прогресс: 100 [===========>]
    Уменьшение диска завершено.
    

    Теперь размер нашего уменьшенного файла VMDK составляет 5 323 456 КБ (то есть 5,08 ГБ – намного меньше, чем 10,8 ГБ, как было раньше).

Примечание: Если ваша гостевая виртуальная машина работает на сервере ESXi, после заполнения блоков нулями, вы можете выполнить следующие действия:

  1. Выключите виртуальную машину или отсоедините виртуальный диск, который вы хотите уменьшить.
  2. Подключитесь к хосту ESXi с помощью клиента SSH.
  3. Перейдите в папку виртуальной машины.
  4. Проверьте использование диска с помощью du -h.
  5. Выполните vmkfstools -K test-virtual-machine.vmdk.
  6. Повторно проверьте использование диска с помощью du -h.

Уменьшение тонких дисков VMware в Windows

Как и Linux, Windows не автоматически обнуляет блоки после удаления файлов. Чтобы иметь возможность обнулить свободное место на целевых дисках виртуальной машины Windows, вам необходимо скачать SDelete – бесплатную утилиту из набора Sysinternals Suite от Microsoft – и распаковать файлы из загруженного архива в c:\program files\sdelete

Затем выполните следующие шаги:

  1. Запустите cmd
  2. Перейдите в каталог, где находится SDelete. В нашем случае это: cd c:\program files\sdelete

  3. Для каждого раздела в консоли используйте команду sdelete -z. Вот что у нас есть в данном случае:

    sdelete -z c:
    sdelete -z d:

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

  4. Убедитесь, что инструменты VMware установлены на вашей виртуальной машине Windows. По умолчанию инструменты VMware устанавливаются в c:\program files\vmware\vmware tools\

    Перейдите в этот каталог, набрав:

    cd c:\program files\vmware\vmware tools\

  5. Чтобы просмотреть доступные разделы диска, введите:

    vmwaretoolboxcmd disk list

  6. Уменьшите размер разделов диска, которые вам нужны. В нашем случае мы выполнили команды:

    vmwaretoolboxcmd disk shrink c:\
    vmwaretoolboxcmd disk shrink d:\

    Подождите, пока программа завершит уменьшение диска.

Вы можете использовать этот метод для виртуальных машин, работающих на VMware ESXi или VMware Workstation.

Распределенный планировщик ресурсов хранилища VMware

Выше мы упомянули решение по уменьшению thin-провижен дисков вручную. Однако есть еще один способ управления виртуальными дисками (как thin-провижен, так и thick-провижен), если вы используете кластер хранилищ в vSphere. VMware предоставляет автоматическую миграцию виртуальных дисков в пределах кластера хранилищ для предотвращения переполнения дискового пространства, где расположены thin-провижен виртуальные диски, а также для балансировки ресурсов ввода/вывода.

Если у вас есть более одного общего datastore, подключенного к серверу ESXi, вы можете настроить Диспетчер ресурсов распределенного хранилища (Storage DRS). Storage DRS – это интеллектуальная функция vCenter Server для эффективного управления хранилищами VMFS и NFS, обеспечивающая автоматическое размещение и миграцию дисков виртуальных машин. Вы также можете установить Storage DRS в ручной режим, если предпочитаете одобрять рекомендации по миграции вручную.

Чтобы включить Storage DRS, выполните следующие шаги:

  1. Перейдите в кластер хранилищ в веб-клиенте vSphere.
  2. Перейдите в раздел vCenter > Кластеры хранилищ.
  3. Выберите ваш кластер хранилищ и нажмите Управление > Настройки > Сервисы > Storage DRS.
  4. Нажмите Изменить.
  5. Настройте параметры автоматизации, функции, связанные с вводом/выводом, и продвинутые параметры, которые вам необходимы.
  6. Нажмите OK, чтобы завершить.

Если в вашей среде vSphere нет кластеров хранилищ, выполните следующие шаги для создания и настройки нового кластера хранилищ:

  1. Перейдите к vCenter > Центры данных в веб-клиенте vSphere.
  2. Щелкните правой кнопкой мыши по вашему Центру данных и выберите Новый кластер хранилищ данных.
  3. Введите имя вашего кластера хранилищ данных и установите флажок рядом с «Включить хранилище DRS».
  4. Выберите требуемые настройки автоматизации, функции, связанные с вводом-выводом, и дополнительные параметры.
  5. Нажмите OK, чтобы завершить.

Заключение

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

Вы можете создать виртуальный диск с большим максимальным размером, чем доступное физическое пространство (“перевыделение ресурсов”) и добавить больше физического хранилища в будущем, но помните, что если физическое дисковое пространство заполнится и тонко выделенный диск не сможет увеличиться для размещения дополнительных данных, ваши виртуальные машины станут непригодными к использованию – поэтому не забывайте следить за количеством свободного места. Мы также рассмотрели методы уменьшения тонко выделенных виртуальных дисков VMware, если вы предпочитаете не добавлять больше хранилища и нуждаетесь в уменьшении занимаемого пространства.

Source:
https://www.nakivo.com/blog/thick-and-thin-provisioning-difference/