12.4. RAID

12.4.1. Программный RAID

12.4.1.1. ccd (Настройка объединенного диска)

Текст написалChristopher Shumway. Разметку выполнилValentino Vaschetto.

При выборе решения для организации хранилища самыми важными характеристиками являются скорость, надежность и стоимость. Очень редко все эти параметры характеристики имеются вместе, обычно быстрое и надежное устройство хранения стоит дорого, а при уменьшении стоимости в жертву приносятся скорость работы или надежность. При проектировании моей системы я отранжировал требования по порядку от наиболее желаемых до наименее нужных. В этом случае стоимость оказалась наиболее значащим фактором. Мне нужен был большой объем за разумную цену. Следующая характеристика, скорость, не так важна, так как в основном использование будет осуществляться через стомегабитный коммутируемый Ethernet, и это, скорее всего, и будет узким местом. Возможность распараллелить файловые операции ввода/вывода по нескольким дискам даст более чем достаточную для этой сети скорость. Наконец, требование надежности легко обеспечить. Все данные, помещаемые на это устройство хранения, уже были сброшены на диски CD-R. Это устройство в основном предназначается для онлайнового хранения, облегчающего доступ, так что если диск откажет, я могу его просто заменить, перестроить файловую систему и скопировать данные с CD-R.

В итоге мне нужно нечто, что даст мне максимум дискового пространства за мои деньги. В наши дни стоимость больших дисков IDE невелика. Я нашел место, где продавались IDE-диски Western Digital 30.7gb 5400 RPM примерно за сто тридцать долларов США. Я приобрел три диска, что дало мне около девяноста гигабайт онлайнового хранилища.

12.4.1.1.1. Установка оборудования

Я установил винчестеры в систему, в которой уже был один диск IDE в качестве системного. Идеальным решением было бы иметь для каждого диска IDE собственный IDE-контроллер и кабель, но без дополнительных трат на двойной IDE-контроллер это невозможно. Так что я определил перемычками два диска как ведомые (slave), а один как ведущий (master). Один был подключен к первому IDE-контроллеру как ведомый в паре с системным диском, а оставшиеся два стали парой ведомый/ведущий на втором IDE-контроллере.

До перезагрузки BIOS системы была настроена на автоматическое распознавание подключенных дисков. Более важно то, что при перезагрузке их распознала FreeBSD:

    ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
    ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
    ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
    ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

На этом этапе, если FreeBSD не распознала диски, проверьте, что вы правильно выставили перемычки. Я слышал от многих о проблемах, возникающих при выставлении перемычек на выбор кабелем (cable select) вместо принудительной настройки ведущий/ведомый (slave/master).

Следующей проблемой был способ их подключения как части файловой системы. Я немного поразбирался с vinum(8) () и ccd(4). В этой конкретной конфигурации ccd(4) оказался более хорошим выбором, в основном потому что он менее сложен. Меньшее количество элементов указывает на меньшую вероятность сбоя. Возможности vinum показались несколько превышающими мои потребности.

12.4.1.1.2. Настройка CCD

CCD позволяет мне взять несколько идентичных дисков и объединить их в одну логическую файловую систему. Для использования ccd нужно ядро со встроенной поддержкой ccd. Я добавил такую строку в мой файл конфигурации ядра и перестроил ядро:

    pseudo-device   ccd     4

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

Для настройки ccd сначала мне нужно было разметить диски. Вот как я сделал это:

    disklabel -r -w ad1 auto
    disklabel -r -w ad2 auto
    disklabel -r -w ad3 auto

При этом были созданы метки ad1c, ad2c и ad3c, которые занимали диск полностью.

Следующим шагом является изменение типа метки диска. Для этого я редактировал метку диска:

    disklabel -e ad1
    disklabel -e ad2
    disklabel -e ad3

При этом в редакторе, задаваемом переменной окружения EDITOR, в моем случае это был vi(1), открывалась текущая метка каждого соответствующего диска. Внутри редактора были видны разделы, подобные следующим:

    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

Мне необходимо было добавить новый раздел "e" для использования драйвером ccd(4). Как правило, он может быть скопирован с раздела "c", но поле fstype должно быть задано в значение 4.2BSD. После того, как я это сделал, метка моего диска должна выглядеть примерно так:

    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
      e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

12.4.1.1.3. Построение файловой системы

Теперь, после того, как я разметил все диски, мне нужно построить объединённый ccd-диск. Для этого я использовал утилиту под названием ccdconfig(8). ccdconfig воспринимает несколько аргументов, первым выступает устройство, которое нужно конфигурировать, в нашем случае это /dev/ccd0c. Файл устройства для ccd0c может ещё не существовать, так что для его создания предварительно выполните такие команды:

    cd /dev
    sh MAKEDEV ccd0

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

После чередования следуют флаги для ccdconfig. Если вы хотите включить зеркалирование диска, вы можете задать флаг здесь. В нашей конфигурации я не зеркалирую ccd, так что он остается нулевым.

Последним параметром для ccdconfig являются устройства, помещаемые в массив. Для их объединения я дал такую команду:

    ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e

При этом выполняется начальная настройка ccd. Теперь можно создавать новую файловую систему при помощи newfs(8).

    newfs /dev/ccd0c

12.4.1.1.4. Автоматическое выполнение

Наконец, если я хочу монтировать ccd, мне нужно сначала его настроить. Я записал мою текущую конфигурацию в файл /etc/ccd.conf при помощи такой команды:

    ccdconfig -g > /etc/ccd.conf

При перезагрузке скрипт /etc/rc запускает команду ccdconfig -C, если существует файл /etc/ccd.conf. При это ccd автоматически конфигурируется так, чтобы он мог быть смонтирован.

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

    ccdconfig -C

Затем нам нужна запись для ccd в файле /etc/fstab, чтобы он мог быть смонтирован во время загрузки системы.

    /dev/ccd0c              /media       ufs     rw      2       2

12.4.1.2. Менеджер томов Vinum

Мнеджер томов Vinum является драйвером блочного устройства, который реализует виртуальные диски. Он отделяет дисковое оборудование от интерфейса блочного устройства и работает с данными таким образом, что в результате повышается гибкость, производительность и надёжность по сравнению с традиционным взглядом на дисковое хранилище как на кусок дискового пространства. vinum(8) реализует модели RAID-0, RAID-1 и RAID-5, как по отдельности, так и в комбинациях.

Обратитесь к для получения более полной информации о about vinum(8).

12.4.2. Аппаратный RAID

FreeBSD поддерживает также целый ряд аппаратных контроллеров RAID. В этом случае реальная система RAID строится и управляется самим адаптером. При помощи встроенной в адаптер BIOS он самостоятельно управляет большинством операций с диском. Далее следует краткая руководство по настройке с использованием контроллера IDE RAID от Promise. Когда этот адаптер установлен и система стартует, выдаётся запрос на ввод информации. Следуйте экранным указаниям для входа в экран настройки адаптера. Отсюда пользователь должен иметь возможность объединить все подключенные диски. Когда он это сделает, диск или диски будут выглядеть для FreeBSD как один большой накопитель. Другие уровни RAID могут быть настроены аналогичным образом.