Lvm thin что это
Перейти к содержимому

Lvm thin что это

  • автор:

Размер раздела метадата для LVM-thin

Присоединил к серверу Proxmox новый диск 3Тб и сделал из него LVM-thin (на весь диск). Всё делал средствами GUI (через веб-интерфейс).

Довольно долго шла его подготовка… После её окончания, посмотрел, как этот диск теперь выглядит в системе:

root@pve:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 2.7T 0 disk ├─vmdata-vmdata_tmeta 253:8 0 15.8G 0 lvm │ └─vmdata-vmdata 253:10 0 2.7T 0 lvm └─vmdata-vmdata_tdata 253:9 0 2.7T 0 lvm └─vmdata-vmdata 253:10 0 2.7T 0 lvm . 

Мне кажется странным, что под метеданные забрали целых 16 Гб. Или это нормально?

Ещё вопрос — система выдала такое предупреждение: Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. WARNING: Maximum supported pool metadata size is 15.81 GiB.»

Правильно ли я понимаю, что в будущем смогу расширить этот LVM-thin pool максимум до 15 Тб, т.е. добавить в него ещё 4 таких же диска?

А если мне надо будет сделать хранилище больше? Что тогда делать?

Garik368
19.01.22 18:51:17 MSK

Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.

В одном предложении есть два числа и явная связь между ними.

Под метаданные можно было и 4Гб, но здесь что 4Г, что 16Г – это мелочь для 3ТБ диска

futurama ★★★★★
( 19.01.22 19:31:15 MSK )
Последнее исправление: futurama 19.01.22 19:33:45 MSK (всего исправлений: 1)

Ответ на: комментарий от futurama 19.01.22 19:31:15 MSK

Чего столько агрессии?

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

По моему, в lvm размер чанка не меняется, так что кроме как импорт-экспорт или пересоздания lvm с переносом данных через dd предложить то и нечего.

AVL2 ★★★★★
( 20.01.22 10:14:19 MSK )
Ответ на: комментарий от AVL2 20.01.22 10:14:19 MSK

Что делать? Не ждать будущего, когда система обрастет мясом, действовать сейчас – переделать все.

futurama ★★★★★
( 20.01.22 10:30:35 MSK )
Ответ на: комментарий от futurama 20.01.22 10:30:35 MSK

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

AVL2 ★★★★★
( 20.01.22 12:28:47 MSK )
Ответ на: комментарий от AVL2 20.01.22 12:28:47 MSK

Ты слаб умом? Зачем ты сам себе противоречишь?

futurama ★★★★★
( 20.01.22 15:32:03 MSK )
Ответ на: комментарий от futurama 20.01.22 15:32:03 MSK

Да в чем? Нельзя все сразу сделать на века. Это идиотизм. Есть короткая, средняя и длинная дистанции. Все, кто сразу ориентируются на длинную, дохнут уже на короткой…

AVL2 ★★★★★
( 20.01.22 17:31:13 MSK )
Ответ на: комментарий от futurama 20.01.22 10:30:35 MSK

Переделать — как? Увеличить chunk size?

Но я не знаю, что получится в итоге… Это пока стартап. Может быть надо будет увеличить хранилище до 10 Тб, а может — в благоприятном случае — до 50 Тб.

Garik368
( 20.01.22 19:46:38 MSK ) автор топика

Вы с zfs сравнивали?

Он кушает больше памяти (есть тюнинг), тормознее, но лучше масштабируется и более предсказуем.

Harliff ★★★★★
( 20.01.22 22:59:06 MSK )
Ответ на: комментарий от Garik368 20.01.22 19:46:38 MSK

Не знаешь – плыви по течению. Встретишь водоворот, может выгребешь. А может и не встретишь. А может и не выгребешь.

futurama ★★★★★
( 20.01.22 23:57:04 MSK )
Ответ на: комментарий от futurama 20.01.22 23:57:04 MSK
Garik368
( 21.01.22 11:43:46 MSK ) автор топика
Ответ на: комментарий от Harliff 20.01.22 22:59:06 MSK

да, как вариант рассматриваю zfs… у меня на сервере Proxmox, там zfs вподе работает «из коробки».

С одной стороны, складывается впечатление, что том zfs можно организовать на proxmox в 3 клика мышкой (всё в GUI).

С другой стороны —

  1. пользователи пишут о «подводных камнях», сложности администрирования и т.п. Я в linux новичёк, пока с lvm до конца не разобрался)))
  2. я нормальной работы zfs нужно много памяти (тем более, что в итоге хранилище может значительно расшириться). У меня сейчас на сервере 16Гб ОЗУ, как я понимаю — это вообще самый минимум для zfs

Garik368
( 21.01.22 11:50:30 MSK ) автор топика
Ответ на: комментарий от Garik368 21.01.22 11:50:30 MSK

Переделай lvm увеличь chunk и забудь об ограничении размера. Я как-то нарвался на старом РедХате на ограничение 16Тб для ext4, пришлось мигрировать на xfs, а это не только время, но и еще доп. «диск» на 16ТБ нужен был

futurama ★★★★★
( 21.01.22 14:54:21 MSK )

А зачем Вам thin pool? В смысле, зачем thin pool такого размера?

Если Вы планируете много виртуалок, использующих thin provisioning (и утилизирующих 15+ Тб), то 16 Гб RAM будет явно мало.

Если виртуалок мало, то зачем столько места именно в thin pool’e? Если Вы планируете на thin pool’e хранить обычные данные — то это плохая идея (возьмите обычный, не ‘thin’ lvm и используйте его).

