VDO. Часть 2 – Запускаем, смотрим

В прошлой части мы рассмотрели основные моменты, касающиеся VDO, а также немного затронули момент сайзинга.

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

В качестве тестового стенда используется виртуальная машина под управлением CentOS 8.1, с 4 vCPU и 16GB оперативной памяти.

В виртуальную машину добавлен диск размером 100GB, на котором будут проходить опыты.

В первую очередь обновим систему и перезагрузимся, для того чтобы начать работу на самом доступном в репозитории ядре.

[root@v-test ~]# yum -y update
[root@v-test ~]# reboot

Теперь установим пакеты, необходимые для работы VDO. В качестве зависимостей так же установится Python, который является одним из требований к работе:

[root@v-test ~]# yum –y install vdo kmod-kvdo

Создаем тестовый том VDO:

Когда VDO установлен в системе, можно перейти к созданию тома.

При создании не забываем про размер Slab (–vdoSlabSize=slab_size). Поскольку наши диски размером 100GB, и рекомендуемый slab для данного объема – 2GB, данный параметр не указываем, поскольку 2GB является значением по умолчанию.

[root@v-test ~]# vdo create --name vdo_lvm --device=/dev/vg_vdo/lv_vdo Creating VDO vdo_lvm
Starting VDO vdo_lvm
Starting compression on VDO vdo_lvm
VDO instance 0 volume is ready at /dev/mapper/vdo_lvm

Проверим результат создания:

[root@v-test ~]# vdostats  --human-readable
Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G      4.0G     95.9G   3%           N/A

Создадим файловую систему xfs на разделе:

[root@v-test ~]# mkfs.xfs /dev/mapper/vdo_lvm

Смонтируем раздел и попробуем записать 20GB нулей:

[root@v-test ~]# mkdir /tmp/vdo_lvm

[root@v-test ~]# mount -t xfs /dev/mapper/vdo_lvm /tmp/vdo_lvm

[root@v-test ~]# dd if=/dev/zero of=/tmp/vdo_lvm/1.txt bs=1M count=20000

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

Проверим результат двух команд:

[root@v-test ~]# vdostats  --human-readable

Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G      4.0G     95.9G   3%           99%

[root@v-test ~]# df -h | grep vdo

/dev/mapper/vdo_lvm   96G   21G   76G  22% /tmp/vdo_lvm

Команда vdostats показывает, что на наших томах занято не более 4GB пространства, при этом значение Space saving составляет 99%.

В этот же момент df –h показывает, что из 100GB занято 21, что соответствует действительности, поскольку ранее было создано два файла, по 20GB каждый.

Попробуем заполнить раздел более чем на 100% и проверим результат. Запишем в файл 200 гигабайт нулей:

[root@v-test ~]# dd if=/dev/zero of=/tmp/vdo_lvm/1.txt bs=1M count=200000 102079922176 bytes (102 GB, 95 GiB) copied, 235.916 s, 433 MB/s

Не трудно догадаться, произошла запись не более 100 гигабайт, тем самым заполнив раздел в ОС до 100%. При этом vdostats так же показывает 99% space savings:

[root@v-test ~]# vdostats  --human-readable

Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G      4.1G     95.8G   4%           99%

Как же задействовать сохраненное пространство? Если вы читали первую часть, в ней фигурировал параметр Logical Size – пространство, которое видит конечный пользователь. Поскольку мы не задавали данный параметр, это значение равняется физическому размеру нижележащего устройства. В нашем случае 100GB.

Изменим размер для нашего диска. Размер указывается в мегабайтах и должен являться степенью числа 2:

[root@v-test ~]# vdo growLogical --name=vdo_lvm --vdoLogicalSize=204800

Расширим файловую систему на новый объем и проверим, что параметр LogicalSize дает желаемый результат:

[root@v-test ~]# xfs_growfs /tmp/vdo_lvm
/dev/mapper/vdo_lvm  200G   97G  104G  49% /tmp/vdo_lvm

Результат ожидаем. Файловая система теперь объемом в 200GB.

[root@v-test ~]# vdostats

Device               1K-blocks      Used Available Use% Space saving% /dev/mapper/vdo_lvm  104755200   4283672 100471528   4%           99%

При этом для VDO ничего не изменилось. Низлежащее блочное устройство так же занято на 4%, так же имеет объем 100GB и 99% Space saving.

Как можно заметить, с нулями VDO справляется хорошо. Проверим работу компрессии и дедупликации. Предварительно я очистил директорию, и она свободна на 100%:

[root@v-test ~]# dd if=/dev/urandom of=/tmp/vdo_lvm/1.txt bs=1M count=20000 20971520000 bytes (21 GB, 20 GiB) copied, 369.636 s, 56.7 MB/s

[root@v-test ~]# vdostats --human-readable

Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G     23.6G     76.3G  23%            0%

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

Проверим работу дедупликации. Добавим явно повторяющиеся данные:

[root@v-test ~]# cp /tmp/vdo_lvm/1 /tmp/vdo_lvm/2
[root@v-test ~]# cp /tmp/vdo_lvm/1 /tmp/vdo_lvm/3

Результат дедупликации положительный:

[root@v-test ~]# vdostats --human-readable

Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G     23.6G     76.3G  23%           66%

Space saving 66%, что соответствует действительности.

По умолчанию, на томах VDO включена компрессия и дедупликация. Попробуем отключить оба этих параметра и проверим результат:

[root@v-test ~]# vdo disableCompression --name=vdo_lvm
Disabling compression on vdo vdo_lvm
Stopping compression on VDO vdo_lvm

[root@v-test ~]# vdo disableDeduplication --name=vdo_lvm
Disabling deduplication on vdo vdo_lvm

[root@v-test ~]# vdostats vdo_lvm --human-readable
Device                    Size      Used Available Use% Space saving%
vdo_lvm                  99.9G     23.6G     76.3G  23%           66%

С существующими данными ничего не изменилось. Попробуем скопировать существующий файл еще раз и сравним результат:

[root@v-test ~]# cp /tmp/vdo_lvm/1 /tmp/vdo_lvm/4

[root@v-test ~]# vdostats vdo_lvm --human-readable Device                    Size      Used Available Use% Space saving% vdo_lvm                  99.9G     42.5G     57.4G  42%           50%

Вывод в данном случае можно сделать только один – при отключении компрессии и дедупликации, старые данные остаются так же в дедуплицированном\сжатом состоянии, а вот новые ложатся уже целиком. Технологии эффективности к ним не применяются.

Включим сохранение пространства обратно и проверим результат:

[root@v-test ~]# vdo enableCompression --name=vdo_lvm
Enabling compression on vdo vdo_lvm
Starting compression on VDO vdo_lvm

[root@v-test ~]# vdo enableDeduplication --name=vdo_lvm
Enabling deduplication on vdo vdo_lvm

Значение Space savings не изменилось:

[root@v-test ~]# vdostats vdo_lvm --human-readable Device                    Size      Used Available Use% Space saving% vdo_lvm                  99.9G     43.1G     56.8G  43%           50%

Скопируем еще раз файл:

[root@v-test ~]# cp /tmp/vdo_lvm/1 /tmp/vdo_lvm/5

[root@v-test ~]# vdostats --human-readable

Device                    Size      Used Available Use% Space saving% /dev/mapper/vdo_lvm      99.9G     43.2G     56.7G  43%           60%

Space saving отрабатывает, как и ожидалось. Занято 43GB, часть из данных занимают метаданные, половину – первый загруженный файл, вторую половину – файл, который был загружен в момент отключения технологий эффективности.

Операционная система сообщает, что на текущий момент из 200GB занято 100 (5 файлов по 20 гигабайт), при реальном занятом пространстве в 43GB:

/dev/mapper/vdo_lvm  200G  100G  101G  50% /tmp/vdo_lvm

В качестве заключения:

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

К сожалению, у меня под рукой не оказалось подходящих файлов, чтобы проверить работоспособность компрессии, но вот с дедупликацией и отрезанием нулей VDO справилось положительно.

В следующих частях попробуем копнуть еще глубже.

Прошлые выпуски про VDO:
Часть 1. Основы.

Leave a Reply

Your email address will not be published. Required fields are marked *