Разновеликие диски

На форуме http://forums.frenas.org нашел статью о создании RAIDZ из разновеликих дисков. Вроде бы, ничего нового. Но автор проработал технику так, что ничего не отваливается и не глючит.

Респекты уходят автору clinta : ссылка на оригинал его творения

Исходные

Для демонстрации предположим, что мы имеем:

  1. 2 диска по 2 Тб
  2. 2 диска по 1 Тб

Будем делать RaidZ1 из трех “дисков”, для чего склеим два однотерабайтных диска в один, но без райд-карты. Для этого будем использовать gconcat - стандартный модуль системы GEOM.

Все эти мумбо-юмбо будем делать на FreeNAS, ибо иначе зачем тогда все эти заморочки?

Инструкция (для FreeNAS)

  1. создаем через ГУИ пул (назовем его RAID) из всех наших новых дисков. Оно в реалии просто загоняет диски в gpt, делает на них своп, создает партиции для дальнейших извращений и прописывает в конфиге место монтирования пула (/mnt/RAID). Я подобное уже описывал, но… хорошие мысли приходят в голову не одному мне.
    • что еще важно - на этом этапе можно включить шифрование (если есть желание и процессор поддерживает хардварное шифрование)
  2. Добавляем pre-init:
    gconcat load

  3. Через терминал убиваем наш созданный на шаге 1 пул:

    zpool destroy RAID

  4. Определяем UUID-ы партиций, входящих в пул:

    gpart list | grep 'Name\|Mediasize\|rawuuid'
    ....
      1. Name: da3p1
         Mediasize: 2147483648 (2.0G)
         rawuuid: cb966fbf-6b2d-11e3-9a2c-000c296ed231
      2. Name: da3p2
         Mediasize: 1071594257920 (998G)
         rawuuid: cb9aef83-6b2d-11e3-9a2c-000c296ed231
      1. Name: da3
         Mediasize: 1073741824000 (1T)
       
      1. Name: da4p1
         Mediasize: 2147483648 (2.0G)
         rawuuid: cbb435c7-6b2d-11e3-9a2c-000c296ed231
      2. Name: da4p2
         Mediasize: 1071594257920 (998G)
         rawuuid: cbb8b608-6b2d-11e3-9a2c-000c296ed231
      1. Name: da4
         Mediasize: 1073741824000 (1T)

    Начало ответа системы о дисках емкостью 2 Тб отрезано - нас они на этом этапе не интересуют. Главное, что теперь мы знаем UUID-ы для дисков, которые надо склеивать.

  5. Склеиваем диски с помощью gconcat. Используем опцю label вместо init, т.к. label пишет метаданные в хвост каждого диска так, что он может автоматически подгружаться в gconcat при обнаружении. Если используются шифрованные диски, склеиваем .eli вольюмы, как я в этом примере

    gconcat label concat1 /dev/gptid/cb9aef83-6b2d-11e3-9a2c-000c296ed231.eli /dev/gptid/cbb8b608-6b2d-11e3-9a2c-000c296ed231.eli

    • Про создание шифрованных разделов см. Encrypted swap, однако, я бы рекомендовал настраивать шифрование на этапе 1 - при создании пула.
    • Можно предположить, что в пул надо вгонять наш вновь полученый диск concat1, но фишка как раз в том, что МЫ ПОЙДЕМ ДРУГИМ ПУТЕМ и избежим проблем.
    • Дело в том, что метаданные от gconcat лежат в самом конце девайса, а данные от zfs - в начале. И метаданные от ZFS окажутся не только в начале устройства concat1 (несколько необычного для zpool), но и в начале более привычного для zpool устройства - диска /dev/gptid/cb9aef83-6b2d-11e3-9a2c-000c296ed231.eli, составляющего первую часть устройства gconcat.
    • И, чтобы разрулить эту хрень, мы… запишем на gconcat1 таблицу разделов, создадим раздел и загоним в пул уже этот раздел! Гениально! Респект автору!
  6. Рвзбиваем на партиции устройство concat1:

    #gpart create -s gpt /dev/concat/concat1
    concat/concat1 created
    # gpart add -t freebsd-zfs concat/concat1
    concat/concat1p1 added

    • Что опять же приятно, оно создало партиции в привычном для FreeNAS месте - в /dev/gptid
  7. Вылавливаем UUID-ы всех наших партиций:

    gpart list | grep 'Name\|Mediasize\|rawuuid'

    Ответ системы отрезан, ибо там дофига, а оно нам надо?

  8. Создаем пул, причем делаем это, используя UUID-ы, т.к. FreeNAS использует именно их (а мы хотим это сделать максимально приближено к алгоритму FreeNAS, чтобы минимизировать возможные расхождения)

    zpool create -m /mnt/RAID -f RAID raidz gptid/cb492a04-6b2d-11e3-9a2c-000c296ed231.eli gptid/cb654af1-6b2d-11e3-9a2c-000c296ed231.eli gptid/b05227bf-6b2f-11e3-9a2c-000c296ed231

    Поскольку я использую шифрование, я беру партиции с .eli, когда они расположены на физических дисках, и склееную партицию - без .eli, т.к. в ее состав входят две шифрованные партиции физических дисков.

  9. Иногда при перезагрузке пул отваливается, но это можно фиксить командой

    zpool import RAID

    Гланое подозрение в причине отваливания пула при перезагрузке - использование в одном пуле партиций с .eli и без .eli: то есть, отваливания пула бы не было, если бы не использовалось шифрование (но это только предположение)

volumes/zfs/different_sized_to_zpool.txt · Last modified: 2015/11/20 13:59 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5