Или есть какие-то специфические функциональные требования?

Для понимания, thin pool хорош, когда Вам нужно создавать много доступных на запись копий крупных объектов (системный диск VM, например). Если, например, у Вас есть студенты в компьютерном классе, которые должны выполнять лабораторные работы — то thin pool отлично подходит: Вы делаете несколько шаблонов VM (по одному для каждой лабораторной работы), когда приходят студенты — запускаете им 10-20 VM. Для каждой VM используется один набор данных, к которому, пока VM работает, пишется дельта. Когда потребность в VM отпадает (студент показал результат) — Вы удаляете VM вместе с накопившейся дельтой.

А если Вы хотите, например, запускать там сервер AD + файловый сервер + сервер СУБД + сервер приложений (1С, например) + терминальный сервер и т.п. — то thin provisioning для этого подходит плохо.

Harliff ★★★★★
( 22.01.22 02:29:56 MSK )
Последнее исправление: Harliff 22.01.22 02:53:11 MSK (всего исправлений: 1)

Ответ на: комментарий от Garik368 21.01.22 11:50:30 MSK

я нормальной работы zfs нужно много памяти (тем более, что в итоге хранилище может значительно расшириться). У меня сейчас на сервере 16Гб ОЗУ, как я понимаю — это вообще самый минимум для zfs

Если лень читать: использовать zfs на 16 Гб можно (по умолчанию, zfs берёт под кэш 50% ОЗУ; можно ограничить меньшим объемом). От объема ОЗУ, выделенного под кэш, зависит быстродействие.

Harliff ★★★★★
( 22.01.22 02:32:22 MSK )
Ответ на: комментарий от futurama 21.01.22 14:54:21 MSK

Автору топика: я не знаю всех вводных (что у Вас за данные, насколько Вам важны данные, в каком режиме они будут использоваться и т.д.), поэтому мое мнение субъективно. Для хранения важных данных — ZFS имеет плюсы: чексуммы, прозрачную компрессию, возможность делать снимки и отправлять их в удалённое хранилище (zfs) для резервного копирования и синхронизации.

В эксплуатации ZFS есть свои нюансы (нужно управлять памятью, чтобы не получать OOM, не следует использовать дедупликацию, на очень быстрых ssd/nvme, латентность выше, чем у LVM и т.д.), но для больших хранилищ, польза от ZFS значительная.

Harliff ★★★★★
( 22.01.22 02:56:32 MSK )
Последнее исправление: Harliff 22.01.22 03:25:15 MSK (всего исправлений: 1)

Ответ на: комментарий от futurama 21.01.22 14:54:21 MSK

правильно ли я понимаю

  • если при chunk size 64.00 KiB максимаьно млжет быть том 16 Тб, то, чтобы в последствии иметь возможность расширить том до 48Тб, надо изначально создать том с chunk size 192 Кб?

Garik368
( 22.01.22 20:26:34 MSK ) автор топика
Ответ на: комментарий от Harliff 22.01.22 02:29:56 MSK

ситуация у меня следующая:

  1. задача проекта — организовать большой сток видкоконтента (уточняю на всякий случай — 6+). есть уже готовый скрипт, который работает на apache Общий объём контента пока не понятен, но может быть (по оценкам) — ориентировочно до 50Гб.
  2. реализуем прокт на свои деньги, поэтому на старте пока купили железа по минимуму: на сервере 16 ГБ ОЗУ, 128 Гб NVMe, 3 Тб hdd (хранилище пока без зеркал и т.п.)
  3. для гибкости мы инсталировали на сервер гипервизор proxmox. frontend/backend проекта — ВМ на proxmox
  4. задача, которую я обсуждаю в этой теме — понять как лучше организовать расширяемое хранилище для контента.

Расширение хранилища я вижу следующим образом а) сейчас есть диск 3Тб — организуем хранилище на нём б) появится возможность докупить ещё диск 3Тб — организуем зеркало в) если проект будет развиваться — докупить ещё диски и увеличить объем хранилища г) в дальнейшем, по мере роста объема контента — докупать диски и ещё увеличивать объём хранилища. д) преобразоваит RAID1 в RAID5 или 6 или т.п.

  1. в proxmox есть несколько вариаетов подключения диска а) директория б) LVM в) LVM-thin г) ZFS

LVM-thin был выбран из-за возможности делать снапшоты ВМ встроенными средствами.

Garik368
( 22.01.22 20:57:37 MSK ) автор топика
Ответ на: комментарий от Harliff 22.01.22 02:29:56 MSK

