Чередование данных на дисках


Для настройки и управления чередованием данных на дисках в операционной системе FreeBSD предназначена команда gstripe(8). Она позволяет создать один виртуальный диск из двух или более дисков. Преимущество чередования данных: обеспечивается возможность распределения операций ввода-вывода между несколькими дисками в массиве, что теоретически увеличивает пропускную способность во столько же раз, сколько дисков входит в состав массива. (Практика редко подтверждает теорию!)

Например, у меня есть три жестких диска — /dev/da0, /dev/da1 и /dev/da2. На каждом диске имеется единственный участок с единственным разделом (d) на этом участке. Вы можете вручную конфигурировать чередование данных на дисках всякий раз, когда это понадобится, а я буду исходить из предположения, что это необходимо делать автоматически, во время загрузки.

Для начала нужно загрузить модуль ядра geom_stripe с помощью команды gstripe load. Можно также добавить в файл /boot/loader.conf строку geom_stripe_load="YES", чтобы загрузить механизм чередования на этапе загрузки.

Создание провайдера с чередованием данных

Теперь нужно сообщить дискам, что они объединены провайдером с функцией чередования. В приведенном ниже примере создается устройство чередования с именем MyStripe. Это устройство включает в себя три диска. Ключ -s задает размер области чередования, равный 131 072 байт, или 128 Кбайт. Ключ -v включает режим более подробного вывода результатов работы gstripe(8):

# gstripe label -v -s 131072 MyStripe /dev/da0 /dev/da1 /dev/da2
Metadata value stored on /dev/da0.
Metadata value stored on /dev/da1.
warning: /dev/da2: only 9105018368 bytes from 9186602496 bytes used.
Metadata value stored on /dev/da2.
Done.

Здесь видно, что команда gstripe(8) сохранила на дисках информацию о провайдере чередования. Страница руководства утверждает, что эта информация сохраняется в последнем секторе диска. Здесь также видно, что диск /dev/da2 немного больше других, но команда gstripe(8) достаточно интеллектуальна, чтобы исключить из использования дополнительное пространство на этом диске.

Теперь, когда создан провайдер чередования, загляните в каталог /dev/stripe:

# ls /dev/stripe/
MyStripe

У нас появилось дисковое устройство /dev/stripe/MyStripe. Этот виртуальный диск не требует наличия метки диска или таблицы участков, хотя при необходимости вы можете создать их. Замечу, что объединение нескольких дисков в один большой раздел с тем, чтобы потом снова разделить его, выглядит, мягко говоря, несколько странно. Вам нужна лишь файловая система и точка монтирования нового устройства. Не забудьте запустить newfs(8) с ключом -U, чтобы включить механизм Soft Updates.

# newfs -U /dev/stripe/MyStripe
/dev/stripe/MyStripe: 26042.8MB (53335720 sectors) block size 16384,
fragment size 2048
        using 142 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976, 3387328,
...

Взгляните внимательнее на этот вывод команды newfs(8). Каким-то образом newfs(8) удалось отыскать группы цилиндров на этом виртуальном диске. Утилита fdisk(8) сообщает, что обнаружила цилиндры, головки и секторы. Это лишний раз доказывает, что информация о цилиндрах, головках и секторах не много значит; только информация о секторах имеет хоть какой-то смысл.

Теперь, когда можно смонтировать и использовать диск с чередованием данных, укажите устройство из каталога /dev/stripe в файле /etc/fstab как любое другое дисковое устройство.

Останов gstripe

Если нужно остановить работу механизма чередования (например, когда требуется обновить что-то, связанное с избыточностью), следует сообщить дискам, что они больше не участвуют в чередовании. Для этого отмонтируйте устройство чередования и выполните команду gstripe clear /dev/da0 /dev/da1 /dev/da2, чтобы стереть с дисков конфигурацию чередования. После этого можно выгрузить модуль ядра.

Ежедневная проверка состояния

Если вы хотите, чтобы FreeBSD производила проверку состояния устройств gstripe(8) каждый день и включала результаты в ежедневный отчет periodic(8), просто добавьте строку daily_status_gstripe_enable="YES" в файл /etc/periodic.conf.

Комментарии запрещены.