Размер раздела метадата для 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).
С другой стороны —
- пользователи пишут о «подводных камнях», сложности администрирования и т.п. Я в linux новичёк, пока с lvm до конца не разобрался)))
- я нормальной работы 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
ситуация у меня следующая:
- задача проекта — организовать большой сток видкоконтента (уточняю на всякий случай — 6+). есть уже готовый скрипт, который работает на apache Общий объём контента пока не понятен, но может быть (по оценкам) — ориентировочно до 50Гб.
- реализуем прокт на свои деньги, поэтому на старте пока купили железа по минимуму: на сервере 16 ГБ ОЗУ, 128 Гб NVMe, 3 Тб hdd (хранилище пока без зеркал и т.п.)
- для гибкости мы инсталировали на сервер гипервизор proxmox. frontend/backend проекта — ВМ на proxmox
- задача, которую я обсуждаю в этой теме — понять как лучше организовать расширяемое хранилище для контента.
Расширение хранилища я вижу следующим образом а) сейчас есть диск 3Тб — организуем хранилище на нём б) появится возможность докупить ещё диск 3Тб — организуем зеркало в) если проект будет развиваться — докупить ещё диски и увеличить объем хранилища г) в дальнейшем, по мере роста объема контента — докупать диски и ещё увеличивать объём хранилища. д) преобразоваит RAID1 в RAID5 или 6 или т.п.
- в 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)
- Вывести перечень блочных устройств:
Пример вывода после выполнения команды:
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), которому презентованы сетевые блочные устройства
Действия описанные в этом пункте, должны быть выполнены на всех серверах — фронтальных машинах и узлах виртуализации.
- Установить пакет 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
где
Пример вывода после успешного выполнения команды:
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
Регистрация хранилищ в веб-интерфейсе
Регистрация системного хранилища.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "fs_lvm" BRIDGE_LIST = " . "

В представленном примере системному хранилищу fs_lvm-system присвоен идентификатор 100 .
Регистрация хранилища образов.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "IMAGE_DS" TM_MAD = "fs_lvm" DS_MAD = "fs" DISK_TYPE = "BLOCK" BRIDGE_LIST = " . "

В представленном примере хранилищу образов 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)
где
Пример Настройка доступа для фронтальной машины с сетевым именем 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
Регистрация хранилищ в веб-интерфейсе
Регистрация системного хранилища.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_lvm" DRIVER = "raw"

В представленном примере системному хранилищу lvm_lvm-system присвоен идентификатор 100 .
Регистрация хранилища образов.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_lvm" DS_MAD = "lvm" DRIVER = "raw" DISK_TYPE = "BLOCK"

В представленном примере хранилищу образов 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
Регистрация хранилищ в веб-интерфейсе
Регистрация системного хранилища.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "SYSTEM_DS" TM_MAD = "lvm_thin"

В представленном примере системному хранилищу lvm-thin-system присвоен идентификатор 100.
Регистрация хранилища образов.
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- перейти во вкладку Расширенный;
- во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:
NAME = "" TYPE = "IMAGE_DS" TM_MAD = "lvm_thin" DS_MAD = "lvm_thin" DRIVER = "qcow2" DISK_TYPE = "BLOCK"

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