на обычном LVM снимки делать нельзя(

Garik368
( 22.01.22 20:59:09 MSK ) автор топика
Ответ на: комментарий от Garik368 22.01.22 20:26:34 MSK

the proxmox installer by default create Chunk 256,00k in version 5.X, and 64,00k in version 6.X
you can change the Chunk size with the -c option.

for example: Code:

lvconvert —type thin-pool -c 256K pve/data

futurama ★★★★★
( 22.01.22 21:58:03 MSK )
Ответ на: комментарий от futurama 22.01.22 21:58:03 MSK

А как мне вычислить правильный Chunk для моей ситуации?

Lvm thin что это

Это очень короткая шпаргалка по LVM – основные команды для создания тома.
Имеем виртуальный диск /dev/xvdb нужно сделать на нем том LVM с возможностью снапшотов (т.к. том не должен занять весь физический диск).

Итак:

Создаем раздел тип раздела 8e

fdisk -l /dev/xvdb Диск /dev/xvdb: 10.7 ГБ, 10737418240 байт 255 heads, 63 sectors/track, 1305 cylinders Units = цилиндры of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xe90a3c2f Устр-во Загр Начало Конец Блоки Id Система /dev/xvdb1 1 1305 10482381 8e Linux LVM

Создаем физический том

pvcreate /dev/xvdb1

Создаем группу томов

vgcreate /dev/xvdb1

Смотрим какой получился размер у группы томов

число физических экстентов (2558):

~# vgdisplay | grep "Total PE" Total PE 2558

размер физического экстента (4,00 MiB):

~# vgdisplay | grep "PE Size" PE Size 4,00 MiB

Допустим мы хотим зарезервировать 400Мб под снапшоты, 400Мб = 100 физических экстентов, тогда размер LVM-тома должен быть “Total PE”-100 = 2458.
Создаем LVM-том нужного размера:

lvcreate -l 2458 —name

Узнать есть ли свободное место на физическом томе под снапшоты (400,00 MiB free):

pvscan PV /dev/xvdb1 VG mysql lvm2 [9,99 GiB / 400,00 MiB free] Total: 1 [9,99 GiB] / in use: 1 [9,99 GiB] / in no VG: 0 [0 ]

Уменьшить раздел

Сперва нужно проверить файловую систему на ошибки

e2fsck -f /dev/pve/data

Затем уменьшаем файловую систему на размер, меньший, чем будет раздел в итоге.

resize2fs /dev/pve/data 900G

Потом уменьшаем раздел LVM

lvreduce -L 1000G /dev/pve/data

И наконец, расширяем файловую систему до полного размера раздела

resize2fs /dev/pve/data

Thin LVM

Должны быть установлены thin-provisioning-tools

apt-get -y install thin-provisioning-tools

Создать пул тонких томов:

lvcreate -L 300G --name data pve lvconvert --type thin-pool pve/data --poolmetadatasize 10G
lvs -o+chunksize

Создать тонкий том в пуле:

lvcreate -T -V 100G -n thin-volume pve/data

Отобразить все тома включая скрытые

lvs -a

Ключевые моменты в работе тонких томов:
1. При создании тонкого тома дополнительно к исходному тому создаются два скрытых тома под метаданные (один запасной с названием lvol0_pmspare). Если метаданные испортились их можно попробовать восстановить при помощи lvconvert —repair VG/ThinPoolLV
2. Для метаданных (информация о выделенных блоках) сохраняется на отдельном томе (который автоматически создается), и когда на нем кончается место, то происходит порча метаданных и файловвых систем на тонких томах (т.к. ошибка записи будет).
3. Thin-LVM поддерживает автоувеличение томов, в том числе и тома metadata (что бы увеличить метадату, нужно что бы были свободные екстенты на vg, по этому под нужно всегда оставлять свободное место на VG!!). Автоувеличение настраивается в /etc/lvm.conf (thin_pool_autoextend)

Хранилища LVM

Блочная технология хранения с использованием LVM обеспечивает возможность использования LVM-томов вместо обычных файлов образов в системном хранилище. При этом нет необходимости в организации файловой системы.

В ПК СВ поддерживаются внешние хранилища, построенные базе технологии SAN (Storage Area Network – сеть хранения данных), которая обеспечивает доступ к данным на уровне блочных устройств.

При настройке внешнего хранилища необходимо руководствоваться инструкциями производителя оборудования.

В Astra Linux обеспечивается полнофункциональное управление томами LVM, дополнительная настройка не требуется.

В ПК СВ для хранилища LVM не требуется настройка кластерного управления логическими томами (CLVM) в кластере. Драйверы хранилищ обновляют метаданные LVM каждый раз, когда образ требуется на другом узле виртуализации.

Пример подключения внешнего хранилища SAN по протоколу iSCSI

В данном примере описан процесс настройки сервера, предоставляющего блочные данные по протоколу iSCSI (программная СХД). Сетевые блочные устройства (iSCSI-target), предоставляемые этим сервером, будут подключены в качестве локальных блочных устройств на другом сервере (iSCSI-initiator) .

Особенности использования SAN в ПК СВ

SAN обеспечивает предоставление блочных устройств посредством сетевых протоколов, таких как Fibre Channel или iSCSI. Для доступа к определенному сетевому блочному устройству используется специализированный адрес этого устройства – LUN (Logical Unit Number – номер логического устройства).

Для организации хранения в ПК СВ требуется выделение как минимум 2 LUN (один – для хранилища образов, второй – для системного хранилища). Эти LUN должны быть презентованы каждому серверу – фронтальным машинам и узлам виртуализации.

Настройки сервера, предоставляющего блочные устройства (iSCSI-target)

  1. Вывести перечень блочных устройств:

Пример вывода после выполнения команды:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3,9G 0 rom sda 252:0 0 12G 0 disk ├─sda1 252:1 0 11G 0 part / ├─sda2 252:2 0 1K 0 part └─sda5 252:5 0 975M 0 part [SWAP] sdb 252:16 0 24G 0 disk sdc 252:32 0 24G 0 disk
  • sda – диск для размещения файлов ОС;
  • sdb и sdc – диски для эмуляции сетевых блочных устройств.

sudo apt install targetcli-fb
sudo targetcli
Пример вывода после выполнения команды:

/> ls o- / . [. ] o- backstores . [. ] | o- block . [Storage Objects: 0] | o- fileio . [Storage Objects: 0] | o- pscsi . [Storage Objects: 0] | o- ramdisk . [Storage Objects: 0] o- iscsi . [Targets: 0] o- lo. [Targets: 0] o- vhost . [Targets: 0]

/backstores/block create /dev/

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

Пример Регистрация блочного устройства /dev/sdb , при этом ему будет присвоено условное именование storage01 :

/backstores/block create storage01 /dev/sdb
Пример вывода после выполнения команды:

Created block storage object storage01 using /dev/sdb.
/> ls o- / . [. ] o- backstores . [. ] | o- block . [Storage Objects: 1] | | o- storage01 . [/dev/sdb (24.0GiB) write-thru deactivated] | o- fileio . [Storage Objects: 0] | o- pscsi . [Storage Objects: 0] | o- ramdisk . [Storage Objects: 0] o- iscsi . [Targets: 0] o- loopback . [Targets: 0] o- vhost . [Targets: 0]

/iscsi create
Пример вывода после выполнения команды:

Created target iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.

Для каждого блочного устройства можно назначить несколько целей (iSCSI-target) – чтобы разграничить доступ для разных групп серверов-инициаторов (iSCSI-initiator).

/> ls o- / . [. ] o- backstores . [. ] | o- block . [Storage Objects: 1] | | o- storage01 . [/dev/sdb (24.0GiB) write-thru deactivated] | o- fileio . [Storage Objects: 0] | o- pscsi . [Storage Objects: 0] | o- ramdisk . [Storage Objects: 0] o- iscsi . [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709 . [TPGs: 1] | o- tpg1 . [no-gen-acls, no-auth] | o- acls . [ACLs: 0] | o- luns . [LUNs: 0] | o- portals . [Portals: 1] | o- 0.0.0.0:3260 . [OK] o- loopback . [Targets: 0] o- vhost . [Targets: 0]

/iscsi//tpg1/luns/ create /backstores/block/

/iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709/tpg1/luns/ create /backstores/block/storage01

Пример вывода после выполнения команды:

Created LUN 0.
/> ls o- / . [. ] o- backstores . [. ] | o- block . [Storage Objects: 1] | | o- storage01 . [/dev/sdb (24.0GiB) write-thru deactivated] | o- fileio . [Storage Objects: 0] | o- pscsi . [Storage Objects: 0] | o- ramdisk . [Storage Objects: 0] o- iscsi . [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709 . [TPGs: 1] | o- tpg1 . [no-gen-acls, no-auth] | o- acls . [ACLs: 0] | o- luns . [LUNs: 0] | | o- lun0 . [block/storage01 (/dev/sdb) (default_tg_pt_gp)] | o- portals . [Portals: 1] | o- 0.0.0.0:3260 . [OK] o- loopback . [Targets: 0] o- vhost . [Targets: 0]
    если контроль доступа не требуется, то его можно отключить командами:

cd /iscsi/<идентификатор_цели>/tpg1 set attribute generate_node_acls=1 set attribute demo_mode_write_protect=0
cd /iscsi//tpgt1/acls create

cd /iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709/tpgt1/acls
create iqn.1993-08.org.debian:01:c1a92326f6b8

Пример вывода после успешного выполнения команды create :

Created Node ACL for iqn.1993-08.org.debian:01:c1a92326f6b8 Created mapped LUN 0.

/ saveconfig
Пример вывода после выполнения команды:

Last 10 configs saved in /etc/rtslib-fb-target/backup. Configuration saved to /etc/rtslib-fb-target/saveconfig.json

В консоли управления Linux-IO Target версии 2.1.48-2 введена система бэкапов конфигурации. В связи с этим, после перезагрузки сервера сохраненная конфигурация не загружается автоматически. На текущий момент после перезагрузки сервера конфигурацию необходимо восстанавливать командой:

sudo targetcli restoreconfig

Пример вывода после выполнения команды:

Configuration restored from /etc/rtslib-fb-target/saveconfig.json

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

    Создать службу target , сформировав unit-файл, например с помощью тестового редактора nano, для этого выполнить команду:

sudo nano /lib/systemd/system/target.service
В открывшемся текстовом редакторе добавить следующие строки:

[Unit] Description=Restore LIO kernel target configuration Requires=sys-kernel-config.mount After=sys-kernel-config.mount network.target local-fs.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/targetctl restore ExecStop=/usr/bin/targetctl clear SyslogIdentifier=target [Install] WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl enable target
Пример вывода после выполнения команды:

Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /lib/systemd/system/target.service.

sudo systemctl status target
Пример вывода после выполнения команды:

● target.service - Restore LIO kernel target configuration Loaded: loaded (/lib/systemd/system/target.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2023-03-20 16:28:26 MSK; 9min ago Process: 577 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS) Main PID: 577 (code=exited, status=0/SUCCESS)

Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства

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

  1. Установить пакет open-iscsi командой:

sudo apt install open-iscsi

node.startup = automatic

sudo systemctl start iscsi

После первого запуска сервиса будет сгенерирован уникальный идентификатор инициатора, который можно просмотреть в файле /etc/iscsi/initiatorname.iscsi .

InitiatorName=iqn.1993-08.org.debian:01:c1a92326f6b8

sudo iscsiadm -m discovery -t st -p

где – IP-адрес узла, предоставляющего доступ к блочному устройству.
Пример вывода после успешного выполнения команды:

192.168.55.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 192.168.55.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098

sudo iscsiadm -m node -T <идентификатор_цели>-p -l

sudo iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 -p 192.168.55.41 -l

Кроме того, можно автоматически подключить все найденные цели (iSCSI-target):
sudo iscsiadm -m node -l
Пример вывода после успешного выполнения команды:

Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 192.168.55.41,3260] (multiple) Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 192.168.55.41,3260] (multiple) Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 192.168.55.41,3260] successful. Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 192.168.55.41,3260] successful.

sudo iscsiadm -m session —rescan
sudo iscsiadm -m session -P3

Если после выполнения команды, указанной выше, ошибка не была устранена, необходимо перезапустить службу iscsi командой:

sudo systemctl restart iscsi
или перезагрузить сервер командой:
sudo reboot
Пример вывода после выполнения команды:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 24G 0 disk sdb 8:16 0 24G 0 disk sr0 11:0 1 1024M 0 rom vda 252:0 0 64G 0 disk ├─vda1 252:1 0 63G 0 part / ├─vda2 252:2 0 1K 0 part └─vda5 252:5 0 975M 0 part [SWAP]

Настройка хранилищ c драйвером FS_LVM

Особенности использования драйвера FS_LVM

Исходные образы хранятся как обычные файлы, по умолчанию установлен следующий путь размещения в хранилище образов: /var/lib/one/datastores/ . При создании ВМ образы дисков выгружаются в логические тома (LV). Виртуальные машины запускаются из LV на узле виртуализации.

Для обеспечения совместного доступа всех узлов виртуализации к каталогу хранилища образов используется распределенная файловая система, такая как, например, NFS. При этом необходимо выполнить настройку каталога хранилища образов и точки монтирования так же, как и при использовании хранилища, построенном на базе файловой технологии хранения. Рекомендуется сначала выполнить развертывание хранилища образов, построенного на базе файловой технологии хранения. А затем, убедившись в его корректной работе, заменить его на хранилище LVM.

