====== 2022-11-12 - Методы объединения дисков разного объема в один массив ======
В лабораторный сервер я вставил все диски которые попались под руку и в связи с этим назрел вопрос: "Какие файловые системы или системы хранения данных умеют работать с дисками разного объема в едином пуле и какая из них самая оптимальная".
===== BTRFS =====
По мотивам недавней статьи про BTRFS я начал тестирование с этой системы, так как среди немногих она поддерживает защиту данных на уровне блоков а не дисков, что позволяет объединять диски различного объема и количества в требуемые уровни RAID. Среди Enterprise систем хранения данных такие методы управления дисковой емкостью можно встретить например на HP EVA, HPE 3par, Primera, Huawei OC, Dorado и других. Ничего фантастического в данной технологии нет. Диск разделяется на блоки (чанки) определенной длинны и RAID собирается из чанков а не из дисков целиком. Это привносит следующие преимущества:
* Восстановление много-ко-многим;
* Отвязанный уровень RAID от количества дисков, например мы можем создать RAID1 на трех дисках и использовать весь объем или RAID 4+2 на 7,8,9 и так далее дисках;
* Распределенная область горячей замены;
BTRFS обладает собственными недостатками и не полной реализацией некоторых преимуществ, об этом я упомянул в статье о дистрибутиве [[wiki:nas:rockstor|Rockstor]].
Файловая система BTRFS была грубо протестирована с использованием [[wiki:benchmark:tests:storage:fio#тестирование_всех_шаблонов_и_нагрузок|скрипта на базе fio]], который прогоняет все блоки на все типы нагрузки и позволяет в nmon построить красивые графики.
Результат выложен [[wiki:benchmark:results:fio:v1.0#btrfs_-_raid1|на странице с остальными файлами]].
===== ZFS =====
Следующей тестируемой файловой системой будет ZFS. Я не буду пытаться строить raidz потому что для такой конфигурации из разнородных дисков это непозволительная роскошь:
* Это сложно посчитать;
* У BRFS RAID5 пока не стабилен и сравнить результаты не удастся;
* Производительность скорее всего будет катастрофически низкой;
Чтобы объединить свои диски я прибегнул к такому методу, который периодически эксплуатирую:
Разделить все диски на равные куски, равные объему самого маленького диска и собрать из этих кусков RAID.
Сводная таблица по имеющимся дискам ниже:
{{:blog:2022:11:12:20221112-164602.png}}
Цветом выделены разделы дисков которые будут объединены в один vdisk.
Предварительно я разделил диски на разделы с использованием ''gdisk''. Вот пример вывода команды для самого большого накопителя на 1ТБ:
Disk /dev/sda: 1951170560 sectors, 930.4 GiB
Model: SMC2108
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 6A752F75-CFFE-495A-9474-8CA6E2BA4B17
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1951170526
Partitions will be aligned on 2048-sector boundaries
Total free space is 4032 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 487792127 232.6 GiB 8300 Linux filesystem
2 487792640 975584766 232.6 GiB 8300 Linux filesystem
3 975585280 1463377406 232.6 GiB 8300 Linux filesystem
4 1463377920 1951170046 232.6 GiB 8300 Linux filesystem
Команда создания пула выглядит следующим образом:
zpool create tank
mirror /dev/sda1 /dev/sdc1 \
mirror /dev/sda2 /dev/sdd1 \
mirror /dev/sda3 /dev/sde1 \
mirror /dev/sda4 /dev/sdh1 \
mirror /dev/sdc2 /dev/sdd2 \
mirror /dev/sde2 /dev/sdh2 \
mirror /dev/sdg1 /dev/sdb1
Результат на снимке экрана ниже:
{{:blog:2022:11:12:20221112-164451.png}}
При разворачивании шаблона заметно что запись идет на все диски. Возможно даже чересчур на все.
{{:blog:2022:11:12:20221112-164908.png}}
===== Результаты тестов =====
{{:wiki:benchmark:results:fio:20221112-215317.png}}
{{:wiki:benchmark:results:fio:20221112-215321.png}}
Результат достаточно сложно интерпретировать из-за нестабильности показаний. Я полностью отрезал последовательное чтение, так как это не показательное значение для данного теста.
Грубо говоря производительность сравнимая, но в случае с ZFS достигаются более стабильные показатели. Например в btrfs полностью отсутствует какая-либо вменяемая скорость на всех нагрузках, связанных с записью.
Графики ZFS больше походят на то, что я обычно вижу в этом тесте а с btrfs что-то явно не так.