vinum(8) |
Руководство системного администратора FreeBSD |
vinum(8) |
vinum - программа управления диспетчером логических томов (Logical Volume Manager)
Утилита vinum взаимодействует с компонентом ядра диспетчерра логических томов Vinum. Утилита предназначена либо для интерактивного использования, если запущена без аргументов командной строки, либо для выполнения одной переданной в командной строке команды. В интерактивном режиме утилита vinum сохрраняет хронологию выполнения команд.
После команд vinum могут указываться необязательные опции. Любую из следующих опций можно указывать для любой команды, но в некоторых случаях опции игнорируются. Например, команда stop игнорирует опции -v и -V.
Команды vinum выполняют следующие функции:
Если указано ключевое слово rename, утилита vinum переименовывает объект (и, в случае сплетения, любые входящие в него поддиски) в соответствии со стандартными соглашениями по именованию vinum. Для переименования объекта с присвоением нестандартного имени испольуйте команду rename.
При подключении поддисков следует учитывать несколько соображений:
Обычно команда concat устанавливает для тома и его компонентов произвольные имена. Имя состоит из слова "vinum" и небольшого целого числа, например, "vinum3". Можно задать имя для тома явно с помощью опции -n имя. Имена сплетений и поддисков строятся стандартно на базе имени соответствующего тома.
Для дисков имена задавать нельзя. Если диски были проинициализированы как диски vinum, имя остается. В противном случае, диски получают имена, состоящие из слова "vinumdrive" и небольшого целого числа, например, "vinumdrive7". Как и для команды create, опцию -f можно использовать для переопределения ранее данного имени. Опция -v используется для получения подробных результатов.
Примеры использования этой команды см. в разделе "УПРОЩЕННОЕ КОНФИГУРИРОВАНИЕ" ниже.
Учтите, что функция vinum create - аддитивна: если выполнить ее несколько раз, будет создано несколько экземпляров всех неименованных объектов.
Обычно команда create не будет изменять имена существующих дисков vinum, чтобы случайно не стереть их. Корректный способ удалить не нужные более диски vinum - сбросить конфигурацию с помощью команды resetconfig. В некоторых случаях, однако, может потребоваться создать новые данные на дисках vinum, которые не удается запустить. В этом случае используйте команду create -f.
Команда detach не уменьшает количество поддисков в сплетении с чередованием или типа RAID-5. Вместо этого поддиск помечается как отсутствующий и может быть в дальнейшем заменен с помощью команды attach.
При указании опции -V команда info выдает информацию о последних (до 64) запросах ввода-вывода, обработанных драйвером vinum. Эта информация собирается, только если установлен флаг отладки 8. Информация выдается в следующем формате:
vinum -> info -V Flags: 0x200 1 opens Total of 38 blocks malloced, total memory: 16460 Maximum allocs: 56, malloc table at 0xf0f72dbc Time Event Buf Dev Offset Bytes SD SDoff Doffset Goffset 14:40:00.637758 1VS Write 0xf2361f40 91.3 0x10 16384 14:40:00.639280 2LR Write 0xf2361f40 91.3 0x10 16384 14:40:00.639294 3RQ Read 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.639455 3RQ Read 0xf2361f40 4.23 0xd2109 8192 17 0 0 0 14:40:00.639529 3RQ Read 0xf2361f40 4.15 0x6e109 8192 16 0 0 0 14:40:00.652978 4DN Read 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.667040 4DN Read 0xf2361f40 4.15 0x6e109 8192 16 0 0 0 14:40:00.668556 4DN Read 0xf2361f40 4.23 0xd2109 8192 17 0 0 0 14:40:00.669777 6RP Write 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.685547 4DN Write 0xf2361f40 4.39 0x104109 8192 19 0 0 0 11:11:14.975184 Lock 0xc2374210 2 0x1f8001 11:11:15.018400 7VS Write 0xc2374210 0x7c0 32768 10 11:11:15.018456 8LR Write 0xc2374210 13.39 0xcc0c9 32768 11:11:15.046229 Unlock 0xc2374210 2 0x1f8001
Поле Buf всегда содержит адрес заголовка пользовательского буфера. Его можно использовать для идентификации запроса, связанного с пользовательским запросом, хотя это и не на 100% надежно: теоретически, два последовательных запроса могут использовать один и тот же заголовок буфера, хотя это и нетипично. Начало запроса идентифицируется значениями 1VS или 7VS в поле Event. Первый представленный выше пример показывает запросы драйвера, связанные с выполнением запроса пользователя. Второй пример - запрос ввода-вывода поддиска с блокировкой.
Поле Event содержит информацию, связанную с последовательностью событий в цепочке выполнения запроса (request chain). Цифры от 1 до 6 показывают приблизительную последовательность событий, а двухбуквенное сокращение описывает действие:
В следующих запросах Dev - номер устройства соответствующего раздела диска, Offset - смещение от начала раздела, SD - индекс поддиска в vinum_conf, SDoff - смещение от начала поддиска, Doffset - смещение соответствующего запроса данных, а Goffset - смещение соответствующего запроса группы, если оно необходимо.
Укажите опцию -S, если необходимо записывать блоками нестандартного (отличающегося от 16 Кбайт) размера. Утилита vinum выдает сообщение на консоль по завершении инициализации.
Опция -r относится к томам и сплетениям: если она указана, то рекурсивно выдает информацию для поддисков и (для тома) сплетений, составляющих объекты. Команды lv, lp, ls и ld выдают только тома, сплетения, поддиски и диски, соответственно. Они особенно полезны при вызове без параметров.
Опция -s вызывает выдачу утилитой vinum статистической информации по устройствам, опция -v (verbose) приводит к выдаче определенной дополнительной информации, а опция -V обеспечивает выдачу существенного объема дополнительной информации.
Если указана опция -s, команда mirror строит сплетения с чередованием, с размером полосы 279 Кбайт. Размер поддисков в каждом сплетении соответствует размеру наименьшего фрагмента подряд идущего свободного места на всех дисках, формирующих сплетение. И в этом случае рамзеры сплетений могут отличаться.
Обычно команда mirror автоматически создает имя для тома и его компонентов. Это имя состоит из слова "vinum" и небольшого целого числа, например, "vinum3". Это можно изменить с помощью опции -n имя, которая присваивает указанное имя тому. Имена сплетений и поддисков строятся на основе имени тома стандартным образом.
Имена дисков выбирать нельзя. Если диски уже были проинициализированы как диски vinum, их имена неизменны. В противном случае, диски получают имена, состоящие из слова "vinumdrive" и небольшого целого числа, например, "vinumdrive7". Как и в случае команды create, опция -f может использоваться для указания того, что прежнее имя надо изменить. Опция -v используется для выдачи более детальной информации.
Ряд примеров использования этой команды представлен в разделе "УПРОЩЕННОЕ КОНФИГУРИРОВАНИЕ" ниже.
Опция -f для этой функции необходима, поскольку в настоящее время она не сохраняет данные на поддиске. Эта возможность будет добавлена в дальнейшем. Но и в нынешнем виде эта команда подходит для восстановления после сбоя диска.
Команда read предназначена для избирательной загрузки конфигурации vinum в системе, где есть другие разделы vinum. Если необходимо запустить все разделы в системе, проще использовать команду start.
Если по ходу выполнения этой команды утилитой vinum возникают любые ошибки, она отключает автоматическое обновление конфигурации, чтобы предотвратить повреждение копий на диске. Это также происходит, если в конфигурации на диске обнаруживается ошибка (например, поддиски с недопустимой спецификацией занимаемого места). Изменения можно возобновить с помощью команд setdaemon и saveconfig. Сбросьте бит 2 (числовое значение - 4) в маске опций демона, чтобы снова можно было сохранять изменения конфигурации.
Если указан флаг -f, команда rebuildparity начинает пересоздание с начала сплетения. Если указан флаг -v, команда rebuildparity сначала проверяет существующие блоки четности и выдает информацию о тех из них, которые оказались некорректными до пересоздания. Если указан флаг -V, команда rebuildparity выдает отчет о ходе работы.
# vinum resetconfig WARNING! This command will completely wipe out your vinum configuration. All data will be lost. If you really want to do this, enter the text NO FUTURE Enter text -> NO FUTURE Vinum configuration obliterated
Как и сказано в сообщении, эта команда - жест отчаяния. Используйте ее, только если хотите никогда больше не видеть существующую конфигурацию.
Обычно команда vinum отказывается удалять том или сплетение, если у него есть подчиненные сплетения или поддиски, соответственно. Можно потребовать от vinum безусловного удаления объекта с помощью опции -f или просто удалить все подчиненные объекты тоже с помощью опции -r (recursive). При удалении тома с опцией -r будут удалены как сплетения, так и поддиски, принадлежащие сплетениям.
Если имена объектов не указаны, утилита vinum сканирует все известные системе диски в поисках дисков vinum, а затем читает конфигурацию так, как было описано для команды read. Диск vinum (vinum drive) содердите заголовок со всей информацией о данных, хранящихся на диске, включая имена других дисков, которые необходимы для представления сплетений и томов.
Если по ходу выполнения этой команды утилитой vinum будут обнаружены ошибки, она отключит автоматическое обновление конфигурации, чтобы избежать повреждения копий на диске. То же самое произойдет, если конфигурация на диске содержит ошибку (например, поддиски с недопустимой спецификацией занимаемого места). Изменения можно возобновить с помощью команд setdaemon и saveconfig. Сбросьте бит 2 (числовое значение - 4) в маске опций демона, чтобы снова можно было сохранять изменения конфигурации.
Если имена объектов указаны, утилита vinum запускает их. Обычно эту операцию имеет смысл выполнять только для поддисков. Действие зависит от текущего состояния объекта:
Когда поддиск запускается (переводится в состояние up), утилита vinum автоматически проверяет состояние сплетения и тома, к которым он может принадлежать и изменяет их состояние при необходимости.
Если объект является сплетением, команда start проверяет состояние подчиненных поддисков (и сплетений, в случае тома) и запускает все поддиски, которые можно запустить.
Для запуска сплетения в томе из нескольких сплетений данные должны быть скопированы с другого сплетения в томе. Поскольку зачастую для этого требуется много времени, это обычно делается в фоновом режиме. Если необходимо дождаться завершения этой операции (например, если она выполняется в сценарии), используйте опцию -w.
Копирование данных не только требует много времени, но и может существенно нагружать систему. Можно указать размер передаваемого блока в байтах или секторах с помощью опции -S, и интервал (в миллисекундах) ожидания между копированиями каждого блока с помощью опции -i. Обе эти опции позволяют снизить нагрузку на систему.
Команда stop может работать только если vinum был загружен как демон ядра (kld), поскольку статически сконфигурированных драйвер выгрузить нельзя. Команда vinum stop не сработает, если vinum сконфигурирован статически.
Если имена объектов указаны, команда stop отключает доступ к объектам. Если объекты имеют подчиненные объекты, эти подчиненные объекты должны быть либо не активны (остановлены или в состоянии ошибки), либо надо указывать опции -r и -f. Эта команда не удаляет объекты из конфигурации. К ним можно будет снова получить доступ после команды start.
По умолчанию утилита vinum не останавливает активные объекты. Например, нельзя остановить сплетение, подключенное к активному тому, и нельзя отключить открытый том. Опция -f требует от vinum пропустить эту проверку и удалить объект в любом случае. Используйте эту опцию максимально осторожно, и только помня о последствиях: при некорректном использовании она может привести к серьезному повреждению данных.
Обычно команда stripe создает для тома и его компонентов стандартные имена. Имя состоит из слова "vinum" и небольшого целого числа, например, "vinum3". Можно задать нестандартное имя с помощью опции -n имя, что присваивает указанное имя тому. Имена сплетений и поддисков строятся на основе имени тома стандартным образом.
Имена для дисков задавать нельзя. Если диски уже были проинициализированы как диски vinum, имя остается. В противном случае, диски получают имена, начинающиеся со слова "vinumdrive", и заканчивающееся небольшим целым числом, например, "vinumdrive7". Как и в случае команды create, можно использовать опцию -f для изменения прежнего имени. Опция -v используется для получения детальных результатов.
Несколько примеров использования этой команды см. в разделе "УПРОЩЕННОЕ КОНФИГУРИРОВАНИЕ" ниже.
В этом разделе описан упрощенный интерфейс для конфигурирования vinum с помощью команд concat, mirror и stripe. Эти команды создают удобные конфигурации для ряда стандартных ситуаций, но не обеспечивают такую гибкость, как команда create.
Описание этих команд было представлено выше. Вот ряд примеров, построенных на одном и том же наборе дисков. Учтите, что первый диск, /dev/da1h, - меньше других. Это влияет на размеры поддисков каждого вида.
Во всех следующих примерах используется -v, чтобы показать команды, передаваемые в систему, а также для получения информации о структуре тома. Без опции -v эти команды ничего не выдают.
Используйте том с одним конкатенированным сплетением для получения максимально возможного объема дисковой памяти без обеспечения защиты от сбоев диска:
vinum -> concat -v /dev/da1h /dev/da2h /dev/da3h /dev/da4h volume vinum0 plex name vinum0.p0 org concat drive vinumdrive0 device /dev/da1h sd name vinum0.p0.s0 drive vinumdrive0 size 0 drive vinumdrive1 device /dev/da2h sd name vinum0.p0.s1 drive vinumdrive1 size 0 drive vinumdrive2 device /dev/da3h sd name vinum0.p0.s2 drive vinumdrive2 size 0 drive vinumdrive3 device /dev/da4h sd name vinum0.p0.s3 drive vinumdrive3 size 0 V vinum0 State: up Plexes: 1 Size: 2134 MB P vinum0.p0 C State: up Subdisks: 4 Size: 2134 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 573 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 573 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 573 MB
В нашем случае использовано все место на всех четырех дисках, что дало нам в итоге 2134 Мбайта.
Том из одного сплетения с чередованием может обеспечить более высокую производительность, чем конкатенированное сплетение, но ограничения на сплетения с чередованием могут привести к уменьшению размера тома. Такой том тоже не обеспечивает защиту от сбоя диска:
vinum -> stripe -v /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume vinum0 plex name vinum0.p0 org striped 279k sd name vinum0.p0.s0 drive vinumdrive0 size 849825b sd name vinum0.p0.s1 drive vinumdrive1 size 849825b sd name vinum0.p0.s2 drive vinumdrive2 size 849825b sd name vinum0.p0.s3 drive vinumdrive3 size 849825b V vinum0 State: up Plexes: 1 Size: 1659 MB P vinum0.p0 S State: up Subdisks: 4 Size: 1659 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 414 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 414 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 414 MB
В этом случае размер поддисков ограничен наименьшим доступным диском, так что, получившийся в результате том имеет размер всего 1659 Мбайт.
Для повышения надежности можно использовать зеркалированный и конкатенированный том:
vinum -> mirror -v -n mirror /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume mirror setupstate plex name mirror.p0 org concat sd name mirror.p0.s0 drive vinumdrive0 size 0b sd name mirror.p0.s1 drive vinumdrive2 size 0b plex name mirror.p1 org concat sd name mirror.p1.s0 drive vinumdrive1 size 0b sd name mirror.p1.s1 drive vinumdrive3 size 0b V mirror State: up Plexes: 2 Size: 1146 MB P mirror.p0 C State: up Subdisks: 2 Size: 988 MB P mirror.p1 C State: up Subdisks: 2 Size: 1146 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 414 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 414 MB
В этом примере явно указано имя тома, mirror. Поскольку один диск меньше других, два сплетения имеют разный размер, и последние 158 Мбайт тома не защищены от сбоев. Чтобы гарантировать полную надежность в такой ситуации, используйте команду create для создания тома размером 988 Мбайт.
В качестве альтернативы, используйте опцию -s для создания зеркалированного тома из двух сплетений с чередованием:
vinum -> mirror -v -n raid10 -s /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume raid10 setupstate plex name raid10.p0 org striped 279k sd name raid10.p0.s0 drive vinumdrive0 size 849825b sd name raid10.p0.s1 drive vinumdrive2 size 849825b plex name raid10.p1 org striped 279k sd name raid10.p1.s0 drive vinumdrive1 size 1173665b sd name raid10.p1.s1 drive vinumdrive3 size 1173665b V raid10 State: up Plexes: 2 Size: 1146 MB P raid10.p0 S State: up Subdisks: 2 Size: 829 MB P raid10.p1 S State: up Subdisks: 2 Size: 1146 MB S raid10.p0.s0 State: up PO: 0 B Size: 414 MB S raid10.p0.s1 State: up PO: 279 kB Size: 414 MB S raid10.p1.s0 State: up PO: 0 B Size: 573 MB S raid10.p1.s1 State: up PO: 279 kB Size: 573 MB
В этом случае полезная часть тома - еще меньше, поскольку первое сплетение было уменьшено до размера самого маленького диска.
Утилита vinum требует, чтобы все параметры команд create были в файле конфигурации. Записи в файле конфигурации определяют тома, сплетения и поддиски, и могут быть в произвольном формате, но каждая запись должна быть в отдельной строке.
Некоторые параметры файла конфигурации задают размер (длины, размеры полос). Эти значения можно задавать в байтах или с указанием одной из следующих единиц измерения:
s | Указывает, что значение задано в секторах по 512 байтов. |
k | Указывает, что значение задано в килобайтах (1024 байта). |
m | Указывает, что значение задано в мегабайтах (1048576 байтов). |
g | Указывает, что значение задано в гигабайтах (1073741824 байта). |
b | Используется для совместимости с VERITAS. Указывает, что значение задано в блоках по 512 байтов. Это сокращение необнозначно, поскольку слово "блок" используется в разных смыслах, и его использование не рекомендуется. Используйте единицу измерения 's'. |
Например, значение 16777216 байтов можно также записать как 16m, 16384k или 32768s.
Файл конфигурации может содержать следующие записи:
Учтите, что для сплетений типа RAID-5 надо обязательно использовать команду init: иначе при сбое одного из поддисков произойдет существенное повреждение данных.
Для оптимальной производительности полосы должны быть размером минимум 128 Кбайт: меньший размер приведет к существенному увеличению количества операций ввода/вывода из-за распределения отдельных запросов по нескольким дискам. Повышение производительности из-за увеличения количества одновременных передач, вызванное таким распределением, не скомпенсирует падение производительности в связи с дополнительными задержками. Хорошей рекомендацией будет выбирать размер полосы в диапазоне от 256 Кбайт до 512 Кбайт. Степеней двойки при этом, однако, лучше избегать: обычно они приводят к размещению всех суперблоков на первом поддиске. Упрощенные команды используют размер полосы 279 Кбайт, что дает разумное распределение суперблоков.
Сплетение с чередованием должно иметь минимум два поддиска (иначе это просто конкатенированное сплетение), причем, одинакового размера. Сплетение типа RAID-5 должно иметь как минимум три поддиска, причем, одинакового размера. Практически сплетение типа RAID-5 должно включать не менее 5 поддисков.
# Пример файла конфигурации vinum # # Наши диски drive drive1 device /dev/da1h drive drive2 device /dev/da2h drive drive3 device /dev/da3h drive drive4 device /dev/da4h drive drive5 device /dev/da5h drive drive6 device /dev/da6h # Том из одного сплетения с чередованием volume tinyvol plex org striped 279k sd length 64m drive drive2 sd length 64m drive drive4 volume stripe plex org striped 279k sd length 512m drive drive2 sd length 512m drive drive4 # Два сплетения volume concat plex org concat sd length 100m drive drive2 sd length 50m drive drive4 plex org concat sd length 150m drive drive4 # Том из одного сплетения с чередованием и одного конкатенированного volume strcon plex org striped 279k sd length 100m drive drive2 sd length 100m drive drive4 plex org concat sd length 150m drive drive2 sd length 50m drive drive4 # Том из сплетения типа RAID-5 и сплетения с чередованием # Обратите внимание, что сплетение RAID-5 длинее на # один поддиск volume vol5 plex org striped 491k sd length 1000m drive drive2 sd length 1000m drive drive4 plex org raid5 273k sd length 500m drive drive1 sd length 500m drive drive2 sd length 500m drive drive3 sd length 500m drive drive4 sd length 500m drive drive5
Диски vinum в настоящее время являются разделами дисков BSD. Они должны быть типа vinum, чтобы предотвратить перезапись данных, используемых для других целей. Для изменения определения типа раздела используйте команду disklabel -e. Ниже представлено типичное разбиение диска на разделы, выдаваемое disklabel(8):
8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 81920 344064 4.2BSD 0 0 0 # (Cyl. 240*- 297*) b: 262144 81920 swap # (Cyl. 57*- 240*) c: 4226725 0 unused 0 0 # (Cyl.0 - 2955*) e: 81920 0 4.2BSD 0 0 0 # (Cyl.0 - 57*) f: 1900000 425984 4.2BSD 0 0 0 # (Cyl. 297*- 1626*) g: 1900741 2325984 vinum 0 0 0 # (Cyl. 1626*- 2955*)
В этом примере, раздел "g" может использоваться как раздел vinum. Разделы "a", "e" и "f" могут использоваться для создания файловых систем UFS или как разделы ccd. Раздел "b" является разделом подкачки, а раздел "c" представляет весь диск в целом и не должен использоваться для любых других целей.
Утилита vinum использует первые 265 секторов каждого раздела для информации о конфигурации, поэтому максимальный размер поддиска будет на 265 секторов меньше, чем объем диска.
Утилита vinum поддерживает журнальный файл, по умолчанию - /var/log/vinum_history, в который она записывает выполненные команды vinum. Имя этого файла можно изменить путем установки соответствующего значения переменной среды VINUM_HISTORY.
Перед каждым сообщением в журнальном файле указывается дата и время. Стандартный формат - "%e %b %Y %H:%M:%S". Подробнее о строке формата см. на странице справочного руководства strftime(3). Нестандартный формат можно задать в переменной среды VINUM_DATEFORMAT.
В этом разделе представлены практические советы по использованию vinum в системе.
Прежде всего, надо решить, где размещать данные. Необходимо выделить разделы диска специально для vinum. Это должны быть именно разделы, а не устройства в целом; нельзя использовать также раздел "c". Например, прекрасно подходят имена устройств /dev/da0e или /dev/ad3s4a. Не подходят устройства /dev/da0 и /dev/da0s1, поскольку представляют диск в целом, а не раздел, а также раздел /dev/ad1c, представляющий диск в целом - он должен быть типа unused. Примеры см. выше в разделе ПРИНЦИПЫ РАЗМЕЩЕНИЯ ДИСКОВ.
Настройка томов vinum зависит от поставленных целей. Есть несколько вариантов:
drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e drive d5 device /dev/da6e volume bigger plex org concat sd length 0 drive d1 sd length 0 drive d2 sd length 0 drive d3 sd length 0 drive d4 sd length 0 drive d5
В данном случае длина поддисков задается как 0, что означает "использоваться самый большой фрагмент свободного места, который удастся найти на диске". Если поддиск - единственный на диске, под него будет использоваться все свободное место.
Для настройки зеркалирования создайте несколько сплетений в томе. Например, для создания зеркалированного тома размером 2 Гбайта можно использовать следующий файл конфигурации:
drive d1 device /dev/da2e drive d2 device /dev/da3e volume mirror plex org concat sd length 2g drive d1 plex org concat sd length 2g drive d2
При создании дисков с зеркалированием важно убедиться, что данные каждого сплетения находятся на другом физическом диске, чтобы драйвер vinum мог обращаться ко всему адресному пространству тома даже при сбое одного диска. Учтите, что для каждого сплетения потребуется столько же места, сколько и для всего тома: в нашем примере том имеет размер 2 Гбайта, поэтому каждое сплетение (и каждый поддиск) должны быть размером 2 Гбайта, так что всего на дисках будет использовано 4 Гбайта.
Для настройки массива RAID-5 создайте одно сплетение типа raid5. Например, для создания эквивалентного тома размером 2 Гбайта, остающегося работоспособным при сбое одного диска, можно использовать следующий файл конфигурации:
drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e drive d5 device /dev/da6e volume raid plex org raid5 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4 sd length 512m drive d5
Сплетения типа RAID-5 требуют минимум трех поддисков, один из которых используется для хранения информации о четности и дла хранения данных не доступен. Чем больше дисков используется, тем большая доля дискового прострнаства может использоваться для хранения собственно данных. В нашем примере суммарно используется 2,5 Гбайта по сравнению с 4 Гбайтами в конфигурации с зеркалированием. Если придется использовать всего три диска, для хранения той же информации потребуется 3 Гбайта, например:
drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e volume raid plex org raid5 433k sd length 1g drive d1 sd length 1g drive d2 sd length 1g drive d3
Как и при создании дисков с зеркалированием, важно проверить, что данные каждого поддиска находятся на другом физическом диске, чтобы драйвер vinum мог получить доступ ко всему адресонму пространству тома даже при сбое одного диска.
Для реализации чередования используйте сплетение с чередованием:
drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e volume raid plex org striped 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4
Сплетение с чередованием должно состоять, как минимум, из двух поддисков, но повышение производительности будет больше при увеличении количества дисков.
drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e volume raid setupstate plex org striped 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4 plex org striped 433k sd length 512m drive d4 sd length 512m drive d3 sd length 512m drive d2 sd length 512m drive d1
В данном случае сплетения сосданы с чередованием, что повышает производительность, а то, что их два, повышает надежность. Обратите внимание, что в этом примере поддиски второго сплетения идут в порядке, противоположном первому сплетению. Это сделано из соображений производительности, которые обсуждаются далее. Кроме того, определение тома включает ключевое слово setupstate, что гарантирует запуск всех сплетений сразу после создания.
После создания необходимых файлов конфигурации запустите vinum и создайте тома. В следующем примере конфигурация задана в файле configfile:
# vinum create -v configfile 1: drive d1 device /dev/da2e 2: drive d2 device /dev/da3e 3: volume mirror 4: plex org concat 5: sd length 2g drive d1 6: plex org concat 7: sd length 2g drive d2 Configuration summary Drives: 2 (4 configured) Volumes: 1 (4 configured) Plexes: 2 (8 configured) Subdisks: 2 (16 configured) Drive d1: Device /dev/da2e Created on vinum.lemis.com at Tue Mar 23 12:30:31 1999 Config last updated Tue Mar 23 14:30:32 1999 Size: 60105216000 bytes (57320 MB) Used: 2147619328 bytes (2048 MB) Available: 57957596672 bytes (55272 MB) State: up Last error: none Drive d2: Device /dev/da3e Created on vinum.lemis.com at Tue Mar 23 12:30:32 1999 Config last updated Tue Mar 23 14:30:33 1999 Size: 60105216000 bytes (57320 MB) Used: 2147619328 bytes (2048 MB) Available: 57957596672 bytes (55272 MB) State: up Last error: none Volume mirror: Size: 2147483648 bytes (2048 MB) State: up Flags: 2 plexes Read policy: round robin Plex mirror.p0: Size: 2147483648 bytes (2048 MB) Subdisks:1 State: up Organization: concat Part of volume mirror Plex mirror.p1: Size: 2147483648 bytes (2048 MB) Subdisks:1 State: up Organization: concat Part of volume mirror Subdisk mirror.p0.s0: Size: 2147483648 bytes (2048 MB) State: up Plex mirror.p0 at offset 0 Subdisk mirror.p1.s0: Size: 2147483648 bytes (2048 MB) State: up Plex mirror.p1 at offset 0
Опция -v требует от утилиты vinum выдавать содержимое файла по ходу конфигурирования. Далее она выдает информацию о текущей конфигурации в том же формате, что и команда list -v.
После создания томов vinum, драйвер vinum отслеживает их состояние в своих внутренних файлах конфигурации. Снова создавать их не придется. В частности, при повторном выполнении команды create будут созданы дополнительные объекты:
# vinum create sampleconfig Configuration summary Drives: 2 (4 configured) Volumes: 1 (4 configured) Plexes: 4 (8 configured) Subdisks: 4 (16 configured) D d1 State: up Device /dev/da2e Avail: 53224/57320 MB (92%) D d2 State: up Device /dev/da3e Avail: 53224/57320 MB (92%) V mirror State: up Plexes: 4 Size: 2048 MB P mirror.p0 C State: up Subdisks: 1 Size: 2048 MB P mirror.p1 C State: up Subdisks: 1 Size: 2048 MB P mirror.p2 C State: up Subdisks: 1 Size: 2048 MB P mirror.p3 C State: up Subdisks: 1 Size: 2048 MB S mirror.p0.s0 State: up PO:0 B Size: 2048 MB S mirror.p1.s0 State: up PO:0 B Size: 2048 MB S mirror.p2.s0 State: up PO:0 B Size: 2048 MB S mirror.p3.s0 State: up PO:0 B Size: 2048 MB
Как показывает этот пример (на этот раз добавлена опция -f), повторное выполнение команды create привело к созданию четырех новых сплетений, каждое - с новым поддиском. Если необходиом создать другие тома, создайте для них новые файлы конфигуации. В них не обязательно задавать диски, о которых драйвер vinum уже знает. Например, для создания тома raid на четырех дисках, /dev/da1e, /dev/da2e, /dev/da3e и /dev/da4e, достаточно упомянуть два оставшихся:
drive d3 device /dev/da1e drive d4 device /dev/da4e volume raid plex org raid5 433k sd size 2g drive d1 sd size 2g drive d2 sd size 2g drive d3 sd size 2g drive d4
С помощью этого файла конфигурации мы получим:
# vinum create newconfig Configuration summary Drives: 4 (4 configured) Volumes: 2 (4 configured) Plexes: 5 (8 configured) Subdisks: 8 (16 configured) D d1 State: up Device /dev/da2e Avail: 51176/57320 MB (89%) D d2 State: up Device /dev/da3e Avail: 53220/57320 MB (89%) D d3 State: up Device /dev/da1e Avail: 53224/57320 MB (92%) D d4 State: up Device /dev/da4e Avail: 53224/57320 MB (92%) V mirror State: down Plexes: 4 Size: 2048 MB V raid State: down Plexes: 1 Size: 6144 MB P mirror.p0 C State: init Subdisks: 1 Size: 2048 MB P mirror.p1 C State: init Subdisks: 1 Size: 2048 MB P mirror.p2 C State: init Subdisks: 1 Size: 2048 MB P mirror.p3 C State: init Subdisks: 1 Size: 2048 MB P raid.p0 R5 State: init Subdisks: 4 Size: 6144 MB S mirror.p0.s0 State: up PO: 0 B Size: 2048 MB S mirror.p1.s0 State: up PO: 0 B Size: 2048 MB S mirror.p2.s0 State: up PO: 0 B Size: 2048 MB S mirror.p3.s0 State: up PO: 0 B Size: 2048 MB S raid.p0.s0 State: empty PO: 0 B Size: 2048 MB S raid.p0.s1 State: empty PO: 433 kB Size: 2048 MB S raid.p0.s2 State: empty PO: 866 kB Size: 2048 MB S raid.p0.s3 State: empty PO: 1299 kB Size: 2048 MB
Обратите внимание на рразмер сплетения RAID-5: он составляет всего 6 Гбайт, хотя совместно все его компоненты занимают 8 Гбайт дискового пространства. Причина в том, что пространство объемом с один поддиск используется для хранения данных о четности.
После перрезагрузки системы запустите vinum с помощью команды start:
# vinum start
Эта команда запустит все диски vinum в системе. Если, по любой причине, необходимо запустить только некоторые из них, используйте команду read .
Есть рряд ошибочных представлений о том, как настраивать RAID-массив для достижения наилучшей производительности. В частности, в большинстве систем используется слишком маленький размер полосы. Следующее обсуждение применимо ко всем RAID-системам, а не только к vinum.
Система блочного ввода/вывода ОС FreeBSD выдает запросы на чтение от 0,5 Кбайта до 128 Кбайт; в среднем - около 8 Кбайт. Ни в одной системе чередования нельзя предотвратить разбиение запроса на два физических запроса, и если сделать размер полосы слишком маленьким, он может быть разбит и на нескольк запросов. Это приведет к существенному падению производительности: уменьшение времени передачи для каждого диска с лихвой компенсиуется на порядок увеличивающимся ожиданием доступа.
При современных размерах дисков и состоянии системы ввода/вывода FreeBSD, следует ожидать достаточно небольшой доли фрагментированных запросов при использовании полос размером от 256 до 512 Кбайт; хотя при обоснованном применении RAID-массивов нет очевидных причин не увеличить размер до 2-4 Мбайт для больших дисков.
При выборе размера полосы учитывайте, что большинство современных файловых систем UFS использует группы цилиндров размером 32 Мбайта. Если размер полосы и количество дисков - степени двойки, вероятно, что все суперблоки и индексные дескрипторы будут помещены на один и тот же поддиск, что существенно повлияет на производительность. Выбирайте лучше нечетное число, например, 479 Кбайт.
Самый простой способ учесть влияние любой передачи данных в системе с множественным доступом - рассматривать ее с точки зрения потенциального узкого места, дисковой подсистемы: сколько всего времени работы диска потребует эта передача? Поскольку практически все кэшируется, время от выдачи запроса до его выполнения не так важно: важно, сколько всего времени запрос активно использует диски, время, в течение которого диски недоступны для выполнения передач других данных. В результате, не так уж важно, выполняются ли передачи одновременно или в разное врремя. Практически, время, которое нас интересует - это сумма общей задержки (времени на позиционирование и ожидания при вращении пластин, или времени, за которое требуемые данные окажутся под головками диска) и общего времени передачи. Для передачи данных по одному и тому же адресу на диски с той же скоростью вращения, время передачи зависит только от объема пеедаваемых данных.
Рассмотрим типичную статью дискуссионной группы или web-страницу размером 24 Кбайта, которая, вероятно, будети прочитана одной операцией ввода/вывода. Пусть диски обеспечивают скорость передачи 6 Мбайт/сек, среднее время позиционирования составляет 8 миллисекунд, а файловая система имеет размер блока 4 Кбайта. Поскольку прочитать надо 24 Кбайта, фрагменты можнео не учитывать, так что, считаем, что файл начинается на границе очердных 4 Кбайт. Количество необходимых передач зависит от того, где начинается блок: в данном случае, оно вычисляется по формуле (S + F - 1) / S, где S - размер полосы в блоках файловой системы, а F - размер файла в блоках файловой системы.
Похоже, что у некоторых аппаратных RAID-систем есть проблемы с большими полосами: они, по-видимому, передают на диск и с диска только всю полосу, так что увеличение размера полосы может отрицательно влиять на производительность. Утилита vinum от этой проблемы не страдает: все обмены данными оптимизируются и ненужные данные не передаются.
Учтите, что ни одна из широко известных программ оценки производительности не реализует условия действительно множественного доступа (более 100 одновременно работающих пользователей), так что правильность представленных утверждений проверить трудно.
С учетом представленных соображений, на производительность тома vinum влияют следующие факторы:
Перед созданием файловой системы на томе vinum запускать утилиту disklabel(8) не нужно. Просто выполните команду newfs(8). Используйте опцию -v, чтобы указать, что устройство не разбито на разделы. Например, чтобы создать файловую систему на томе mirror, выполните следующую команду:
# newfs -v /dev/vinum/mirror
При конфигурировании vinum следует учитывать также следующее:
Для объектов vinum существует понятие состояния. Подробнее см. на странице справочного руководства vinum(4). Объекты полностью доступны тольк в запущеном (up) состоянии. Чтобы изменить состояние объекта на up, используйте команду start. Для перевода объекта в состояние down используйте команду stop. Обычно переход в другие состояния осуществляется автоматически с учетом взаимосвязей объектов. Например, при добавлении сплетения к тому поддиски сплетения оказываются в состоянии empty, показывая, что хотя фактически диск доступен, данные на поддиске некорректны. В результате установки такого состояния, соответствующее сплетение будет установлено в состояние сбоя (faulty).
Во многих случаях при запуске поддиска система должна скопировать данные на поддиск. В зависимости от размера поддиска, это может потребовать много времени. На это время поддиск устанавливается в состояние reviving ("оживляется"). После успешного завершения операции копирования он автоматически запускается (устанавливается в состояние up). Можно останавливать и перезапускать процесс, выполняющий "оживление". Система отслеживает, насколько диск уже "оживлен" и, при повторном выполнении команды start, копирование продолжается с этой позиции.
Для поддержки согласованности тома пока одно или несколько его сплетений "оживляется", драйвер vinum записывает на поддиски, уже восстановленные до места записи. Он может также читать из сплетения, если считываемая область уже была восстановлена.
Следующие особенности работы не связаны с ошибками, и у них есть весьма существенные причины, но, оказалось, что они вызывают непонимание. Каждая из этих особенностей уже была описана в соответствующем разделе выше.
По аналогичным причинам команда vinum start не позволят создать диск на разделе "c". Раздел "c" используется системой для представления всего диска, и должен быть типа unused. Тут есть явный конфликт, который утилита vinum решает, просто не используя раздел "c".
На практике пользователей не часто интересует, что было в сплетении при создании, и другие диспетчеры томов жульничают, просто устанавливая всем сплетениям состояние up. Утилита vinum предлагает два способа обеспечить перевод вновь созданных сплетений в состояние up:
Утилита vinum впервые появилась в ОС FreeBSD 3.0. Компонент RAID-5 системы vinum был разработан для корпорации Cybernet Inc. (www.cybernet.com), для ее продукта NetMAX.
Драйвер vinum(4) не использует подсистему geom(4), поэтому тома vinum(4) нельзя использовать для средств, использующих GEOM, например, gbde(8).
FreeBSD 4.9 5 мая 2003 года
Copyleft (no c) - Fuck copyright! 2003-2004 В. Кравчук, OpenXS Initiative, перевод на русский язык
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |