Занимательная GEOM’етрия Евгений Зобнин ака j1m Хакер, номер #096, стр. 096-116-4 # gmirror load # sysctl kern.geom.debugflags=16 # gmirror label -b round-robin gm0 /dev/ad0 Перезапускаем mirror, чтобы изменения вступили в силу: # gmirror unload # gmirror load Подключаем второй диск: # gmirror insert gm0 /dev/ad2 После подключения к зеркалу второго диска начнется синхронизация. Для диска емкостью 120 Гб эта операция может длиться до 5 часов. Строка round-robin в третьей команде означает алгоритм балансировки. Доступно 4 алгоритма: 1. load - чтение с менее загруженного диска; 2. prefer - чтение с диска, имеющего более высокий приоритет (чем раньше диск был добавлен в массив, тем выше его приоритет); 3. round-robin - поочередное чтение с каждого диска (наиболее производительный алгоритм); 4. split - распределение запросов на чтение больших объемов данных (4 Кб и более) по дискам (дефолтовый алгоритм). Чтобы зеркалирование включалось во время инициализации системы, необходимо дать указание загрузчику подключать модуль geom_mirror (echo geom_mirror_load="YES" >> /boot/loader.conf) и отредактировать файл /etc/fstab таким образом, чтобы все вхождения /dev/ad0 были заменены /dev/mirror/gm0 (/dev/ad0s1a - /dev/mirror/gm0s1a и т.д.). В любой момент к массиву может быть добавлен третий диск. Для удаления диска из массива используется команда gmirror remove gm0 ad2. Mirror очень устойчив к сбоям. Если один из дисков выйдет из строя, то после перезагрузки система продолжит нормальную работу. После того как из магазина будет доставлен и подключен новый диск, mirror автоматически его найдет и произведет синхронизацию. А в случае аварийного отключения питания синхронизация продолжится с прерванного места. Анатомия GEOM Механизм GEOM объектно-ориентированный. Согласно словарю ООП, модуль называется «классом». В работающей системе для каждого класса может быть создан один или несколько «экземпляров», в обязанности которых как раз и входит выполнение одного из видов преобразования. Для каждого жесткого диска будет создано по одному экземпляру класса mbr, делящего диск на слайсы (разделы в терминологии MS), для каждого слайса с меткой BSD - по экземпляру класса bsd, разбивающего слайс на разделы и т.д. К каждому экземпляру класса может быть привязан один или более «поставщик» и «потребитель». Поставщик - это «главная дверь», через которую экземпляр представляет свои услуги, он напрямую связан с элементом каталога /dev. В случае с ATA-диском, разбитым на 2 слайса, у экземпляра класса MBR будет 2 поставщика (представленные файлами /dev/ad0s1 и /dev/ad0s2). Экземпляр другого класса подключается к поставщику через потребитель, образуя цепь, по которой будут проходить запросы ввода-вывода. Работу механизма GEOM гораздо проще понять на примере, чем изучая голую теорию и представляя себе якорные цепи сухогрузов. На рисунке изображена стандартная топология GEOM: ATA-диск, разбитый на 2 слайса; один из слайсов разбит на 2 раздела. В начале цепи находится экземпляр класса disk, который напрямую взаимодействует с драйвером ATA-контроллера. К его поставщику подключены экземпляры классов mbr и dev. Первый делит диск на 2 слайса, сверяясь с таблицей разделов, расположенной в секторе MBR. Второй помещает файл устройства (ad0) в каталог /dev. Экземпляр класса mbr имеет 2 поставщика по количеству слайсов. К первому подключены экземпляры классов bsd и dev. Второй слайс не является BSD-слайсом, поэтому к нему подключен только dev. Экземпляр класса bsd делит слайс ad0s1 на 2 раздела и поэтому также имеет 2 поставщика. К каждому из них подключены экземпляры класса dev, которые создают специальные файлы /dev/ad0s1 и /dev/ad0s2 и замыкают цепь. |