Сетевая файловая система NFS не поддерживает использование меток безопасности. Если планируется использование файловой системы NFS при построении облачного хранилища, функционирующего в мандатном контексте, то для ВМ следует установить уровень целостности, назначаемый по умолчанию, равным 0 (см. Ограничения, связанные с функционированием файловых систем NFS и OCFS2).

Параметры хранилищ

Для регистрации хранилищ необходимо указать значения следующих параметров:

    для системного хранилища:

Параметр Значение
NAME
TYPE SYSTEM_DS
TM_MAD fs_lvm
BRIDGE_LIST Необязательный параметр – список разделенных пробелом имен узлов виртуализации, через которые осуществляется доступ к системному хранилищу. Не используется, если фронтальная машина имеет прямой доступ к системе хранения данных.
Параметр Значение
NAME
TYPE IMAGE_DS
DS_MAD fs
TM_MAD fs_lvm
DISK_TYPE BLOCK
BRIDGE_LIST Необязательный параметр – список разделенных пробелом имен узлов виртуализации, через которые осуществляется доступ к системному хранилищу. Не используется, если фронтальная машина имеет прямой доступ к системе хранения данных.
SAFE_DIRS Перечень каталогов, разделенных символом пробела, в которых разрешается размещать образы. По умолчанию имеет значение » /var/tmp «

Регистрация хранилищ в интерфейсе командной строки

Регистрация системного хранилища с использованием конфигурационного файла:

    Создать файл systemds.txt следующего содержания:

NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "fs_lvm" BRIDGE_LIST = "  . "

onedatastore create systemds.txt
После выполнения команды будет выведен идентификатор созданного хранилища, например:

ID: 100

Регистрация хранилища образов с использованием конфигурационного файла:

    Создать файл imageds.txt следующего содержания:

NAME = "" TYPE = "IMAGE_DS" TM_MAD = "fs_lvm" DS_MAD = "fs" DISK_TYPE = "BLOCK" BRIDGE_LIST = "  . "

onedatastore create imageds.txt
После выполнения команды будет выведен идентификатор созданного хранилища, например:

ID: 101

Регистрация хранилищ в веб-интерфейсе

