Для обеспечения необходимой функциональности Vinum использует четырехуровневую иерархию объектов:
"Видимая снаружи" сущность -- виртуальный диск, называемый томом (volume). Тома в основном аналогичны дискам UNIX®, хотя имеются и мелкие различия. На тома нет ограничений по размеру.
Тома образуются из наборов (plex), каждый из которых представляет полное адресное пространство тома. Данный уровень иерархии, таким образом, реализует избыточность. Наборы являются аналогами отдельных дисков в зеркалированном массиве; содержимое наборов идентично.
Поскольку Vinum работает в среде подсистемы хранения данных UNIX, многодисковые наборы можно было бы реализовать на базе дисковых разделов UNIX. На практике, подобная реализация недостаточно гибка (диски UNIX могут иметь весьма ограниченное число разделов). Вместо этого Vinum вводит еще один уровень абстракции: единый дисковый раздел UNIX (drive в терминах Vinum) делится на непрерывные области, называемые поддисками (subdisk), которые и будут "строительным материалом" для наборов.
Поддиски, как уже упоминалось, располагаются внутри приводов (drive) Vinum, существующих дисковых разделов UNIX. Привод может содержать неограниченное количество поддисков. Небольшая область в начале привода зарезервирована под хранение информации о конфигурации и состоянии Vinum; все остальное пространство пригодно для хранения данных.
Сейчас мы опишем, как эта иерархия обеспечивает необходимую функциональность для Vinum.
Наборы могут состоять из большого количества поддисков, распределенных по разным приводам Vinum. Стало быть, размеры отдельных дисков не ограничивают размер набора, а следовательно, и тома.
Vinum реализует избыточность посредством связывания с томом нескольких наборов. Содержимое каждого набора является полной копией содержимого тома. Количество наборов в томе может быть от одного до восьми.
Хотя набор представляет данные тома целиком, отдельные части содержимого тома могут быть представлены не всеми наборами. Во-первых, для некоторых частей набора поддиски могут быть не определены; во-вторых, часть набора может быть потеряна из-за отказа диска. До тех пор, пока хотя бы один набор может обеспечить данные для полного адресного пространства тома, том полностью функционален.
Vinum поддерживает как конкатенацию, так и перемежение на уровне наборов:
Сцепленный набор использует пространство поддисков последовательно, склеивая их "встык".
Набор с перемежением разбивает данные по поддискам в соответствии с размером страйпа. Поддисков должно быть по меньшей мере два (чтобы отличить набор от сцепленного), и все они должны быть одинакового размера.
Vinum, распространяемый с FreeBSD версии 7.0 поддерживает два вида организации наборов:
Сцепленные наборы наиболее гибки в использовании: они могут содержать любое количество поддисков произвольного размера. Такой набор может быть расширен "на лету" путем добавления дополнительных поддисков. Поддержка сцепленных наборов требует меньших затрат процессорного времени, чем поддержка наборов с перемежением (хотя различие вряд ли поддается измерению). С другой стороны, они наиболее чувствительны к концентрации нагрузки в одной области тома, при которой один из дисков принимает на себя всю нагрузку, а остальные бездействуют.
Основным преимуществом наборов с перемежением (RAID-0) является распределение "горячих точек" нагрузки; вы можете даже полностью уравнять ее, выбрав оптимальный размер страйпа (около 256 kB). Недостатки такой организации -- более сложный код и ограничения на поддиски: все они должны быть строго одного размера. Кроме того, процесс добавления поддиска в набор с перемежением "на ходу" является настолько нетривиальной задачей, что в настоящее время Vinum не поддерживает эту операцию. Дополнительное (тривиальное) ограничение состоит в том, что набор с перемежением должен содержать как минимум два поддиска, иначе он будет неотличим от сцепленного.
Преимущества и недостатки различных методов организации наборов описаны в Табл. 19-1.
Таблица 19-1. Методы организации наборов Vinum
Тип набора | Поддисков, мин. | Расширяется "на лету" | Поддиски строго одного размера | Применение |
---|---|---|---|---|
сцепленный (concatenated) | 1 | да | нет | Крупные системы хранения, требующие максимальной гибкости и умеренной производительности |
с перемежением (striped) | 2 | нет | да | Высокая производительность, в том числе в случае параллельного доступа к данным |
Пред. | Начало | След. |
Целостность данных | Уровень выше | Несколько примеров |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.