Регистрация системного хранилища.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
  3. перейти во вкладку Расширенный;
  4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "fs_lvm" BRIDGE_LIST = "  . "
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере системному хранилищу fs_lvm-system присвоен идентификатор 100 .
  • Регистрация хранилища образов.

    1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
    2. На открывшейся странице Создать хранилище:
    3. перейти во вкладку Расширенный;
    4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

    NAME = "" TYPE = "IMAGE_DS" TM_MAD = "fs_lvm" DS_MAD = "fs" DISK_TYPE = "BLOCK" BRIDGE_LIST = "  . "
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере хранилищу образов fs_lvm-images присвоен идентификатор 101 .
  • Настройка ПК СВ для использования системного хранилища LVM

    Все узлы виртуализации должны иметь доступ к одним и тем же сетевым блочным устройствам.

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

    На основе совместно используемых сетевых блочных устройств для каждого хранилища должна быть создана группа томов с именем вида:
    vg-one- .

    Формирование групп томов достаточно выполнить только на одном из узлов виртуализации.

      Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sda

    где /dev/sda – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sda" successfully created.

    sudo vgcreate vg-one-100 /dev/sda

    где 100 – идентификатор системного хранилища fs_lvm-system .
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-100" successfully created

    Настройка ПК СВ для использования хранилища образов

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

    Ограничения, связанные с функционированием файловой системы NFS

    Сетевая файловая система NFS не поддерживает использование меток безопасности.

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

      Остановить службу libvirtd командой:

    sudo systemctl stop libvirtd.service

    ilev_vm = 0 

    sudo systemctl start libvirtd.service

    Пример использования файловой системы NFS

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

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

      Вывести перечень блочных устройств:

    Пример вывода после выполнения команды:

    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3,9G 0 rom sda 252:0 0 12G 0 disk ├─sda1 252:1 0 11G 0 part / ├─sda2 252:2 0 1K 0 part └─sda5 252:5 0 975M 0 part [SWAP] sdb 252:16 0 24G 0 disk sdc 252:32 0 24G 0 disk
    • sda – диск для размещения файлов ОС;
    • sdb и sdc – диски для монтирования в каталоги с общим доступом.

    Для подключения к каталогу хранилища образов в данном примере будет использовано блочное устройство sdb.

    sudo mkfs.ext4 /dev/sdb
    Пример вывода после успешного выполнения команды:

    Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done

    sudo mkdir /mnt/nfs-images
    sudo chown 9869:9869 /mnt/nfs-images
    sudo blkid
    Пример вывода после выполнения команды:

    /dev/sda1: UUID="b5fd411a-4c96-491b-bfc0-b4e9e2670e9c" TYPE="ext4" PARTUUID="50741579-01" /dev/sda5: UUID="31daa40d-8e07-44cc-b851-d985f2121bb7" TYPE="swap" PARTUUID="50741579-05" /dev/sdb: UUID="0bb98072-95ad-4042-bd33-7adf62102445" TYPE="ext4" /dev/sdc: UUID="093051cb-e9c2-4932-99a1-16cab2da8e1c" TYPE="ext4"
    UUID=0bb98072-95ad-4042-bd33-7adf62102445 /mnt/nfs-images ext4 _netdev,errors=remount-ro 0 0

    sudo mount -a

    Для того чтобы установить и настроить службу сервера NFS, на сервере NAS необходимо выполнить действия, описанные ниже.

      Установить службу сервера NFS:

    sudo apt install nfs-kernel-server

     (rw,async,no_subtree_check,no_root_squash)

    где – IP-адрес фронтальной машины или узла виртуализации. Кроме того, может быть использовано сетевое имя сервера, или, для указания группы серверов, можно использовать адрес сети или подстановочные знаки (подробнее см. справку man exports ).

    Пример Настройка доступа для фронтальной машины с сетевым именем front и узлов виртуализации, сетевое имя которых начинается с последовательности символов » node » (далее следует один любой символ):

    /mnt/nfs-images front(rw,async,no_subtree_check,no_root_squash) /mnt/nfs-images node?(rw,async,no_subtree_check,no_root_squash)

    sudo exportfs -ra

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

      Установить службу клиента NFS:

    sudo apt install nfs-common
    sudo showmount -e
    Пример вывода после успешного выполнения команды:

    Export list for 192.168.1.10: /mnt/nfs-images node?,front

    sudo mkdir /var/lib/one/datastores/
    sudo mkdir /var/lib/one/datastores/101

    :  nfs _netdev,timeo=14,intr 0 0
    192.168.1.10:/mnt/nfs-images /var/lib/one/datastores/101 nfs _netdev,timeo=14,intr 0 0

    sudo mount -a

    Настройка хранилищ c драйвером LVM_LVM

    Особенности использования драйвера LVM_LVM

    Драйвер LVM_LVM позволяет организовать и хранилище образов, и системное хранилище в LVM. При этом, в отличие от использования драйвера FS_LVM, нет необходимости создавать общую сетевую файловую систему для хранилища образов.

    При использовании драйвера хранилища LVM_LVM необходимо наличие на всех узлах виртуализации общих блочных устройств хранения данных.

    Особенности функционирования драйвера хранилища LVM_LVM:

    • предварительно необходимо создать отдельные группы LVM-томов для хранилища образов и системного хранилища;
    • при загрузке образа диска ВМ в хранилище образов автоматически создается LVM-том, в который записывается загружаемый образ в формате RAW ;
    • при развертывании ВМ в системном хранилище автоматически создается копия LVM-тома из хранилища образов.

    Драйвером хранилища LVM_LVM не поддерживается создание снапшотов диска и создание «тонких» дисков (подробнее о «тонких» дисках – см. Особенности использования драйвера LVM_THIN) .

    Параметры хранилищ

    Для регистрации хранилищ необходимо указать значения следующих параметров:

      для системного хранилища:

    Параметр Значение
    NAME
    TYPE SYSTEM_DS
    TM_MAD lvm_lvm
    DRIVER raw
    Параметр Значение
    NAME
    TYPE IMAGE_DS
    DS_MAD lvm
    TM_MAD lvm_lvm
    DISK_TYPE BLOCK
    DRIVER raw

    Регистрация хранилищ в интерфейсе командной строки

    Регистрация системного хранилища с использованием конфигурационного файла:

      Создать файл systemds.txt следующего содержания:

    NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_lvm" DRIVER = "raw"

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100

    Регистрация хранилища образов с использованием конфигурационного файла:

      Создать файл imageds.txt следующего содержания:

    NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_lvm" DS_MAD = "lvm" DRIVER = "raw" DISK_TYPE = "BLOCK" 

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101

    Регистрация хранилищ в веб-интерфейсе

    Регистрация системного хранилища.

    1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
    2. На открывшейся странице Создать хранилище:
    3. перейти во вкладку Расширенный;
    4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

    NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_lvm" DRIVER = "raw"
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере системному хранилищу lvm_lvm-system присвоен идентификатор 100 .
  • Регистрация хранилища образов.

    1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
    2. На открывшейся странице Создать хранилище:
    3. перейти во вкладку Расширенный;
    4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

    NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_lvm" DS_MAD = "lvm" DRIVER = "raw" DISK_TYPE = "BLOCK" 
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере хранилищу образов lvm-lvm-images присвоен идентификатор 101 .
  • Настройка ПК СВ для использования хранилищ LVM

    Все сервера (фронтальные машины и узлы виртуализации) должны иметь доступ к одним и тем же сетевым блочным устройствам.

    На одном из серверов для хранилища образов и системного хранилища необходимо создать отдельные группы томов с именем вида:
    vg-one- .

    Создание группы томов для системного хранилища.

      Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sda

    где /dev/sda – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sda" successfully created.

    sudo vgcreate vg-one-100 /dev/sda

    где 100 – идентификатор системного хранилища lvm- lvm-system .
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-100" successfully created

    Создание группы томов для хранилища образов.

      Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sdb

    где /dev/sdb – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sdb" successfully created.

    sudo vgcreate vg-one-101 /dev/sdb

    где 101 – идентификатор системного хранилища lvm- lvm-images .
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-101" successfully created

    Настройка хранилищ c драйвером LVM_THIN

    Особенности использования драйвера LVM_THIN

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

    Тонкие LVM-тома не могут совместно использоваться несколькими узлами. В связи с этим, при использовании драйвера хранилища LVM_THIN не поддерживается миграция ВМ.

    Особенности функционирования драйвера хранилища LVM_THIN:

    • предварительно необходимо создать отдельную группу LVM-томов для хранилища образов;
    • на каждом узле виртуализации предварительно необходимо создать отдельную группу LVM-томов с привязкой к общему системному хранилищу ;
    • на каждом узле виртуализации предварительно необходимо создать отдельный пул «тонких» LVM-томов ;
    • при загрузке образа диска ВМ в хранилище образов автоматически создается LVM-том, в который пишется загружаемый образ в формате RAW ;
    • при развертывании ВМ в системном хранилище из исходного LVM-тома автоматически создается «тонкий» LVM-том в формате QCow2 .

    Пример Для просмотра перечня имеющихся LVM-томов на узле виртуализации необходимо выполнить команду:
    Пример вывода после выполнения команды:

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert onethinpool vg-one-100-node1 twi-a-tz-- 34,00g 0,00 10,46 lv-one-vm-5-0 vg-one-100-node2 Vwi---tz-- 12,00g onethinpool onethinpool vg-one-100-node2 twi-aotz-- 20,00g 30,09 18,40 lv-one-image-2 vg-one-101 -wi-a----- 12,00g lv-one-image-3 vg-one-101 -wi-a----- 4,34g 

    В представленном примере для диска с идентификатором 0 виртуальной машины с идентификатором 5 был создан «тонкий» LVM-том с наименованием lv-one-vm-5-0 .

    Параметры хранилищ

    Для регистрации хранилищ необходимо указать значения следующих параметров:

      для системного хранилища:

    Параметр Значение
    NAME
    TYPE SYSTEM_DS
    TM_MAD lvm_thin
    Параметр Значение
    NAME
    TYPE IMAGE_DS
    DS_MAD lvm_thin
    TM_MAD lvm_thin
    DISK_TYPE BLOCK
    DRIVER qcow2

    Регистрация хранилищ в интерфейсе командной строки

    Регистрация системного хранилища с использованием конфигурационного файла:

      Создать файл systemds.txt следующего содержания:

    NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_thin"

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100

    Регистрация хранилища образов с использованием конфигурационного файла:

      Создать файл imageds.txt следующего содержания:

    NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_thin" DS_MAD = "lvm_thin" DRIVER = "qcow2" DISK_TYPE = "BLOCK"

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101

    Регистрация хранилищ в веб-интерфейсе

    Регистрация системного хранилища.

    1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
    2. На открывшейся странице Создать хранилище:
    3. перейти во вкладку Расширенный;
    4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

    NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_thin"
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере системному хранилищу lvm-thin-system присвоен идентификатор 100.
  • Регистрация хранилища образов.

    1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
    2. На открывшейся странице Создать хранилище:
    3. перейти во вкладку Расширенный;
    4. во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

    NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_thin" DS_MAD = "lvm_thin" DRIVER = "qcow2" DISK_TYPE = "BLOCK"
  • нажать на кнопку [Создать].
  • Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.

    В представленном примере хранилищу образов lvm-thin-images присвоен идентификатор 101 .
  • Настройка ПК СВ для использования хранилища образов LVM

    Все сервера (фронтальные машины и узлы виртуализации) должны иметь доступ к одним и тем же сетевым блочным устройствам.

    На одном из серверов необходимо создать отдельную группу томов для хранилища образов:
    vg-one- .

      Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sdb

    где /dev/sdb – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sdb" successfully created.

    sudo vgcreate vg-one-101 /dev/sdb

    где 101 – идентификатор системного хранилища lvm- thin-images .
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-101" successfully created

    О производительности Thin Provision в LVM2

    С версии RHEL 6.4 в LVM2 включена поддержка thin provision. На русский я бы перевёл это как «тонкое резервирование», хотя перевод неточен и совершенно не согласуется с реальностью, поэтому далее наравне с русским будет использоваться английское написание.

    Thin provisioning — это создание логических томов, которые изначально используют немного места и «растут» по мере записи в них данных. В ZFS это реализовано давно по самой философии этой ФС. В VMware это используется в каждом продукте. Дошло дело до LVM2, широко применяемом в Linux в наши дни. Также одним из основных нововведений является thin snapshots, когда для снэпшотов нет необходимости резервировать место заранее, а он «растёт» вместе с изменёнными данными. Также разрешаются и поощряются вложенные снэпшоты (снэпшоты снэпшотов c любой глубиной), при этом заявляется об отсутствии при этом падения производительности. О нескольких нюансах использования будет рассказано в статье.

    Для стабильной работы thin provision в LVM2 требуется ядро 3.4. В Red Hat бэкпортировано и работает на их «классическом» 2.6.32.
    В близкой мне Debian Wheezy thin provisioning недоступен ввиду отсутствия ключа при компиляции lvm2 —with-thin=internal и других сложностей. При необходимости, для целей теста, можно скомпилировать этот пакет из исходников.

    Меня больше интересовали не снэпшоты, а производительность «тонких логических томов» (Thin Logical Volume) для использовании на серверах. Для нетерпеливых скажу сразу — падение производительности наблюдается, и существенное. Подробности ниже.

    На одном и том же сервере с CentOS 6.4 2.6.32-279.2.1.el6.x86_64 на RAID1 сделанном при помощь mdadm, создаём «пул тонкого резервирования» (thin pool):

    lvcreate -L 50G -T /dev/VG/thin_pool

    и обычный логический том (LV):

    lvcreate -L 50G /dev/VG/thick_vol

    Измерим производительности линейного чтения и записи на эти устройства:

    Thin pool:
    Запись:
    dd if=/dev/zero of=/dev/mapper/VG-thin_pool bs=1M count=1000 oflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 15.9126 s, 65.9 MB/s
    Чтение:
    dd if=/dev/mapper/VG-thin_pool of=/dev/null bs=1M count=1000 iflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 4.19247 s, 250 MB/s
    LV:
    FIO: Запись: iodepth=2, bw=943120 B/s, iops=230, avg=8645.48 usec
    # dd if=/dev/zero of=/dev/VG/thick_vol bs=1M count=1000 oflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 15.8432 s, 66.2 MB/s
    FIO: Чтение: iodepth=2, bw=775490 B/s, iops=189, avg=10536.95 usec
    # dd if=/dev/VG/thick_vol of=/dev/null bs=1M count=1000 iflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 4.04925 s, 259 MB/s

    Как видно производительность при этом не различается для LV и thin pool.

    Создаём thin volume (тонкий логический том) в thin pool
    lvcreate -V 100G -T -n thin_vol /dev/mapper/VG-thin_pool
    Запись:
    FIO: Запись: iodepth=2, bw=1100.5KB/s, iops=275, avg=7241.55 usec
    dd if=/dev/zero of=/dev/mapper/VG-thin_vol bs=1M count=1000 oflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 38.7505 s, 27.1 MB/s
    Чтение:
    FIO: Чтение: iodepth=256, bw=86100KB/s, iops=21524, avg=11860.53 usec
    dd if=/dev/mapper/VG-thin_vol of=/dev/null bs=1M count=1000 iflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 4.45363 s, 235 MB/s

    Очень хорошо заметно, что линейная запись на thin volume производится в 2 раза медленнее, чем на обычный LV (27.1 MB/s против 66.2 MB/s). При этом скорость случайной записи даже возрастает, а для случайного чтения вообще не удалось замерить реальную производительность — показывает только уровень чтения из кеша, при этом сброс кеша не помог.

    Падение производительности линейной записи настораживает и есть вероятность, что это связано с наличием RAID1 от mdadm, поэтому пришлось протестировать на другой машине, также посмотрим на производительность на уровне файловой системы. Виртуальная машина VMware Workstation Debian Wheezy 7.3 3.10-0.bpo.3-amd64 SSD диск.

    LV:
    Запись:
    dd if=/dev/zero of=/delete.img bs=1M count=1000 oflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 3.49623 s, 300 MB/s
    Чтение:
    FIO: Чтение: iodepth=384, bw=158839KB/s, iops=39709, avg= 9.64 msec
    dd if=/delete.img of=/dev/null bs=1M count=1000 iflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 2.31352 s, 453 MB/s
    Thin LV:
    Запись:
    dd if=/dev/zero of=/mnt/thin/delete.img bs=1M count=1000 oflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 7.15546 s, 147 MB/s
    Чтение:
    FIO: Чтение: iodepth=384, bw=176574KB/s, iops=44143, avg=8675.36 usec
    dd if=/mnt/thin/delete.img of=/dev/null bs=1M count=1000 iflag=direct 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 2.33435 s, 449 MB/s

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

    UPDATE: Произвёл ещё одно тестирование на «чистом» сервере без RAID и вирт.машин. Падение производительности линейной записи не наблюдается! Прошу прощения уважаемой аудитории за введение в заблуждение в связи с однобокостью тестирования в первые два теста. В результате считаю необходимо тестировать производительность для каждого конкретного случая.

    ИТОГИ:
    1. При использовании thin volume в каждом конкретном случае необходимо производить тестирование производительности линейной записи, так как, к примеру, для RAID 1 с mdadm и вирт.машин VMware происходит падение скорости линейной записи на него в 2 раза по сравнению с «классическим» LV;
    2. При этом у случайной записи на thin volume такого падения не замечено и скорость на том же уровне, что я для LV;
    3. На Debian использовать в продакшне пока не буду ввиду отсутствия в стандартных репозиториях;
    • lvm2
    • thin-provision
    • производительность
    • линейная запись
    • debian

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *